小米路由器 OpenWrt 不同子网间的互通 | 您所在的位置:网站首页 › 小米路由路 › 小米路由器 OpenWrt 不同子网间的互通 |
假设有如下的路由结构 路由器A: 192.168.31.0/24 网关 192.168.31.1 路由器B: 192.168.36.0/24 网关 192.168.36.1 路由器A为路由器B的上级,即B的wan口与A的lan口连接,B在A中的地址为192.168.31.10 当如上网络搭建完成后,默认 B路由器中的设备是可以访问 A、B内所有设备的,但是这时候如果想让A路由局域网内的设备访问B路由下属的设备就要进行额外的配置了。 看了许多教程,基本上思路就是添加静态路由 但是在实际操作中会发现添加完成后依旧无法互相访问,遇到问题后也不知该如何排查,所以详细的记录一下具体的步骤,以方便有同样需求的人。 首先要在上级也就是A路由器上添加一条静态路由,这个路由应该指向B的网段也就是192.168.36.0/24,网关使用B在A中的地址即192.168.31.10 如果你的A路由是基于OpenWrt的那么可以在telnet/ssh连接之后修改/etc/config/network,追加如下内容 config route option interface 'lan' option target '192.168.36.0/24' option netmask '255.255.255.0' option gateway '192.168.31.10'保存之后,执行如下命令以使其生效 /etc/init.d/network restart这是使用执行命令 route -n 应能看到新添加的一条路由 192.168.36.0 192.168.31.10 255.255.255.0 UG 0 0 0 br-lan这时在终端ping 36子网下的设备就可以ping通了 回到连接在A路由器上的设备,想要访问 192.168.36.1 即路由B的管理界面,发现依旧无法连接 这时候就需要使用 traceroute 指令来分析一下具体问题了,也到了本篇文章的重点 首先在路由器A的终端中执行命令 traceroute 192.168.36.167 (任意B子网设备) 得到如下输出 traceroute to 192.168.36.167 (192.168.36.167), 30 hops max, 46 byte packets 1 7c2be1130676 (192.168.31.10) 0.425 ms 0.372 ms 0.285 ms 2 192.168.36.167 (192.168.36.167) 1.009 ms 0.774 ms 0.605 ms可以看到此时对于A路由器本身来讲,已经可以成功访问B路由器的子网了 回到电脑 同样执行命令 traceroute 192.168.36.167 得到如下输出 traceroute to 192.168.36.167 (192.168.36.167), 64 hops max, 52 byte packets 1 xiaoqiang (192.168.31.1) 6.312 ms 5.594 ms 3.331 ms 2 xiaoqiang (192.168.31.1) 2.893 ms 2.908 ms 2.759 ms可以看到数据包在到达目的地之前就返回了路由器,因此无法到达192.168.36.167。这通常意味着数据包在路由器上被丢弃或重定向了。 此时就可以不用怀疑是自己配错了或者百思不得其解了,路由部分已经解决 可能是因为其他问题没能成功实现数据的转发 这时候把眼光转向路由A的防火墙 cat /etc/config/firewall 像我这边A路由型号是AX9000,通过分析防火墙规则可以看到 默认 zone lan 的 option forward 为 'REJECT' 即拒绝所有的转发流量 有些教程中会让直接改为 ACCEPT 或者添加 lan lan 的 forwarding 规则 这里提供一种更优雅一些的解决方案 即添加如下规则 config zone option name 'PVEOpenwrt' option input 'ACCEPT' option output 'ACCEPT' option forward 'ACCEPT' list subnet '192.168.36.0/24' config forwarding option src 'lan' option dest 'PVEOpenwrt'PVEOpenwrt是zone的名字可以随便取 这样子就可以针对性的放行与B路由器的数据了 至此就可以愉快地玩耍了 |
CopyRight 2018-2019 实验室设备网 版权所有 |