我正在用一台运行Debian的小型Linux设备replace远程办公室的pfSense路由器。 路由器只需要处理非常基本的iptables / DHCP和VPN设施。 它被configuration为使得上游提供商是PPPoE连接,向下提供静态的IPv4和IPv6地址(和IPv6前缀)。
我正在使用radvd , wide-dhcpv6-client , wide-dhcpv6-server和ppp的组合来configuration寻址。 除了路由器在ppp0出现时没有收到默认的IPv6路由之外,几乎所有的工作都是有效的。 客户端可以ping通路由器,但路由器不能ping通外部世界。
我这样configuration了wide-dhcpv6-client ( eth0是本地LAN适配器):
profile default { request domain-name-servers; request domain-name; script "/etc/wide-dhcpv6/dhcp6c-script"; }; interface ppp0 { send ia-pd 0; send rapid-commit; }; id-assoc pd 0 { prefix-interface eth0 { sla-len 0; sla-id 1; ifid 1; }; };
上游提供的DNS服务器在resolv.conf (包括IPv4和IPv6)中正确填充,并且eth0上的IPv6地址被设置为正确的地址( 2001:111:1111::1 ),并且radvd通告正确的前缀。 但是, ip -6 show route没有列出任何网关:
2001:111:1111::/48 dev eth0 proto kernel metric 256 fe80::/64 dev eth1 proto kernel metric 256 fe80::/64 dev ppp0 proto kernel metric 256 fe80::/64 dev eth0 proto kernel metric 256 fe80::/10 dev ppp0 metric 1 fe80::/10 dev ppp0 proto kernel metric 256
我也得到了以下设置:
net.ipv6.conf.ppp0.forwarding = 2 net.ipv6.conf.ppp0.accept_ra = 2
如果我简单地做ip -6 route add 0::/0 dev ppp0 ,IPv6路由神奇地开始工作。 然而,我的期望是,当ppp0接口出现时,路由应该自动configuration,以及前缀,DNS服务器和其他一切。
IPv6路由在pfSense(2.1)上工作,所以我不认为它在上游做任何有趣的事情。 每次ppp0出现时,是否需要手动添加此路由,还是应该自动工作?
编辑我启用dhcp6cdebugging模式,这是什么得到输出时,界面出现: http : dhcp6c
我有一个debian Linux机器做几乎相同的事情(我不使用dhcpv6服务器,我使用的是ppp接口的ipv6 dhcp客户端的dibbler),在我的PPPconfiguration我有:
defaultroute replacedefaultroute +ipv6 ipv6cp-accept-local
如果你添加:
debug
到pppconfiguration你会得到ipv6协商的细节。 我怀疑你错过了defaultroute选项
… net.ipv6.conf.ppp0.accept_ra = 2
为了确保在每次ppp设备启动时真正设置内核configuration参数,请尝试使用udev规则:
KERNEL=="ppp0", SUBSYSTEM=="net", ACTION=="add", RUN+="/bin/bash -c 'echo 2 >/proc/sys/net/ipv6/conf/ppp0/accept_ra; echo 2 >/proc/sys/net/ipv6/conf/ppp0/forwarding;'"
把它放在/etc/udev/rules.d/中的某个地方,然后重新build立ppp连接。 在某些情况下,一旦ppp设备在断开连接时消失,我configuration的accept_ra值已被重置为默认值(如果不同)。 当它重新连接时,我也错过了我的默认路由,因为在accept_ra设置了错误的值。
你可以在ppp协商期间使用tcpdump捕获接口ppp跟踪,这样你就可以看到是否RAS提供了ipv6地址? 我正在开发用于运行embedded式Linux的路由器的sw,诊断ppp协商问题的最简单方法是在此阶段(PADI,PADO,PADR,PADS,PADT)捕获pppoe数据包。