使用 Linux 作为路由器,在不使用 nat 的情况下在子网之间路由流量

使用 Linux 作为路由器,在不使用 nat 的情况下在子网之间路由流量

我有一点网络经验,但不知何故我似乎无法使用 Linux 机器连接到子网

我当前的网络如下所示

#########
# LAN 1 # (192.178.178.0/24)
#########
    |
######### (192.168.178.1/24) eth0
# LINUX #
######### (192.168.177.1/24) wlan0
    |
#########
# LAN 2 # (192.168.177.0/24)
#########                   

Linux 机器在两个接口上运行 DHCP Linux 机器通过 DHCP 分配以下路由

[192.168.178.0/24 via 192.168.177.1] on wlan0
[192.168.177.0/24 via 192.168.178.1] on eth0

我已经在 Linux 机器上设置了 net.ipv4.ip_forward=1

但不同 LAN 上的设备无法互相 ping 通,即使它们已应用路由

我知道我可以用 MASQUERADE nat 解决这个问题,但我想知道接收端的包的源 ip

route get 的输出如下

user@router:~ $ ip route get to 192.168.177.2 from 192.168.178.3 iif eth0
192.168.177.2 from 192.168.178.3 dev wlan0
    cache iif wlan0

user@router:~ $ ip route get to 192.168.178.3 from 192.168.177.2 iif wlan0
192.168.178.3 from 192.168.177.2 dev eth0
    cache iif eth0

答案1

罪魁祸首是微软 Windows,路由工作正常,但如果它们不是来自同一个网络域等,Windows 就不会响应 ping 请求...

答案2

如果您看到数据包从路由器的正确接口发出(并且它们也具有正确的“目标 MAC”),则路由正在正确执行。即使没有响应,您看到请求数据包在两个方向上转发也足够了。

(使用数据包捕获工具可以轻松查看数据包的实际去向 - Wireshark 也可以在 Windows 上运行,因此你可以使用它来验证操作系统是否至少看到 ICMP Echo 数据包到达。)

默认情况下,Windows 系统根本不响应 ping 请求,除非启用了文件共享,在这种情况下(IIRC)它仅限于当前子网。

使用wf.msc工具激活内置的“文件和打印机共享(ICMP-In)”规则以允许数据包通过。

相关内容