Ubuntu 无法在两个接口之间转发流量

Ubuntu 无法在两个接口之间转发流量

我有一个简单的网络 两台 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 来说,它就是它所期望的数据包。

相关内容