[IPv6]如何搭建一个支持IPv6的PPTP VPN

自从上次成功的搞定Linux下的IPv6隧道以后,我一直在想还能怎么玩这个/48的路由。前几天某人需要一个国内的VPN,于是在搭建VPN的时候研究了一下如何在VPN上分配IPv6地址。现在吧过程记录如下:

  1. 安装一个普通的PPTP VPN,不会的自己去Google,其实不只是PPTP,L2TP或者其他基于pppd的隧道都可以使用下面的方法支持IPv6
  2. 编辑相应的pppd options文件,比如pptpd的是 /etc/ppp/pptp-options,添加下面的选项:

    ipparam pptpd
    ipv6 ,

    注意ipv6后面是空格和逗号

  3. 安装radvd,从 http://silmor.de/69 下载tdhcpd
  4. 新建文件夹/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服务器就可以去掉,不影响。

  5. 然后是/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
  6. 现在就可以使用P支持IPv6的PTP客户端(比如Windows Vista以上)获取IPv6地址了,另外需要注意的是如果有内网的话记着添加相应的路由记录,比如我使用OSPFv3路由重分发

参考资料:http://silmor.de/66

>_<|| 我手贱!!这个有问题!绝对有问题!!一般般啦,真的很一般般。还不错哦~小表扬一下!GJ!乃就是新世界的神様了,快去拯救世界吧! (2 votes, average: 2.50 out of 5)
Loading...

9 人次吐槽

  1. liang3404814说道:
    骑着 Google Chrome 5.0.375.125 Google Chrome 5.0.375.125 和 Windows 7 Windows 7
    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呢

  2. 感谢陈冠希说道:
    骑着 Firefox 3.6.8 Firefox 3.6.8 和 Windows XP Windows XP
    Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8

    这位英雄,你杯具了。你这个blog被墙了。我要翻墙才能上来。

    1. davelv说道:
      骑着 Firefox 3.5.11 Firefox 3.5.11 和 Fedora 12 Fedora 12
      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

      应该是你杯具了。

  3. soff说道:
    骑着 Google Chrome 7.0.536.2 Google Chrome 7.0.536.2 和 Windows 7 Windows 7
    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,怎么弄?

    1. bearice说道:
      骑着 Google Chrome 6.0.472.63 Google Chrome 6.0.472.63 和 Windows 7 Windows 7
      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

      1. soff说道:
        骑着 Google Chrome 7.0.536.2 Google Chrome 7.0.536.2 和 Windows 7 Windows 7
        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

        1. Bearice说道:
          骑着 Google Chrome 6.0.472.63 Google Chrome 6.0.472.63 和 Windows 7 Windows 7
          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抓包分析一下

  4. Jason说道:
    骑着 Safari 6.0 Safari 6.0 和 iPad iOS 6.1 iPad iOS 6.1
    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 …可以恢复正常。每次都这样,不知道为什么。

    1. Магсн说道:
      骑着 Maxthon 4.4.2.300 Maxthon 4.4.2.300 和 Windows 7 x64 Edition Windows 7 x64 Edition
      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

      我也有这个情况
      求解决

春菜 对话 相声
双击调戏
双击调戏