在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的了