Linux 服务器未通过 PPP 链路接收默认 IPv6 路由

Linux 服务器未通过 PPP 链路接收默认 IPv6 路由

我正在用运行 Debian 的小型 Linux 设备替换远程办公室中的 pfSense 路由器。路由器只需处理非常基本的 iptables / DHCP 和 VPN 功能。它配置为上游提供商是 PPPoE 连接,通过该连接提供静态 IPv4 和 IPv6 地址(以及 IPv6 前缀)。

radvd我使用、wide-dhcpv6-client和ppp的组合wide-dhcpv6-server来配置寻址。几乎所有功能都正常,除了路由器在 启动时没有收到默认 IPv6 路由ppp0。客户端可以 ping 路由器,但路由器无法 ping 外部世界。

我已经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),并且上的 IPv6 地址eth0已设置为正确的地址(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接口启动时,路由应该会自动配置,连同前缀、DNS 服务器和其他所有内容。

IPv6 路由在 pfSense (2.1) 上运行,因此我认为上游没有做任何奇怪的事情。每次ppp0启动时我是否都需要手动添加此路由,还是应该自动运行?

编辑我启用了调试模式dhcp6c,当界面出现时输出的内容如下:http://pastebin.com/dUDPm2D1

答案1

我有一个 debian Linux 机器,它做着几乎同样的事情(我不使用 dhcpv6 服务器,而是使用 dibbler 作为 ppp 接口的 ipv6 dhcp 客户端),在我的 PPP 配置中,我有:

defaultroute
replacedefaultroute
+ipv6
ipv6cp-accept-local

如果你添加:

debug

进入 ppp 配置,您将获得 ipv6 协商的详细信息。我怀疑您错过了defaultroute选项

答案2

...net.ipv6.conf.ppp0.accept_ra = 2

为了确保每次 ppp 设备启动时内核配置参数都确实被设置,请尝试使用 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/并重新建立 ppp 连接。在某些情况下,accept_ra一旦 ppp 设备在断开连接时消失,我的配置值就会被重置为默认值(如果它们不同)。当它再次重新连接时,我也会因为在 中设置了错误的值而丢失我的默认路由accept_ra

答案3

您能否在 ppp 协商期间使用 tcpdump 捕获接口 ppp 跟踪,以便查看 RAS 是否提供 ipv6 地址?我从事为运行嵌入式 Linux 的路由器开发软件的工作,诊断 ppp 协商问题的最简单方法是在此阶段捕获 pppoe 数据包(PADI、PADO、PADR、PADS、PADT)。

相关内容