如何在接口之间路由

Ste*_*ven 7 networking routing network-interface

我有以下设置:

                         (192.168.4.1)     
   Device A     <------->   device B   <------->   Device C
(192.168.5.84)           (192.168.5.1)          (192.168.4.5)
Run Code Online (Sandbox Code Playgroud)

设备 B 实际上有一个 wifi 接口 ( wlan0 = 192.168.4.1),dhcp 服务器在该接口上运行。然后是电缆接口 ( eth0 = 192.168.5.1)。

我想达到的是设备 A 和 C 可以相互交谈。我一直在阅读如何得到这个结果,我发现我应该使用路由来完成这个。我尝试了一些事情,但我不明白为什么它不起作用。

设备 A 有一个静态 ip(子网255.255.255.0和网关192.168.5.1)。

设备 C 从 DHCP 服务器(子网255.255.255.0和网关192.168.4.1)收到一个 ip 。

我做了什么:

在设备 BI 上设置启用了 ipforward /etc/sysctl

添加路由:

iptables -A FORWARD -i eth0 -o wlan0 -s 192.168.5.0/24 -d 192.168.4.0/24 -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -s 192.168.4.0/24 -d 192.168.5.0/24 -j ACCEPT 
Run Code Online (Sandbox Code Playgroud)

问题是设备 A 和 C 都可以从设备 B 访问,因此这表明它必须是路由问题。所以我的问题是,如何解决设备 B 将流量从 A 路由到 C 的情况?


更新:我没有提到的是我只想通过更改设备 B 的设置来实现这个结果

小智 8

无需使用 iptables。如果您已成功启用 ip 转发(即通过设置/proc/sys/net/ipv4/ip_forward1),设备 B 将完成这项工作,因为两个网络都直接连接到 B。您可能缺少的是设备 A 和 C 上的正确路由。
在 A 上:

ip route add 192.168.4.0/24 via 192.168.5.1
Run Code Online (Sandbox Code Playgroud)

在 C 上:

ip route add 192.168.5.0/24 via 192.168.4.1
Run Code Online (Sandbox Code Playgroud)