我有一个简单的网络 两台 Linux 机器都是 ubuntu。
Linux #1 (eth0:192.168.1.10) <---> Linux #2 (eth1:192.168.1.11) + --- + (eth2:192.168.2.10) + --- + FW (192.168.2.11)
基本上,我希望 Linux #1 的流量通过互联网传输出去,我认为我需要将 Linux #2 用作路由器。什么是有效的
从 Linux #1,我可以 ping 192.168.1.11 和 192.168.2.10,但不能 ping 192.168.2.11。
我在 Linux #2 上启用了 sysctl -w net.ipv4.ip_forward=1,并且关闭了防火墙服务 ufw stop。
在 Linux#1 上,我有以下路由 -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.11 0.0.0.0 UG 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
在 Linux#2 上,我有以下内容
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.2.11 0.0.0.0 UG 0 0 0 eth2
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
我错过了什么?
答案1
网络配置似乎没问题。
我认为您缺少的是 Linux #2 计算机上的 SNAT 规则(有时也称为接口伪装)。我建议备份您的 IPTables 并使用以下方法:
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 192.168.2.11
http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html#ss6.1
我认为数据包到达了 .2.11,但由于数据包中指定的源地址,它无法返回 Linux #1。这确保了数据包的源地址为 192.168.2.11,因此对于 Linux #1 来说,它就是它所期望的数据包。