我配置了一个简单的路由器,它应该为其后面的 LAN 上的机器提供 IPv6 连接。路由器有 2 个网络接口 (eth0、eth1),机器有 1 个 (eth0)。
路由器的 eth0 只能访问本地网络,eth1 可以访问互联网。我配置了所有内核参数,一切正常。
路由器的IP是fd00::1
,我在路由器上安装了dhcpd并配置了范围fd00::100 - fd00::fffe
。
例如,当我启动该网络上的某台机器时,它会从 dhcpd 获得分配的 IP,fd00::fffa
但由于显而易见的原因(缺少路由),无法访问互联网。
当我手动添加路线时,sudo route -6 add 2000::/3 gw fd00::1
机器开始访问互联网,直到我重新启动它。
我可以手动将此路由添加到每台机器的初始化脚本中,但我更希望它自动配置,以便当我在此网络上启动一台机器时,它无需任何其他操作即可访问 IPv6 互联网。
根据一些建议,我在路由器上安装了 radvd 并插入了此选项:
route 2000::/3 {};
这很可能是错误的,但我找不到任何文档或示例。它不起作用。使用 radvd 而不是 dhcpd 来分配 IPv6 地址根本不起作用,如果我禁用 dhcpd,机器会自动配置一些随机 IPv6 地址,甚至看不到对方,它们也无法 ping 路由器。
如何设置我的 LAN 以便为其上的所有机器自动配置 IPv6?
注意:我不需要也不希望每台机器都有公共 IPv6,NAT 就足够了。
答案1
我立即发现您的配置有两个问题。RFC 4193 地址不是全局可路由的。这意味着这些地址将无法与外界通信。
当然,您可以使用 NAT,但众所周知,NAT 会导致许多问题。NAT 是一种临时解决 IP 地址短缺问题的变通方法。IPv6 解决了这个问题。人们尝试使用 NAT 解决的所有其他问题都有更好的解决方案,而且不涉及 NAT。
此外,您的前缀显然不是按照 RFC 4193 中的规范生成的。相关引用:
本地分配的全局 ID 必须使用伪随机算法生成
只有通过测试才能知道网络配置中的这两个问题是否会阻止客户端进行外部通信。有些软件会尝试检测次优的 IPv6 配置,如果检测到,则完全避免使用 IPv6。某些客户端软件可能会拒绝使用您设置中的 IPv6 连接。
也就是说,让客户端使用 RFC 4193 地址进行外部通信并非不可能。这是一个radvd.conf
文件,我过去曾短暂使用过。使用此配置,一些客户端确实尝试使用其分配的 RFC 4193 地址进行外部通信。
interface wlan0 {
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
prefix fdbd:5df9:dca3::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
但是,此配置并不适用于所有客户端。我再次使用运行 Android 的客户端进行了测试。手机确实配置了 IPv6 地址,但它没有尝试使用 IPv6 进行外部通信。
然后我将前缀改为2001:db8:dca3::/64
,此时手机确实开始向网关发送 IPv6 数据包。因此,Android 是一个拒绝以这种方式使用 RFC 4193 地址的平台示例。