Gor*_*tch 5 freebsd routing ipv6
我有以下情况:我将 FreeBSD 9.1 机器配置为gif0
接口上的心跳 SixXS 隧道的端点。到目前为止它有效,我可以通过 IPv6 ping6。
我lagg0
从连接到 LAN 的分配的 IPv6 子网中将静态 IPv6分配给另一个接口,该接口是聚合接口。现在我想使用rtadvd
守护进程将此网络前缀通告给我的 LAN 。
这是它的/etc/rtadvd.conf
文件:
lagg0:\
:addr="xxxx:yyyy:zzzz:aaaa::":prefixlen#64:tc=ether:
Run Code Online (Sandbox Code Playgroud)
与xxxx:yyyy:zzzz:aaaa::/64
作为网络前缀。当我现在将客户端添加到网络时,它们会使用网络前缀并生成它们的 autoconf 和临时地址。这很好用。
然而,他们缺少的是正确的 IPv6 默认路由。在路由表中,IPv6 的默认路由是fe80::
路由器的链路本地地址。
现在没有数据包被路由到互联网。如果我手动将默认路由添加到主机,它就可以工作。
我的问题
我认为路由器广告应该在客户端上配置正确的默认路由。我在这里错过了什么吗?为什么它会宣传其本地链接地址而不是正确的地址?
链接本地地址应该可以正常工作,并且确实是rtadvd
.
我使用的是 6to4,但它的配置基本相同。就我而言,我所做的就是:
ifconfig stf0 create
ifconfig stf0 inet6 2002:c0a8:1:ffff::1/16
ifconfig lan0 inet6 2002:c0a8:1::1/64
Run Code Online (Sandbox Code Playgroud)
这只是创建连接,您的隧道应该具有相同的目的。
route add -inet6 default 2002:c058:6301::
Run Code Online (Sandbox Code Playgroud)
此时ping6 ipv6.google.com
可以通过我的路由器工作。
sysctl net.inet6.ip6.forwarding=1
Run Code Online (Sandbox Code Playgroud)
现在,如果我手动将客户端配置为在 DG IPv6 工作时使用路由器,即使使用链路本地地址,也会启用路由。但我们想要某种程度的自动配置......所以/etc/rtadvd.conf
包含:
lan0:\
:addr="2002:c0a8:1::":prefixlen=64:tc=ether:
Run Code Online (Sandbox Code Playgroud)
剩下的唯一一件事就是将配置添加到我的rc.conf
文件中:
ipv6_gateway_enable="YES" # Route IPv6 Traffic
rtadvd_enable="YES" # IPv6 Router Advertisement Daemon
rtadvd_interfaces="lan0"
cloned_interfaces="stf0"
ifconfig_stf0_ipv6="inet6 2002:c0a8:1:ffff::1/16"
ipv6_defaultrouter="2002:c058:6301::" # 6to4 Default Router
Run Code Online (Sandbox Code Playgroud)
客户端确实有 fec0:: 范围的默认路由,但它工作得很好。Atcpdump
显示客户端从其全局 IPv6 地址发送到 fec0 地址。
对于任何想要执行 6to4 操作的阅读本文的人,上述“内部”地址适用于 192.168.0.1,该地址无法在 Internet 上路由。您需要根据您的外部 IPv4 地址计算您自己的内部 IPv6 地址。