路由表在家庭组网中的应用
在家庭局域网的组建中,我们经常会用到两个以上的路由器,一台路由器物理放置在入户线缆附近,使用PPPoE拨号连接互联网,另一台路由,另一台路由器物理放置在家的另一头,作为client连接上一台路由器来增强无线覆盖。网络拓扑图如下:

如图,绝大部分时候 路由器B 是作为 路由器A 的客户端( Client )存在于局域网中的,路由器B 再进行NAT以使 电脑B 可以连接互联网。
由此,局域网中就存在两个NAT路由器,电脑B可以直接访问电脑A的服务,但是电脑A取无法访问电脑B的服务。因为,路由器B 作为NAT路由器隔断了两台电脑的连接,电脑A 无法主动向隐藏在 路由器B 后方的 电脑B 发起连接,只能被动接受 电脑B 的请求。
如何解决 电脑A 和 电脑B 之间相互访问的问题,就是本文的主要内容
解决方法其实多种多样:
1.可以关掉 路由器B 的路由功能,使其作为交换机存在于局域网
2.设置 路由器A 的路由表,将子网192.168.100.0/24的路由指向 路由器B。
3.作为上一个方案的替代(有些路由器不支持修改路由表)。设置 路由器A 下的所有设备的路由表,将子网192.168.100.0/24的路由指向 路由器B。
我自己使用的方案二,快速直接,暂时没发现副作用。
配置
现在以第三方Padavan路由器固件为例进行设置。路由器刷机相关文章请看这里
路由器A
将子网设置成192.168.1.0/24
在 路由器后台->内部网络->路由设置 中添加静态路由

注意保存设置
路由器B
将路由器模式设置为静态IP模式,IP设置为192.168.10.100/24

关闭路由器的NAT和Firewalls(防火墙)


原理
NAT外的设备无法访问NAT后的设备归根到底是不知道NAT后设备的IP地址和数据包不知道该发向何处。如果不加入静态路由,电脑A(192.168.10.202/24)发给 电脑B(192.168.100.161/24)的数据包到达 默认网关路由器A(192.168.10.1/24)后,由于目的IP是保留IP故数据包不会被送出NAT,加入静态路由后,路由器A就知道了数据包的下一跳地址。目的地址是 电脑B(192.168.100.161/24)的数据包在送到 路由器B(192.168.10.100/24,192.168.100.1/24)之后,由于是自己子网的IP,故路由器B可以根据默认路由表继续转发。
数据包路径
电脑A -> 路由器A -> 路由器B -> 电脑B
进阶
研究NAT、Firewalls和静态路由对本方案的影响(电脑端阅读效果最佳)
路由器A静态路由 | 路由器B 的NAT | 路由器B的Firewalls | 电脑A ping 电脑B | 电脑B ping 电脑A | 电脑A访问电脑B的Web server | 电脑B访问电脑A的Web server |
---|---|---|---|---|---|---|
ON | ON | ON | 不通 | 通 | 不通 | 通(日志显示192.168.10.100) |
ON | ON | OFF | 通 | 通 | 通 | 通(日志显示192.168.10.100) |
ON | OFF | ON | 取决于是否开启“响应外部ping”,见下表三、四行 | 通 | 不通 | 通(日志显示192.168.100.161) |
ON | OFF | OFF | 通 | 通 | 通 | 通(日志显示192.168.100.161) |
OFF | ON | ON | 不通 | 通 | 不通 | 通(日志显示192.168.10.100) |
OFF | ON | OFF | 不通 | 通 | 不通 | 通(日志显示192.168.10.100) |
OFF | OFF | ON | 不通 | 不通 | 不通 | 半通(日志有请求记录(192.168.100.161),但客户端无法接收回复) |
OFF | OFF | OFF | 不通 | 不通 | 不通 | 半通(日志有请求记录(192.168.100.161),但客户端无法接收回复) |
路由器Firewalls是否开启响应外部ping对连通状态的影响
路由器A静态路由 | 路由器B 的NAT | 路由器B的Firewalls | 路由器B的Firewalls(是否响应外部ping) | 电脑A ping 电脑B |
---|---|---|---|---|
ON | ON | ON | 响应外部ping | 不通 |
ON | ON | ON | 不响应外部ping | 不通 |
ON | OFF | ON | 响应外部ping | 通 |
ON | OFF | ON | 不响应外部ping | 不通 |
路由表在家庭组网中的应用