在Ubuntu搭建PPTP并支持IPv6

前面说过如何搭建PPTP VPN的方法了,只是最近折腾IPv6比较多(主要是手欠$6买了两个渣渣VPS基本只能用v6的网访问,一开始是打算用那两个渣渣VPS里面的一个搭一个OpenVPN来拿到V6的访问,结果搞了三天的结果是梯子搭好了IPV6的地址也有了然而。。。。有地址没网络。),于是就想起来能不能用VPN的方式去折腾到v6的网络联通性。

配置服务器的IPv6地址

首先检查TUN设备是否有效: #cat /dev/net/tun 如果返回的结果为 cat: /dev/net/tun: File descriptor in bad state ,一般情况下表示TUN/TAP可用,否则去控制面板吧 然后在配置IPv6之前,我们得先准备一点东西。。。。。。你要配IPV6当然还要有IP6的地址啊,然而这并不是事,地址可以在tunnelbroker.net申请到,他会给你分配一个/64的IPv6地址块,至于什么是Tunnel Broker还是自行谷歌吧 - - 申请到IPv6的地址后会有一个详细信息界面,上面有 IPv6 Tunnel Endpoints Server IPv4 Address:【隧道的服务器的地址】 Server IPv6 Address:【隧道的服务器IP6的地址】 Client IPv4 Address:【你自己的服务器的地址】 Client IPv6 Address:【你分配到的IP6的地址】 这里要注意隧道的服务器地址和你分配到的IP6的地址,后面要用。 对于非OpenVZ的服务器(Xen/KVM): 在申请完IPV6的地址以后,在详情页面,点击Example Configurations,然后“Select Your OS”选择你正在使用的Linux版本,然后下面的文本框会给出配置代码,复制到SSH执行一般就可以了。 对于OpenVZ的服务器: 由于一般OpenVZ服务提供商内核版本都是2.6.32的版本,一般都不带SIT设备的功能,所以需要用软件来模拟。这里我用的是tb-tun mkdir tb cd tb wget http://tb-tun.googlecode.com/files/tb-tun_r18.tar.gz tar zxf tb-tun_r18.tar.gz gcc tb_userspace.c -l pthread -o tb_userspace setsid ./tb_userspace tb [隧道的服务器的地址] > /dev/null 继续配置,把获取到的IPv6的地址附加上去 ifconfig tb up ifconfig tb inet6 add 【你分配到的IP6的地址】 ifconfig tb mtu 1480 ip -6 route add default dev tb 这时候你运行 ifconfig 就能看到一个名叫tb的设备了。 然后配置路由 ip -6 route add default dev tb /sbin/ip -6 route add default dev tb 这时候可以用 ping6 -c 20 ipv6.google.com 来测试你IPv6的连通性了 如果这个时候你没有ping通,对于OpenVZ的服务器可以考虑删除默认网卡venet0的ip6的路由 ip -6 route del default dev venet0 这样应该就没问题了

配置PPTP服务器支持IPV6

现在该配置PPTP来让他支持IPV6了 首先安装radvd , # apt-get install radvd -y 然后修改 /etc/ppp/pptpd-options (修改哪一个文件取决于你在 /etc/pptpd.conf里面 option 的值),在后面加入两行 ipparam pptp ipv6 , 第二行里面是 ipv6空格逗号空格 然后新建文件夹 /etc/ppp/ipv6-radvd # mkdir /etc/ppp/ipv6-radvd 创建文件:/etc/ppp/ipv6-up.d/radvd #!/bin/sh if test $PPP_IPPRARM != pptpd ;then exit 0 fi ADDR=$(echo $PPP_REMOTE | cut -d : -f 3,4,5,6) if test x$ADDR == x ; then echo "Unable to generate IPv6 Address" exit 0 fi ADDR=(你分配到的IP6地址,可以在详情界面的 Routed IPv6 Prefix找到,去掉::/64):$ADDR #add route route -6 add $ADDR/128 dev $PPP_IFACE #generate radvd config RAP=/etc/ppp/ipv6-radvd/$PPP_IFACE RA=$RAP.conf cat <$RA interface $PPP_IFACE{ AdvManagedFlag off; AdvOtherConfigFlag on; AdvSendAdvert on; MinRtrAdvInterval 5; MaxRtrAdvInterval 100; UnicastOnly on; AdvSourceLLAddress on; prefix 【(你分配到的IP6地址,可以在详情界面的 Routed IPv6 Prefix找到)】 {}; }; EOF #start radvd /usr/sbin/radvd -C $RA -p $RAP.pid #start tchdpd /usr/sbin/tdhcpd --dns-server=2001:470:20::2 --dns-name=$PPP_IFACE.tunnel.ipv6.itncre.com --pid-file=$RAP.dhcp.pid --local-id=tunnel.ipv6.itncre.com -L debug $PPP_IFACE exit 0 创建文件:/etc/ppp/ipv6-down.d/radvd #!/bin/sh RAP=/etc/ppp/ipv6-radvd/$PPP_IFACE kill `cat $RAP.pid` || true kill `cat $RAP.dhcp.pid` || true rm -f $RAP.* ADDR=$(echo $PPP_REMOTE | cut -d : -f 3,4,5,6) ADDR=(你分配到的IP6地址,可以在详情界面的 Routed IPv6 Prefix找到,去掉::/64):$ADDR ARPA=$(ipv6_rev $ADDR) nsupdate << EOF update delete $ARPA send update delete $PPP_IFACE.tunnel.ipv6.itncre.com send EOF exit 0 给两个文件夹上执行权限,注意替换 这时候应该就是OK的了