Oleksii Asked: 2020-01-22 00:22:48 +0800 CST2020-01-22 00:22:48 +0800 CST 2020-01-22 00:22:48 +0800 CST 如何配置 IP 转发 772 我有一个DEV1应该与设备通信的设备DEV3,但是在中间有DEV2。 我的理解是我需要在 和 上使用 IP 转发并DEV2编辑路由表。DEV1DEV3 因为DEV2我启用了 IP 转发: -> sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1 我无法设置其余的东西。请你帮助我好吗? ip configuration 1 个回答 Voted Best Answer MariusMatutiae 2020-01-22T01:30:05+08:002020-01-22T01:30:05+08:00 鉴于这两个路由器允许所有连接从任一侧通过,最简单的事情就是向 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,并确保不占用这些地址,例如,只需ping -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)。 这种设置的优点是它很干净:所有协议和所有端口都是同时路由的,无需增加不必要的复杂性。 CAVEAT:DEV1 上的 interface1 和 DEV2 上的 interface2 属于同一个子网,这很奇怪,因为您说两者被路由器隔开:根据定义,路由器连接两个不同的子网。因此,要么 router1不是路由器,要么如果是,则其配置中存在错误,因为它被两侧相同的网络包围。我假设前者,而不是后者。
鉴于这两个路由器允许所有连接从任一侧通过,最简单的事情就是向 DEV2 的两个接口添加新的 IP 地址。我们这样做是为了让 DEV2 可以轻松地区分用于它的数据包和打算通过的数据包:
(用真实的接口名称替换 INTERFACE2/3,并确保不占用这些地址,例如,只需ping -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。
现在我们转发任何到达两个新地址的东西:
第一条规则允许数据包从一个接口迁移到另一个接口(规则net.ipv4.ip_forward = 1是必要的,但还不够),最后一条规则重写所有数据包标头,就像来自传出接口一样,以便再次路由回复通过 DEV2;中间的两条规则重写数据包标头,以便数据包从 DEV1 发送到 DEV3(规则 n.2)和从 DEV3 发送到 DEV1(规则 n.3)。
这种设置的优点是它很干净:所有协议和所有端口都是同时路由的,无需增加不必要的复杂性。
CAVEAT:DEV1 上的 interface1 和 DEV2 上的 interface2 属于同一个子网,这很奇怪,因为您说两者被路由器隔开:根据定义,路由器连接两个不同的子网。因此,要么 router1不是路由器,要么如果是,则其配置中存在错误,因为它被两侧相同的网络包围。我假设前者,而不是后者。