通过网关路由

通过网关路由

我现在有一个关于路由问题的非常基本的问题。

所以我自己网络的ip 10.0.0.1的中央服务器是ip net 10.0.0.0/25的路由器。在客户端 10.0.0.100 上,我有一个到服务于 ip 网络 172.20.10.0/25 的接入点的 WiFi 连接。

如何添加到 10.0.0.1 的路由,以便 10.0.0.0./25 中的所有客户端都可以到达 172.20.10.0/25?


到目前为止我测试过的(ipv4转发和iptables伪装已经处理完毕):

添加 10.0.0.1 上的路由,例如

route add -net 172.20.10.0 netmask 255.255.255.128 dev br0

使得 10.0.0.1 可以到达 172.20.10.0/25 网络,但仅此而已。来自任何其他客户端的跟踪路由显示请求被卡在 10.0.0.1,因此它们无法到达其他网络,直到我在所有客户端上单独配置相同的路由。但这与 10.0.0.1 作为网关的想法相矛盾。

使用上述命令后 10.0.0.1 的路由表如下所示:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         <WANIP IS HERE> 0.0.0.0         UG        0 0          0 eth0
10.0.0.0        0.0.0.0         255.255.255.128 U         0 0          0 br0
<WANIP IS HERE> 0.0.0.0         255.255.255.252 U         0 0          0 eth0
172.20.10.0     10.0.0.100      255.255.255.128 UG        0 0          0 br0

我在这里缺少什么?

非常感谢您抽出时间并回答这个可能非常愚蠢的问题!

答案1

通常,当网关(在本例中为您的 10.0.0.1 系统)具有通过同一网络上的另一台主机(即您的情况下的 10.0.0.100)到所需网络的路由时,它会发送 ICMP 重定向消息以将客户端定向到不同的网关。 。

然而,为此您需要添加一条 iptables 规则以允许从内部网络转发到内部网络,这可能听起来不合逻辑,但实际上是这样,因为它有效地将流量从内部网络发送到内部网络。

添加以下规则:

iptables -A FORWARD -i br0 -o br0 -j ACCEPT

现在,当 10.0.0.0/25 网络上的客户端主机想要访问 172.20.10.x 时,该主机会将数据包发送到其默认网关,即 10.0.0.1。该默认网关知道到 172.20.10.0/25 的路由是通过 10.0.0.100,因此它向客户端主机发送回一个ICMP redirect 172.20.10.x to host 10.0.0.100数据包。客户端主机为目标主机添加临时路由,并将使用 10.0.0.100 作为该主机的网关。

客户端主机必须配置为接受此类 ICMP 重定向,因为当发送恶意重定向以将流量转移到虚假网关时,这些重定向可能会出现安全问题,但这是 Linux 中的默认设置,Windows 也接受它们。在 Linux 中,可以通过net.ipv4.conf.default.accept_redirectssysctl 设置进行控制。

答案2

对于@Wurtel 之前的回答,我想补充一点,您还需要输入:

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

此外,您还必须通过以下方式伪装您的联系:

IPTABLES -t nat -A POSTROUTING -o eth0 -j MASQUERADE

否则,传出流量将无法得到正确处理。

相关内容