两个子网之间的 iptables 连接

两个子网之间的 iptables 连接

我有一台 Linux 机器(我想将其用作网关)和另外两台机器 A 和 B。网关机器有 eth0、eth1 和 eth2。 eth1 连接到机器 A,eth2 连接到机器 B。我希望能够从 A ping 到 B,反之亦然。我尝试使用 来做到这一点iptables,并添加了转发规则:

iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT
iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT

但当我尝试 ping 时,却收到“主机无法访问”的消息。

当我跑步时

iptables -L -n -V

我可以看到转发规则有 0 个数据包和 0 个字节。现在我知道我可能会错过更多东西,但看起来转发链从未到达。根据文档,如果它不是目的地,它将进入转发链。

编辑1:
我清理了 iptables 并使用以下命令从头开始

    iptables -A FORWARD  -i eth1 -o eth2 -j ACCEPT
    iptables -A FORWARD  -i eth2 -o eth1 -j ACCEPT

    iptables -t nat -A PREROUTING -i eth1 -j DNAT --to-destination y.y.y.y
    iptables -t nat -A PREROUTING -i eth2 -j DNAT --to-destination x.x.x.x

    iptables -t nat -A POSTROUTING -o eth2 -d y.y.y.y -j SNAT --to-source x.x.x.x
    iptables -t nat -A POSTROUTING -o eth1 -d x.x.x.x -j SNAT --to-source y.y.y.y

仍然提示“网络无法访问”

答案1

您的误解是您似乎认为iptables转发是这样进行的。

您在第一个示例中使用的规则仅允许转发。默认情况下已允许转发,因此这些规则仅作为稍后出现的一般拒绝规则的例外才有意义。

您只需启用数据包转发

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

当然,你的网关应该是A和的默认网关B,或者至少必须是互相到达的网关。因此,如果它在启用转发的情况下不起作用,您应该在所有三台计算机上包含路由表。

相关内容