我的设置是一个具有两个网络接口的 VM 主机,其中一个用作私有/内部,另一个用作公共(将在主机上获取公共地址),所有到客户机的 NAT 魔法都将在此发生。
两个接口意味着两个网关(一个通过eth0, 10.0.0.1
,另一个通过 上的虚假地址eth1, 2.0.0.1
)。
如果我理解的路由正确,我必须为网络设置一个2.0.0.1
具有其自己的默认网关的路由表。不幸的是,除非我在主机上的默认表中添加默认网关,否则无法路由来宾的流量。我想让主机用作10.0.0.1
其默认网关,但我不知道该怎么做。
细节:
具体来说,我想摆脱default via 2.0.0.1 dev eth1
主机,但如果我删除它,tcpdump -i vbr0
看起来就不太好了(尝试从下面示例中的访客查找 serverfault.com):
IP 192.168.10.2.32804 > 8.8.4.4.domain: 41116+ A? serverfault.com. (24)
IP 192.168.10.1 > 192.168.10.2: ICMP net 8.8.4.4 unreachable, length 60
尽管如此,客户机仍能够到达192.168.10.1
(其网关)和2.0.0.1
。此外,使用2.0.0.1
从客户机查找地址(该路由器也具有 DNS 服务)是可行的,因此本地路由似乎可以工作,“仅”默认网关部分似乎不知何故被搞乱了。
2.0.0.1
来自 guest(或 vb0)的所有流量是否都应该使用路由表“公共”中所定义的默认网关?
设置:
# ip route
default via 2.0.0.1 dev eth1
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.15
2.0.0.0/24 dev eth1 proto kernel scope link src 2.0.0.55
192.168.10.0/24 dev vbr0 proto kernel scope link src 192.168.10.1
# ip route show public
default via 2.0.0.1 dev eth1
2.0.0.0/24 dev eth1 scope link src 2.0.0.55
192.168.10.0/24 dev vbr0 scope link src 192.168.10.1
# ip rule
0: from all lookup local
32761: from 192.168.10.1 lookup public
32762: from all to 192.168.10.1 lookup public
32763: from all to 2.0.0.55 lookup public
32765: from 2.0.0.55 lookup public
32766: from all lookup main
32767: from all lookup default
# iptables -vnL
Chain INPUT (policy ACCEPT 1222 packets, 91256 bytes)
pkts bytes target prot opt in out source destination
13 648 REJECT all -- * * 0.0.0.0/0 2.0.0.55 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 193 packets, 297K bytes)
pkts bytes target prot opt in out source destination
266 51860 ACCEPT all -- * * 0.0.0.0/0 192.168.10.0/24 ctstate NEW,RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT 1157 packets, 149K bytes)
pkts bytes target prot opt in out source destination
Chain LOGDROP (0 references)
pkts bytes target prot opt in out source destination
# iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 49 packets, 5494 bytes)
pkts bytes target prot opt in out source destination
6 360 DNAT tcp -- * * 0.0.0.0/0 2.0.0.55 tcp dpt:80 to:192.168.10.2:80
0 0 DNAT tcp -- * * 0.0.0.0/0 2.0.0.55 tcp dpt:443 to:192.168.10.2:443
1 60 DNAT tcp -- * * 0.0.0.0/0 2.0.0.55 tcp dpt:22022 to:192.168.10.2:22
Chain INPUT (policy ACCEPT 24 packets, 3414 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 5 packets, 317 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 12 packets, 737 bytes)
pkts bytes target prot opt in out source destination
5 318 SNAT all -- * * 192.168.10.2 0.0.0.0/0 to:2.0.0.55