我在一台机器内配置了一个网络10.20.1.0/24
,该网络将由该机器上的虚拟机使用。该机器的物理接口上的 IP 是172.31.10.94/24
。我通过默认路由将互联网流量从连接到 的虚拟机的 IP 转发10.20.1.2/24
到172.31.10.94/24
Linux 服务器172.31.10.2/24
。Linux 服务器在这里用作网关。10.20.1.2/24
网关上有一个 iproute ,用于将所有发往 的流量转发10.20.1.2/24
到172.31.10.94/24
。
托管虚拟机的机器上的 ip 路由:
default via 172.31.10.2 dev enp1s0f0
10.20.1.3 dev tap22-dr2 scope link
172.31.10.0/24 dev enp1s0f0 proto kernel scope link src 172.31.81.94
192.168.20.0/24 dev enp3s0f0 proto kernel scope link src 192.168.20.2
192.168.20.102 dev tapd29f98b1-44 scope link
unreachable 192.168.121.0/24 proto bird
这是网关机器上的 IP 路由
default via 172.31.10.1 dev eth1
10.20.1.3 via 172.31.10.94 dev eth1 proto bird
172.31.10.0/24 dev eth1 proto kernel scope link src 172.31.10.2
192.168.20.102 via 172.31.10.94 dev eth1 proto bird
192.168.121.0/24 dev eth0 proto kernel scope link src 192.168.121.43
我正在尝试对所有来自的互联网流量进行网络地址转换,10.20.1.0/24
以便172.31.10.1
主机上的虚拟机可以获得外部连接。如有任何帮助,我将不胜感激?
PS:这是使用 Project Calico 在 OpenStack 中实现外部连接的简单实现。
答案1
这是一个简单的修复,但我不确定这是否是最好的解决方案。
# iptables -t nat -A POSTROUTING -o eth1 -s 10.20.1.0/24 -j MASQUERADE
如果有更好的方法,请提出建议。