iptables 设置两个以太网接口之间的转发

iptables 设置两个以太网接口之间的转发

我想在 Linux 上创建一个具有 2 个接口 eth0 和 eth1 的网关。

Eth1 由 lte 调制解调器创建,一旦 lte 调制解调器连接到网络并获取 IP 地址。然后在网关上运行 dhcp 服务器,以向连接到 eth0 lan 网络的 PC 提供此 IP 地址(例如:10.20.30.6)。然后为 eth0 分配 IP 地址 10.20.30.1

现在eth1本身没有分配任何ip地址。

现在我想将从 LAN 接口 eth0 上的 PC 接收到的所有数据包转发到 eth1 WAN 接口。

请向我建议创建此转发所需使用的 IP 表规则。

请注意,由于 lte 调制解调器的限制,无法使用桥接模式,并且由于要创建的架构的限制,也无法使用 NAT 模式。

答案1

无论你要去哪里,都不需要 iptables。

据我所知,您想要做的是让网关在两个接口之间转发 IP 数据包,而无需网关对转发的数据包执行任何 NAT。您可以在没有任何 iptables 规则的情况下执行此操作。

我对 LTE 了解不多。因此,如果发现任何 LTE 特定注意事项,我将无法为您提供帮助。我的回答大部分假设eth0eth1都在以太网上运行普通 IPv4。

首先您需要确保转发已启用:

echo 1 >/proc/sys/net/ipv4/ip_forward

来自互联网的数据包将到达eth1。但这些数据包的发送者可能需要执行 ARP 请求,而 ARP 请求10.20.30.6并未分配给您的网关。因此,除非您启用 ARP 代理,否则您的网关将不会响应这些 ARP 请求:

echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp

一旦 ARP 回复被发送,其余传入数据包的处理就会使用普通的 IP 数据包转发进行,不需要任何魔法。

从 PC 到网关的数据包无需任何技巧即可通过 到达网关eth0。棘手的部分是如何让它们通过eth1接口离开。

您需要一条default路由。但该路由的网关可能是,您刚刚在设置的网关上10.20.30.1指定了它。但是,如果您知道原始网关的 MAC 地址,则可以使其工作,而无需实际网关 IP 地址。eth0

首先,您要发明一个占位符网关 IP 地址(应该是 RFC 1918 地址,否则您不需要通信)。对于示例,我假设10.1.2.3

ip neigh add 10.1.2.3 lladdr xx:xx:xx:xx:xx:xx dev eth1
ip route add 10.1.2.3 dev eth1
ip route add default via 10.1.2.3

由于 10.1.2.3 是作为网关 ARP 缓存中的永久条目创建的,因此不会针对此地址发送任何 ARP 请求。这意味着下一个网关不知道您选择的占位符 IP 地址不会成为问题。

相关内容