当虚拟接口上有多个 IP 时,如何设置默认源 (src) ip 地址

foo*_*ser 6 networking

在虚拟接口上有多个 ip 的情况下,如何告诉网络堆栈哪个 ip 是要与之通信的源 (src)?

auto eth0 
iface eth0 inet static
            address x.x.x.209
            netmask 255.255.255.0
            network x.x.x.0
            broadcast x.x.x.255
            gateway x.x.x.254

auto eth0:1
iface eth0:1 inet static
            address x.x.x.210
            netmask 255.255.255.0
            network x.x.x.0
            broadcast x.x.x.255
            gateway x.x.x.254
Run Code Online (Sandbox Code Playgroud)

等等等等

它似乎在 /etc/networking/interfaces 中选择最后一个

~# ip -s route get 173.194.67.113; 
173.194.67.113 via x.x.x.254 dev eth0  src x.x.x.210 
  cache  users 1 used 11 mtu 1500 advmss 1460 hoplimit 64
Run Code Online (Sandbox Code Playgroud)

但是这种行为是不可预测的,我为每个接口分配了大约 30 个 ip,有时(scr)源 ip 会发生变化。

我需要了解它是如何选择的。

我已经尝试设置度量来标准化 src,但它似乎不支持虚拟接口。 NETLINK: Packet too small or truncated!

编辑:Ubuntu 10.04 64 位

编辑按照@TheCleaner 的链接,我的 /etc/network/interfaces 现在更干净了。很抱歉没有提前提供更多信息,这是一个复杂的环境,我真正想知道的是,当您从命令行运行 apt-get update 时,内核如何决定源地址。所有负载平衡的东西,故障转移等都运行良好。

auto eth0
iface eth0 inet static
            address x.x.x.183
            netmask 255.255.255.0
            network x.x.x.0
            broadcast x.x.x.255
            gateway x.x.x.254
up ip addr add x.x.x.209 dev eth0 label eth0:1
up ip addr add x.x.x.210 dev eth0 label eth0:2
up ip addr add x.x.x.211 dev eth0 label eth0:3
up ip addr add x.x.x.212 dev eth0 label eth0:4
up ip addr add x.x.x.213 dev eth0 label eth0:5
up ip addr add x.x.x.214 dev eth0 label eth0:6
up ip addr add x.x.x.215 dev eth0 label eth0:7
Run Code Online (Sandbox Code Playgroud)

IDK 如果它是固定的。但到目前为止一切顺利。我只是打算一边睡觉一边跑步 5;do ip -s route get 173.194.67.113; 做
了一段时间,看看我在连接出站时是否有一个稳定的IP。

这很好用!感谢所有插话的人。我仍然很好奇为什么我的源 ip 正在改变,但我只是把它归结为编写不正确的接口文件并继续前进。

hay*_*lci 2

在别名节中,请勿包含网关。您也根本不需要“网络”线。

auto eth0 
iface eth0 inet static
            address x.x.x.209
            netmask 255.255.255.0
            broadcast x.x.x.255
            gateway x.x.x.254

auto eth0:1
iface eth0:1 inet static
            address x.x.x.210
            netmask 255.255.255.0
Run Code Online (Sandbox Code Playgroud)