![在 Linux 上 ifcfg-eth0 中设置默认出站 IPv6 地址的正确方法](https://linux22.com/image/1508258/%E5%9C%A8%20Linux%20%E4%B8%8A%20ifcfg-eth0%20%E4%B8%AD%E8%AE%BE%E7%BD%AE%E9%BB%98%E8%AE%A4%E5%87%BA%E7%AB%99%20IPv6%20%E5%9C%B0%E5%9D%80%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95.png)
当 Linux 计算机启动出站 IPv6 连接时,哪个启动配置选项将设置要使用的默认出站 IPv6 地址?IPV6ADDR=
无法指定默认出站 IPv6 地址。
我有一台在 eth0 上有多个 IPv6 别名地址的机器。我指定ifcfg-eth0
将其设置IPV6ADDR_SECONDARIES=
为一长串 IPv6 地址。
Linux 似乎会随机选择其中一个 IPv6 地址作为其默认的出站 IPv6。它使用这个地址没有任何理由,而且很烦人。有些 IPv6 地址仅用于传入服务,我不想在启动出站连接时将这些地址暴露给其他人。
我可以手动告诉 Linux 停止使用出站 IPv6 地址:
ip -6 addr show | grep global
sudo ip addr change 2111:aaaa:bbbb:cccc:1:2:3:4 dev eth0 preferred_lft 0
ip -6 addr show | grep global
然后它停止使用2111:aaaa:bbbb:cccc:1:2:3:4
默认出站 IPv6,并根据 开始使用列表中的下一个 IPv6 ip -6 addr show | grep global
。这是一个手动解决方法,直到我找到一些IPV6_OUTBOUND=
或任何参数来指定主出站 IPv6 地址。
相比之下,IPv4 似乎将其用作IPADDR=
默认出站 IP。此参数的 IPv6 版本IPV6ADDR=
不设置默认出站 IPv6 地址 - 它通常使用列表中的一个IPV6ADDR_SECONDARIES=
。
我正在使用 Centos 6。
答案1
令人惊讶的是,实现这一点的方法就在路由表中。每条路由都可以有一个src
选项,定义该路由的默认源地址。这样,您可以设置不同的默认源地址,例如在您自己的数据中心内使用以及在使用默认路由时使用。
在 CentOS 中使用网络脚本,您可以在 中存储自定义路由/etc/sysconfig/network-scripts/route6-<interface>
。其语法与 相同ip route add
,但省略了这三个标记:
default via 2001:db8:c0:ffee:: src 2001:db8::123 dev enp4s0f0 metric 1
答案2
发生这种情况是因为您的所有 IPv6 地址都被视为平等源地址选择当没有哪个地址比另一个地址更受欢迎时,Linux 会随机选择一个。
这有点像 hack,而且稍微滥用 IPv6 家庭地址的定义,但它应该这样做:
将所需的发送地址设置为家庭地址。这样,当应用源选择规则时,指定的地址就会获胜。
ip addr change 2001:db8:c0:ffee::4 home dev enp4s0f0
目前,无法在 Red Hat 网络脚本中进行设置;您需要将其添加到本地脚本中,例如/sbin/ifup-local
。
请注意,您可能无法在 CentOS 6 中执行此操作。您需要 CentOS 7。