通过 Debian pptpd 将 IPv6 流量路由到 Hurricane Electric 的 IPv6 隧道

通过 Debian pptpd 将 IPv6 流量路由到 Hurricane Electric 的 IPv6 隧道

我在 Debian 机器上使用 Hurricane Electric 的服务设置了一条隧道。它似乎运行正常;我可以ping6 ipv6.google.com在 中打开它links

我还在机器上设置了一个 PPTP 守护程序。(是的,我了解到 PPTP 不安全;这主要用于实验目的。)当我使用 Mac OS X 连接到此 PPTP 守护程序时,IPv4 工作正常。

但是,我似乎无法使 IPv6 流量路由正常工作。OS X 不会通过 PPTP 拾取 IPv6 地址,并且它会忽略使用 的公告radvd,这似乎是用于宣布 IPv6 路由器存在的守护进程。澄清一下:我看到 发送的路由器公告radvd出现在 OS X 计算机的 ppp0 接口上的 Wireshark 中。

总的来说,这不是一个生产环境,也不是一个长期的设置,只是我想开始工作的东西(否则我可能会在 ServerFault 上发帖)。所以我不在乎如果机器重新启动,一半的设置会随之失败,直到手动重置。事实上,在这种情况下,这对我来说是一个加分项。

/etc/network/interfaces(片段)

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
        address 2001:dead:beef:f00d::2
        netmask 64
        endpoint  216.66.86.114
        ttl 255
        gateway 2001:dead:beef:f00d::1

/etc/pptpd.conf

option /etc/ppp/pptpd-options
localip 10.0.101.1
remoteip 10.0.101.2-200

/etc/ppp/pptpd 选项

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
nodefaultroute
lock
nobsdcomp
ipv6 ,

/etc/ppp/chap-秘密

ivucica pptpd THEPASSWORDHERE 10.0.101.2 10.0.101.3 10.0.101.4 10.0.101.5

/etc/radvd.conf

interface ppp0
{
        AdvSendAdvert on;
        prefix 2001:dead:beef:f00d::/64
        {
        };
};

我开启了ipv6转发:

echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

是的,radvd每当我重新连接/重新创建 ppp0 设备时,我都会重新启动。:-)

我错过了什么?

答案1

事实证明我的设置存在一些问题。让我们记录下一切!

客户端操作系统

Mac OS X 并不特别喜欢 PPP 上的 IPv6。建立连接后,请使用以下命令:

sudo ipconfig set ppp0 AUTOMATIC-V6
sudo route add -inet6 default -interface ppp0

route前者似乎使 OS X 遵守路由器广告;后者为 IPv6 添加了默认路由。(现在,如果只提供特定水果移动操作系统版本的-inet6,我会成为一个快乐的木头男孩。)

还请注意,OS X 将忽略任何应通过 IPv6 协商的地址,并仅设置本地地址。这可能会干扰到 OS X 的路由。

另一方面,Windows 8(在所有系统中!)很高兴地接收了通过 PPP 发送的地址,注意到了路由器广告,并且总体上完美地配置了自身。PPTP 在 Windows 中确实运行良好。

服务器

我首先忽略的是 Hurricane Electric 的隧道代理实际上分配了两个 /64 前缀;一个仅供客户端使用,而另一个用于路由其他客户端(例如 PPTP 客户端)。如果您需要更多地址(或前缀!),您甚至可以获得 /48 前缀。(对于 IPv6,这意味着有更多位可供“您”使用;HE 的前缀“仅”占用 48 位。因此,在自动生成的后缀(从 MAC 地址创建或随机创建)启动并接管最后 64 位之前,这为您提供了更多位来控制。理论上,即使只有 64 位可用,您也可以摆动和划分子网,但我在 Windows 8 或 OS X 上看到了奇怪的行为,所以我不会太依赖它。)

不要radvd直接配置并将其作为服务器运行——只需不要对其进行全局配置即可。也就是说,不要在 Debian 上将其作为服务运行。

