我在 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
设置 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.
安装 pptpd。(当然,请注意 PPTP 协议的不安全性,并考虑使用 OpenVPN 或其他替代方案。)
编辑
/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 会使用它们。)
为 PPTP 创建用户。第二列根据
name
中的参数进行过滤pptpd-options
。编辑/etc/ppp/chap-secrets
:ivucica pptpd AHyperSecretPasswordInPlainText 10.0.101.2 10.0.101.3 10.0.101.4
您应该能够用 替换地址,
*
而不必手动列出它们。我没有尝试过。为您的 PPTP 用户分配一些 IPv6 前缀。注意:这仅供我将在下面列出的脚本使用,该脚本源自 Konrad 的脚本。
编辑
/etc/ppp/ipv6-addr
:ivucica:1234 littlejohnny:1235
添加新文件
/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
脚本将
radvd
配置喷入/etc/ppp/ipv6-radvd/
...确保文件夹存在!mkdir /etc/ppp/ipv6-radvd
还添加
/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,因此这可能是您过渡期间最好的选择。