我正在用运行 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)。