自从上次成功的搞定Linux下的IPv6隧道以后,我一直在想还能怎么玩这个/48的路由。前几天某人需要一个国内的VPN,于是在搭建VPN的时候研究了一下如何在VPN上分配IPv6地址。现在吧过程记录如下:
- 安装一个普通的PPTP VPN,不会的自己去Google,其实不只是PPTP,L2TP或者其他基于pppd的隧道都可以使用下面的方法支持IPv6
- 编辑相应的pppd options文件,比如pptpd的是 /etc/ppp/pptp-options,添加下面的选项:
ipparam pptpd
ipv6 ,注意ipv6后面是空格和逗号
- 安装radvd,从 http://silmor.de/69 下载tdhcpd
- 新建文件夹/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=2001:470:8192:BEEF:$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 <<EOF >$RA interface $PPP_IFACE{ AdvManagedFlag off; AdvOtherConfigFlag on; AdvSendAdvert on; MinRtrAdvInterval 5; MaxRtrAdvInterval 100; UnicastOnly on; AdvSourceLLAddress on; prefix 2001:470:8192:BEEF::/64 {}; }; 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.icybear.net \ --pid-file=$RAP.dhcp.pid \ --local-id=tunnel.ipv6.icybear.net -L debug\ $PPP_IFACE #update dns ARPA=$(ipv6_rev $ADDR) nsupdate << EOF update delete $ARPA update add $ARPA 10 ptr $PPP_IFACE.tunnel.ipv6.icybear.net send update delete $PPP_IFACE.tunnel.ipv6.icybear.net update add $PPP_IFACE.tunnel.ipv6.icybear.net 10 aaaa $ADDR send EOF exit 0
在注意吧里面的2001:470:8192:BEEF 改成你自己要分配的/64地址,但是注意一定要/64的,我试过更小的地址段都不成功,可能是客户端做自动分配地址时是需要使用EUI-64的原因吧。
另外最后的nsupdate那段如果不需要修改dns记录或者根本就没有DNS服务器就可以去掉,不影响。 - 然后是/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=2001:470:8192:BEEF:$ADDR ARPA=$(ipv6_rev $ADDR) nsupdate << EOF update delete $ARPA send update delete $PPP_IFACE.tunnel.ipv6.icybear.net send EOF exit 0
- 现在就可以使用P支持IPv6的PTP客户端(比如Windows Vista以上)获取IPv6地址了,另外需要注意的是如果有内网的话记着添加相应的路由记录,比如我使用OSPFv3路由重分发
参考资料:http://silmor.de/66
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.125 Safari/533.4
恩.那个某人现在回来了,感谢你对于宣传XXXX做出的贡献.
还有当时我用的是XP,所以没体验到IPV6呢
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
这位英雄,你杯具了。你这个blog被墙了。我要翻墙才能上来。
Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.11) Gecko/20100723 Fedora/3.5.11-1.fc12 Firefox/3.5.11
应该是你杯具了。
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/7.0.536.2 Safari/534.10
我照着这个做了以后,Windows 7 拨 VPN 之后,可以 ping 通服务器的 ipv6,但是 ping ipv6.google.com 就不同了,用 tracert -6 发现,到了服务器了,但是出不去。ip6tables 又不支持 NAT,怎么弄?
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3
你打开ipv6转发了么?
echo 1 >> /proc/sys/net/ipv6/conf/all/forwarding
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/7.0.536.2 Safari/534.10
打开了,不打开的话,radvd 都启动不了的。
# route -6
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
2607:f2e0:f:238:e0e3:8456:eefa:893e/128 :: UH 1 0 0 ppp0
2607:f2e0:f:238::/64 :: U 256 0 1 eth0
Windows 7 分到的 IP 2607:f2e0:f:238:e0e3:8456:eefa:893e
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3
没见到默认路由啊
如果只是没列出来的话建议使用tcpdump或者wireshark抓包分析一下
Mozilla/5.0 (iPad; CPU OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B141 Safari/8536.25
刚连接时一切正常,5分11秒后出现ipv6网关丢失现象。手动修复route add ::1/0 …可以恢复正常。每次都这样,不知道为什么。
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.2.300 Chrome/30.0.1599.101 Safari/537.36
我也有这个情况
求解决