linux 具有多个上行链路单接口的 ip 路由

linux ip routing with multiple uplinks SINGLE interface

正在尝试设置 运行 3 vms 的 Proxmox 机器。它有 3 public 个 ip,但这些 ip 在一个接口 (eth0) 上。

这 3 个虚拟机位于网桥 (vmbr0) 上,地址为 172.16.0.1/24

我启用了ip伪装和转发。但我无法弄清楚如何使 3 个虚拟机(172.16.0.2、172.16.0.3、172.16.0.4)中的每一个都通过 public ips 中的特定一个路由出去。

我已经尝试使用 3 tables 设置网关和规则的标准 iproute,但无论我设置什么规则,vms 仍然通过主 ip 路由出去。

问题是 3 public ip 位于完全独立的网络上,因此它们每个都有不同的网关。我知道如何使用 iproute 来做到这一点 if 每个 public ip 都在一个单独的物理接口上但是这台机器在一个接口上有所有 3 个并且 iproute 似乎没有像那样,因为如果我通过 23.92.26.1 dev eth0:2 table node2 执行 ip route add default 然后稍后列出它通过 eth0 显示的所有内容。所以显然 iproute 不喜欢伪接口。我对 iptables 了解不多,我确信有一种方法可以用纯 iptables 来做到这一点,但还没有找到任何东西。我所有的 google 搜索都得到了 iproute tables,就像我说的那样,它似乎不适用于 signle 接口。

提前致谢

考虑到 ProxMox 运行 Debian 尝试为每个额外链接

在您的 /etc/network/interfaces 添加如下内容
post-up route add -net <network identifier> netmask <netmask> gw <links gateway>
pre-down route del -net <network identifier> netmask <netmask> gw <links gateway>

然后使用 iptables,如果你想让 172.16.0.2 通过第二个 ip,请执行以下操作:(这称为源 NAT 或 SNAT)--to-source 指定你想要传出的 ip连接重新映射到。

iptables -t nat -A POSTROUTING -s 172.16.0.2/24 -j SNAT --to-source <ip address you want it to go out of>

如果您希望同一 IP 上的所有传入连接都转到 172.16.0.2,那么您还需要添加以下内容(这称为目标 NAT 或 DNAT)

iptables -t nat -A PREROUTING -d <ip/mask bit> -j DNAT --to-destination 172.16.0.2

问题:

(1)3VM - 172.16.0.2、172.16.0.3、172.16.0.4

(2)网关 - 172.16.0.1/24

(3)3 publicIP: $IP_A(网关 $IP_A_G), $IP_B(网关 $IP_B_G), $IP_C(网关 $IP_C_G)

(4)你的目标是每个虚拟机使用不同的 public IP 访问外部站点,很糟糕:

VM1(172.16.0.2) ----> $IP_A
VM2(172.16.0.3) ----> $IP_B
VM3(172.16.0.4) ----> $IP_C

所以,我认为你可以使用 ip route 来做到这一点:

(1)在 Promox(172.16.0.1)

echo "200 IPA" >> /etc/iproute2/rt_tables
echo "201 IPB" >> /etc/iproute2/rt_tables
echo "202 IPC" >> /etc/iproute2/rt_tables

重新启动 Promox 一次。

(2)创建路由器

ip route del default table IPA
ip route add default via $IP_A_G  table IPA
ip route del default table IPB
ip route add default via $IP_B_G  table IPB
ip route del default table IPC
ip route add default via $IP_C_G  table IPC

(3)为每个虚拟机添加路由

ip rule add from 172.16.0.2 lookup IPA pref 200
ip rule add from 172.16.0.3 lookup IPB pref 201
ip rule add from 172.16.0.4 lookup IPC pref 202
ip route flush cache

完成