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



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

这3个vm位于桥接器(vmbr0)上,地址为172.16.0.1/24

我已经启用了ip伪装和转发。但我不知道如何使3个vm(172.16.0.2、172.16.0.3、172.16.0.4)中的每一个都通过特定的公共ip进行路由。

我尝试过标准的iproute,其中有3个表设置网关和规则,但无论我设置什么规则,vm仍然通过主ip路由。

问题是3个公共ip在完全独立的网络上,所以它们每个都有一个不同的网关。我知道如何使用iproute来实现这一点如果每个公共ip都在一个单独的物理接口上,但这台机器在一个接口上有所有3个,iproute似乎不喜欢这样,因为如果我通过23.92.26.1 dev eth0:2表node2添加默认值,然后稍后通过eth0列出它显示的所有内容。显然,iproute不喜欢psuedo接口。我对iptables了解不多,我相信有一种方法可以用纯iptables做到这一点,但我什么都没找到。我所有的谷歌搜索都会出现iproute表,就像我说的那样,这些表似乎不适用于signle界面。

提前感谢

考虑到ProxMox正在运行Debian,请尝试为每个额外的链接向/etc/network/接口添加以下内容

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源指定您希望将传出连接重新映射到哪个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公共IP:$IP_A(网关$IP_A_G)、$IP_B(网关$SP_B_G)、$IP _C(网关%IP_C_G)

(4) 你的目标是每个虚拟机都使用不同的公共IP访问外部,比如:

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

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

(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) 为每个VM 添加路由

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

完成

最新更新