如何通过两个路由器自己的网络实现端口转发功能?

如何通过两个路由器自己的网络实现端口转发功能?

我有一台计算机,它通过内部网络连接到两个路由器。我已在两个路由器上将端口 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。

相关内容