相反,让我们遵循康拉德·罗森鲍姆的例子,在Silmor.de,并在创建PPP接口radvd后进行配置。pppd

  1. 设置 IPv6 连接。我使用 Hurricane Electric;我已将其配置如下:

    # hurricane electric tunnel
    # based on: http://www.tunnelbroker.net/forums/index.php?topic=1642.0
    auto he-ipv6
    iface he-ipv6 inet6 v4tunnel
        address 2001:470:UUUU:VVVV::2
        netmask 64
        endpoint  216.66.86.114
        ttl 255
        gateway 2001:470:UUUU:VVVV::1
        ## from http://lightyearsoftware.com/2011/02/configure-debian-as-an-ipv6-router/
        # I did not set up the routing of the /64 nor the /48 prefix here, but
        # this would ordinarily do it.  
        #up ip link set mtu 1280 dev he-ipv6
        #up route -6 add 2001:470:WWWW:VVVV::/64 he-ipv6
    
        # Note that Hurricane Electric provides different /64 IPv6 prefixes
        # for the client (UUUU:VVVV) and routing (WWWW:VVVV). 
        # And the /48 prefix is very different altogether.
    
  2. 安装 pptpd。(当然,请注意 PPTP 协议的不安全性,并考虑使用 OpenVPN 或其他替代方案。)

  3. 编辑/etc/ppp/pptpd-options

    name pptpd
    refuse-pap
    refuse-chap
    refuse-mschap
    require-mschap-v2
    require-mppe-128
    proxyarp
    nodefaultroute
    lock
    nobsdcomp
    ipv6 ::1,::2
    

    请注意,最后一行与我的问题中的文本不同。您正在分配一些静态地址,您的客户端操作系统可能会尊重这些地址,也可能不会。(OS X 似乎忽略了它们,但 Windows 会使用它们。)

  4. 为 PPTP 创建用户。第二列根据name中的参数进行过滤pptpd-options。编辑/etc/ppp/chap-secrets

    ivucica pptpd AHyperSecretPasswordInPlainText 10.0.101.2 10.0.101.3 10.0.101.4
    

    您应该能够用 替换地址,*而不必手动列出它们。我没有尝试过。

  5. 为您的 PPTP 用户分配一些 IPv6 前缀。注意:这仅供我将在下面列出的脚本使用,该脚本源自 Konrad 的脚本。

    编辑/etc/ppp/ipv6-addr

    ivucica:1234
    littlejohnny:1235
    
  6. 添加新文件/etc/ppp/ipv6-up.d/setupradvd

    #!/bin/bash
    ADDR=$(grep ^$PEERNAME: /etc/ppp/ipv6-addr |cut -f 2 -d :)
    if test x$ADDR == x ; then
     echo "No IPv6 address found for user $PEERNAME"
     exit 0
    fi
    
    # We'll assign the user a /64 prefix.
    # I'm using a Hurricane Electric-assigned /48 prefix.
    
    # Operating systems seem to expect to be able to assign the 
    # last 64 bits of the address (based on ethernet MAC address
    # or some other identifier). So try to obtain a /48 prefix.
    
    # If you only have a /64 bit prefix, you can try to assign a
    # /80 prefix to your remote users. It works, but I'm only now
    # trying to enable these users to have routing.
    
    USERPREFIX=2001:470:XXXX:$ADDR
    USERPREFIXSIZE=64
    USERPREFIXOURADDRESS=1
    USERPREFIXUSERADDRESS=2
    
    # Add the address for your side of the tunnel to the PPP device.
    ifconfig $IFNAME add $USERPREFIX::$USERPREFIXOURADDRESS/$USERPREFIXSIZE
    
    # establish new route
    # (when a packet is directed toward user subnet, send it to user ip)
    route -6 add $USERPREFIX::/$USERPREFIXSIZE gw $USERPREFIX::$USERPREFIXUSERADDRESS
    
    #generate radvd config
    RAP=/etc/ppp/ipv6-radvd/$IFNAME
    RA=$RAP.conf
    echo interface $IFNAME >$RA
    echo '{ AdvSendAdvert on; MinRtrAdvInterval 5; MaxRtrAdvInterval 100;' >>$RA
    echo ' prefix' $USERPREFIX::/$USERPREFIXSIZE '{};' >>$RA
    
    # Instead of your DNS...
    #echo ' RDNSS $USERPREFIX::$USERPREFIXOURADDRESS {}; };' >>$RA
    # ...try assigning the Google DNS :)
    echo ' RDNSS 2001:4860:4860::8888 {}; }; ' >> $RA
    
    # The creation of radvd configuration could be more readable, but whatever.
    
    # Start radvd
    /usr/sbin/radvd -C $RA -p $RAP.pid
    
    exit 0
    

    不要忘记通过 chmod 使脚本可执行pppd

    chmod 755 /etc/ppp/ipv6-up.d/setupradvd
    
  7. 脚本将radvd配置喷入/etc/ppp/ipv6-radvd/...确保文件夹存在!

    mkdir /etc/ppp/ipv6-radvd
    
  8. 还添加/etc/ppp/ipv6-down.d/setupradvd(并使其可执行!)——逐字逐句来自 Konrad

    #!/bin/bash
    RAP=/etc/ppp/ipv6-radvd/$IFNAME
    kill `cat $RAP.pid` || true
    rm -f $RAP.*
    

    chmod 755 /etc/ppp/ipv6-down.d/setupradvd
    

我还没有测试过使用 DHCPv6 来分发路由信息、地址或 DNS 信息,尤其是因为rtadv 应该履行这些职责。这也对我没什么帮助,因为从 Mountain Lion 开始,OS X 仍然没有配备 DHCPv6 客户端(也许是故意的;十个牙医中有九个,大多数 IPv6 专家都认为 DHCP 是邪恶的)。

再次请注意Michael 对 PPTP 安全性的评论;考虑在生产中使用 OpenVPN。

是的,康拉德·罗森鲍姆也有一个有关 OpenVPN 上的 IPv6 的精彩教程。 :-)

答案2

Poptop 似乎不支持 IPv6。而且出于安全原因,其维护者建议你不要使用它

PPTP 是一种众所周知的有缺陷的协议。该协议的设计者 Microsoft 建议不要使用它,因为它存在固有风险。很多人还是会使用 PPTP,因为它易于使用,但这并不意味着它的危险性就小了。PPTP Client 和 Poptop 的维护者建议改用 OpenVPN(基于 SSL)或 IPSec。

OpenVPN 的最新版本支持 IPv6,因此这可能是您过渡期间最好的选择。

相关内容