我想模拟虚拟机的 NAT 网络模式,而不使用任何特定于 vm 的工具。详细目标如下:
- 虚拟机具有内部网络 IP
10.8.20.0/24
- 物理网卡
eno1
有 IP192.168.1.233
- VM 可以访问互联网
- 网络可以通过端口绑定访问虚拟机(即
192.168.1.233:9080 -> 10.8.20.3:80
)
为了更简单,我们可以使用 veth peers 来模拟 VM 的 TAP,而不是实际设置 VM。
所以我设置的网络是:
# Create internal bridge my-bridge
ip link add my-bridge type bridge
ip link set dev my-bridge up
# Create a veth peer, my-guestb connected to my-bridge, vpx-guesta has IP 10.8.20.3
ip link add my-guesta type veth peer name my-guestb
ip link set my-guestb master my-bridge
ip addr add 10.8.20.3/24 dev my-guesta
ip link set dev my-guesta up
ip link set dev my-guestb up
从现在起,很明显我们无法从 ping 通互联网vpx-guesta
。
我读了很多关于如何在 Ubuntu 中创建 NAT 的博客,但都不起作用。我做了以下事情:
iptables -F
iptables -t nat -F
iptables -t nat -A POSTROUTING -o eno1 MASQUERADE
iptables -A FORWARD -i eno1 -o my-guesta -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i my-guesta -o eno1 -j ACCEPT
通过这样做,我想从 ping 互联网my-guesta
,但没有成功。
我应该链接eno1
到my-bridge
吗?如果是,我该如何管理 IP 和路由表?如果不是,我该怎么办?
- 主机:ubuntu 22.04
- ip_forward 为 1
- accept_local 为
my-guesta
1