[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...

[草泥马语]草泥马语发布新版Erlang based虚拟机

欢迎参观->http://code.google.com/p/grass-mud-horse/

PS:图片来源于互联网,请版权所有者与我联系

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

省省吧,继续抱着FF娘睡觉

很长一段时间以来,Chrome在我的机器上只能沦为二线浏览器,不是因为Chrome不好用,而是因为FF娘太好用了。不过最近FF娘在我的机器上跑的越来越吃力了,页面载入速度也慢的不得了。于是终于决定更换Chrome,不看不知道原来Chrome已经发展了这么多的插件,FF上有名的插件几乎都可以在Chrome找到移植版这种事情真是太没想到了……
于是:


不过……

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

[IPv6]熊熊的IPv6部署实战.Part1 6in4隧道&&PPTP隧道

这几天一直在鼓捣IPv6的东西,利用HE.net提供的TunnelBroker服务在学校的网络上部署了一个小型的IPv6网络。这篇文章就是这几天的工作的一些总结。由于涉及到的东西很多很杂,所以会分成几个部分来写。今天先写出第一部分:如何在Linux(Ubuntu)下连接远程PPTP服务器然后再在PPTP隧道的基础上建立6in4连接。

如何去he.net申请Tunnel我就不说了,都会。申请到的Tunnel会有如下参数:

Server IPv4 address:  	72.52.104.74
Server IPv6 address: 	2001:470:1f04:cab::1/64
Client IPv4 address: 	184.104.13.193
Client IPv6 address: 	2001:470:1f04:cab::2/64
Routed /48:  	2001:470:8192::/48
Routed /64: 	2001:470:1f05:cab::/64

另外,如果服务器支持PPTP,还会给出相应的参数:

Server IPv4 Hostname:  tserv3.fmt2.ipv6.he.net
Client IPv4 Address: 	184.104.13.193
VPN (PPTP) Username: 	bearice%63106

由于服务器是通过NAT出外网的,所以需要首先配置PPTP拨号:

pptpsetup --create IPv6VPN \
              --server tserv3.fmt2.ipv6.he.net  \
              --username bearice%63106 \
              --password ***

这样会在/etc/ppp/peers/下建立一个IPv6VPN的文件,以后我们可以使用pon IPv6VPN就可以与服务器建立连接了,不过这还不够,我们需要配置开机自动连接和短线重连,另外还需要在隧道连接后添加一些路由表让6in4使用。
修改IPv6VPN,现在应该是这个样子:

persist
maxfail 0
pty "pptp tserv3.fmt2.ipv6.he.net --nolaunchpppd"
lock
noauth
nobsdcomp
nodeflate
name bearice%63106
remotename IPv6VPN
ipparam IPv6VPN
updetach 

在文件的开头我添加了“persist”和“maxfail 0” 使ppp进程在链接终端以后自动重连。
然后修改/etc/network/interfaces 添加如下内容:

auto he-vpn
iface he-vpn inet ppp
        provider IPv6VPN

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
        endpoint 72.52.104.74
        local      184.104.13.193
        address  2001:470:1f04:cab::2
        netmask 64
        up         ip -6 route add default dev he-ipv6
        down     ip -6 route del default dev he-ipv6
        mtu       1420
        ttl         255

使隧道可以开机后自动连接。
但是现在6in4隧道还不能正常使用。如果你进行嗅探的话会发现所有出站的IPv6数据包没有使用PPTP隧道进行封装而是直接向网关发出。
这里困扰了我很久,最后在he.net的论坛里找到了答案:

使用PPTP隧道会在路由表内添加一条指向服务器的路由,由于这条路由的存在使我们的流量通过PPTP隧道传出,要解决这个问题需要添加一条策略路由:如果IP源地址等于我们的PPTP隧道地址则使用一个特殊的路由表进行路由。

实际上的操作如下:
首先执行

echo "1 pptp" >> /etc/iproute2/rt_tables

向系统添加一个路由表。
然后在/etc/ppp/ip-up.d下建立一个vpn_route文件(名字无所谓) chmod +x这个文件然后添加下面的内容:

#!/bin/sh -e
ip route add default dev $PPP_IFACE table pptp
ip rule add from $PPP_LOCAL table pptp
exit 0

使得PPP可以在连接建立以后自动的添加这条策略路由。为了严谨,我们在PPP链接断开后删除路由:/etc/ppp/ip-down.d/vpn_route

#!/bin/sh -e
ip route del default dev $PPP_IFACE table pptp
ip rule del from $PPP_LOCAL table pptp
exit 0

现在,你就可以使用ifup he-vpn建立PPTP隧道,使用ping6 2001:470:1f04:cab::1测试6in4隧道连接。
今天就到这,下一次的内容是如何在内部网络建立IPv6路由结构,OSPFv3、quagga的配置。

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

[blog]搬家完毕

今年换了新的合租服务器,感谢欧叔的技术支持。

目前看来这个服务器要比Godaddy的速度要快一些,但是稳定性还有待考据。

昨晚搬家时遇到不少问题,比如这个PHP环境要求文件不能带有UTF8的BOM头,否则就乱码。还有内存限制等等乱七八糟的问题,不过好在都顺利解决了。

嗯,就是这样。这个月会很忙所以估计不会有什么更新了。

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