答案1
鉴于这两个路由器允许所有连接从任意一侧通过,最简单的事情就是向 DEV2 的两个接口添加新的 IP 地址。我们这样做是为了让 DEV2 可以轻松区分发给它的数据包和要经过的数据包:
ip addr add 192.168.2.3/24 dev INTERFACE2
ip addr add 10.12.0.218/24 dev INTERFACE3
(用真实的接口名称替换 INTERFACE2/3,并确保这些地址是不是采取,这样做只是平-c 192.168.2.3例如,看看您是否得到任何回复。另外,我猜这两个掩码是/24,如果不是请相应调整)。现在,192.168.2.3 和 10.12.0.218 的任何内容均适用于 DEV1/3,而 192.168.2.1-10.12.0.217 的任何内容均适用于 DEV2。
现在我们转发到达这两个新地址的任何内容:
iptables -A FORWARD -j ACCEPT
iptables -A PREROUTING -t nat -d 192.168.2.3 -j DNAT --to 10.10.3.154
iptables -A PREROUTING -t nat -d 10.12.0.218 -j DNAT --to 192.168.2.2
iptables -t nat -A POSTROUTING -j MASQUERADE
第一条规则允许数据包从一个接口迁移到另一个接口(规则net.ipv4.ip_forward = 1是必要的但还不够),最后一条规则重写所有数据包标头,就好像来自传出接口一样,以便回复再次通过 DEV2 路由;中间的两条规则重写数据包标头,以便数据包从 DEV1 发送到 DEV3(规则 n.2)以及从 DEV3 发送到 DEV1(规则 n.3)。
这种设置的优点是它很干净:所有协议和所有端口都同时路由,无需添加不必要的复杂性。
警告:DEV1上的interface1和DEV2上的interface2属于同一子网,这很奇怪,因为你说两者被路由器分开:根据定义,路由器连接两个清楚的子网。因此,router1 是不是路由器,或者,如果是,则其配置有错误,因为它两侧都被相同的网络包围。我假设是前者,而不是后者。