![如果 radvd 在同一主机上运行,Linux 路由器可以自动配置 IPv6 吗?](https://linux22.com/image/532868/%E5%A6%82%E6%9E%9C%20radvd%20%E5%9C%A8%E5%90%8C%E4%B8%80%E4%B8%BB%E6%9C%BA%E4%B8%8A%E8%BF%90%E8%A1%8C%EF%BC%8C%E2%80%8B%E2%80%8BLinux%20%E8%B7%AF%E7%94%B1%E5%99%A8%E5%8F%AF%E4%BB%A5%E8%87%AA%E5%8A%A8%E9%85%8D%E7%BD%AE%20IPv6%20%E5%90%97%EF%BC%9F.png)
我有一个运行 6to4 隧道的 Linux 网关路由器,并使用 radvd 在本地子网上广播 IPv6 前缀。可以将 Radvd 配置为自动从 6to4 接口获取网络前缀,但我找不到自动为本地网络接口 (eth0) 分配有效地址的方法。
例如,如果我的 6to4 接口自动配置为2002:4185:9dd4::1/16
,则 eth0 需要一个地址2002:4185:9dd4:dead:<whatever>/64
(其中“dead”是我在 radvd.conf 中配置的本地子网)。当 radvd 在本地计算机上运行时,是否有任何方法可以强制 linux 自动配置 eth0?
答案1
简短的回答:在您正在运行radvd
的系统上,您需要使用与配置相同的方法来配置接口radvd
;如果radvd.conf
是静态生成的,那么您的本地以太网接口的 IPv6 地址也应该静态生成。但是,一切都没有丢失;请继续阅读以了解更多详细信息。
你可以使用一个小的 shell 脚本来配置两者。假设你有一个动态分配的全局 IPv4 地址,和这是您的接口上唯一的 IPv4 地址;您可以使用以下 shell 脚本片段获取 IPv6 /48 前缀(注意:代码改编自艾林:
IPV4=$(ip addr ls eth0 | grep 'inet ' | awk '{ print $2 }' | cut -f1 -d/)
PARTS=`echo $IPV4 | tr . ' '`
PREFIX48=`printf "2002:%02x%02x:%02x%02x" $PARTS`
现在,您有了 /48 前缀;获取 /64 前缀非常简单,因为您只需将其附加到变量即可$PREFIX48
。
现在,您要做的就是编写脚本来写出网络接口配置和 radvd 配置(可能来自每个配置的模板),并让该脚本在您的网络配置运行之前运行。我不会在这里包含该代码,因为我不知道您使用的是什么发行版,而且它会根据发行版而有所不同。
希望这可以帮助。
答案2
我不确定。但是如果你的 MAC 地址和前缀不变,为什么不使用自动分配的地址静态配置接口呢?
如果您的 MAC 地址或前缀确实定期更改,我很好奇想知道您在做什么。
答案3
你的路由器运行的是什么?如果是 Gentoo 这样的成熟发行版,OpenRC 有一个/etc/conf.d/net:6to4_suffix
设置,如果#357929按照提议的方式进行修复,Debian 也会有一个/etc/network/interfaces:6to4subnet
设置。
否则,我只能手动设置地址。我的路由器上的脚本包含以下内容:
IDEV=br0 ODEV=vlan2 WANIP =`ip -4 addr show dev“$ODEV”|awk'/inet / {print$2}'|cut -d/-f1` V6PREFIX =`printf'2002:%02x%02x:%02x%02x'$ {WANIP//./}` V6网络=16 网关=192.88.99.1 ip 隧道添加 6to4 模式坐远程任何本地“$IP”ttl 255 dev“$ODEV” ip link 设置 6to4 up ip 地址添加“$V6PREFIX::1/$V6NET” dev 6to4 ip 地址添加“$V6PREFIX:1::1/$((V6NET+48))” dev“$IDEV” ip 路由添加 2000::/3 通过“::$GW” dev 6to4 度量 1
我猜你想要$V6PREFIX:dead::1/$((V6NET+48))
或类似的东西。
答案4
只需在运行 Radvd 的主机上的 /etc/network/interfaces 文件中使用以下配置即可。
auto eth0
iface eth0 inet6 auto
这里的“自动”表示对接口 eth0 使用 SLAAC,它将以与其他客户端相同的方式从 Radvd 征求 IPv6 配置。