我有一台计算机,它通过内部网络连接到两个路由器。我已在两个路由器上将端口 80 转发到我的计算机。
RouterA:80 -> 10.0.0.10:80 有效。RouterB:80 -> 192.168.1.10:80 有效。
因此路由器的端口转发配置是正确的。
但是当我连接到两个网络时,只有 RouterA 的端口转发起作用。我该如何让 RouterB 的端口转发起作用?请查看我的计算机网络配置。
network:
ethernets:
enp7s0:
addresses:
- 10.0.0.10/24
gateway4: 10.0.0.1
nameservers:
addresses:
- 10.0.0.1
enp6s0:
addresses:
- 192.168.1.10/24
gateway4: 192.168.1.1
nameservers: {}
version: 2
我不需要使用enp6s0
网关,但它似乎需要端口转发。
感谢@raj 更新了我的网络配置。
注意:这并非我所要求的,但如果您有不同的 IP 范围访问路由器,它将起作用。幸运的是,我的情况就是这样。
enp7s0:
addresses:
- 10.0.0.10/24
routes:
- to: 0.0.0.0/0 #default route
via: 10.0.0.1
metric: 100
nameservers:
addresses:
- 10.0.0.1
enp6s0:
addresses:
- 192.168.1.10/24
routes:
- to: A.B.C.D/24 # IP range of network that would access Router B
via: 192.168.1.1
metric: 10
nameservers: {}
答案1
通常,如果定义了两个默认网关,网络效果会不太好。您的计算机默认只使用一个网关(在本例中可能是 10.0.0.1),只有当第一个网关无法访问时才会使用第二个网关。
因此 RouterB 上的端口转发可能是正常工作,也就是说,发送到 RouterB:80 的数据包可能到达您机器上的接口 192.168.1.10。但回复数据包始终发送到网关 10.0.0.1,并且可能不会返回目的地(这就是所谓的“非对称路由”,通常很麻烦)。
如果您计划从同一 IP 地址范围连接到 RouterA:80 和 RouterB:80,我认为您的问题没有简单的解决方案。也许可以以某种方式调整 iptables,以便对通过接口 enp6s0 接收的数据包的回复始终通过 192.168.1.1 发出,但我不知道该怎么做(如果可能的话)。
如果 IP 地址不同,则不应将 192.168.1.1 定义为默认网关,而是向路由表添加通过 192.168.1.1 到特定网络的路由。该路由优先于默认网关,因此到指定网络的数据包将通过 192.168.1.1 发送,而不是通过 10.0.0.1。