似乎有(至少)两种方法可以在 Linux 上为接口添加辅助 IP 地址。所谓辅助,是指它将接受发往该 IP 地址的流量,并且对该 IP 的连接的响应将使用它作为源,但该框发起的任何流量(例如传出的 TCP 连接)都不会使用辅助地址。
两种方式都从添加主地址开始,例如ip addr add 172.16.8.10/24 dev lan
。然后我可以使用网络掩码/24
(与主地址匹配)或 来添加辅助地址/32
。
如果我将其添加为/24
,它将被标记为次要地址,因此不会被用作传出数据包的源,但这会造成两个地址被错误地以错误的顺序添加的风险。如果我将其添加为/32
,则不会发生错误的顺序,但它不会被标记为次要地址,我不确定这可能会带来什么不良影响。
所以,我想知道,哪种方法最不可能被打破?(如果重要的话,这台机器上的主要服务是 MySQL,但它也运行 NFSv3。我正在添加第二台机器作为热备用,并希望通过更改拥有辅助 IP 的机器在它们之间切换。)
答案1
如果我将其添加为 /24,它将被标记为次要地址,因此不会被用作传出数据包的源,但这会造成两个地址被错误地以错误的顺序添加的风险。如果我将其添加为 /32,则不会发生错误的顺序,但它不会被标记为次要地址,我不确定这可能会带来什么不良影响。
我不太明白你的意思。系统启动时,网络接口的配置是确定性的。通过正确配置网络,你可以决定首先分配哪个地址,将哪个地址分配为辅助地址。
如果您使用的是 RedHat-ish 系统,则主网络配置文件ifcfg-eth0
(例如)将在任何别名接口(例如)之前处理ifcfg-eth0:0
。我不太确定 Debian-ish 系统上的行为,但看起来文件/etc/network/interfaces
可能会按顺序处理,因此将别名定义放在主地址之后,一切就绪了。
所以,我想知道哪种方法最不可能被打破?
如果您的两个地址都在同一个网络上,我不知道哪个地址更容易或更不容易中断。不管怎样,我通常使用 /32 网络掩码配置辅助地址,因为主地址已经提供了必要的网络路由。
答案2
您不能指望地址是“确定性的”。在故障转移配置的情况下,您可能会遇到类似起搏器之类的东西,它会介入并删除或添加 IP 到接口。由于您不知道起搏器何时会安装 IP,因此您无法保证顺序或依赖任何此类确定性行为。
因此,我发现 Linux 中的连接跟踪有点令人沮丧。我有一个 HA 防火墙配置,所有传出的数据包都发送到固定地址。因此,传入故障转移 IP 的流量会导致从固定地址(不同)传出的流量,因此看起来没有建立或与传入连接相关,并被丢弃。