如何在两个不同的公共 IP 上访问 ubuntu 服务器

如何在两个不同的公共 IP 上访问 ubuntu 服务器

我正在努力解决当前的问题:

背景信息:戴尔 R710 上的 Ubuntu 20.04

我有 2 个不同的互联网连接,使用 2 个 ISP 提供的路由器。我已将 eno2 连接到 isp1 路由器,并通过永久 dhcp 租约获取 192.168.2.102 ip。我已将 eno3 连接到 isp2 路由器,并通过永久 dhcp 租约获取 192.168.88.254 ip。

知识产权

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether d4:be:d9:ee:7b:75 brd ff:ff:ff:ff:ff:ff
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether d4:be:d9:ee:7b:77 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.102/24 brd 192.168.2.255 scope global dynamic noprefixroute eno2
       valid_lft 41588sec preferred_lft 41588sec
    inet6 fe80::d6be:d9ff:feee:7b77/64 scope link
       valid_lft forever preferred_lft forever
4: eno3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether d4:be:d9:ee:7b:79 brd ff:ff:ff:ff:ff:ff
    inet 192.168.88.254/24 brd 192.168.88.255 scope global dynamic noprefixroute eno3
       valid_lft 486sec preferred_lft 486sec
    inet6 fe80::d6be:d9ff:feee:7b79/64 scope link
       valid_lft forever preferred_lft forever
5: eno4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether d4:be:d9:ee:7b:7b brd ff:ff:ff:ff:ff:ff
...

网络状态监测

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.88.1    0.0.0.0         UG        0 0          0 eno3
0.0.0.0         192.168.2.1     0.0.0.0         UG        0 0          0 eno2
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 eno2
192.168.88.0    0.0.0.0         255.255.255.0   U         0 0          0 eno3

问题是,如果在局域网之外,我一次只能通过 1 个(随机)公共 IP 访问服务器。如果 77.xx.xx.158(isp 2)可以访问,则 5.xx.xx.55(isp 1)无法访问,反之亦然,每次启动后都是随机的。

我需要能够在任何给定时间通过任何公共 IP 访问服务器。

提前感谢您提供任何可能的解决方案。

答案1

您有两条发生冲突的默认路线:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.88.1    0.0.0.0         UG        0 0          0 eno3
0.0.0.0         192.168.2.1     0.0.0.0         UG        0 0          0 eno2

这是异常情况。您的 PC/服务器会感到困惑,因为没有确切的规则来决定应该使用两个接口中的哪一个作为 Internet 网关。路由决策取决于动态设置为接口的指标或其他因素,这些因素可能会随机变化。因此,有时首选 eno2 接口,有时首选 eno3 接口作为主网关。

我认为从外部到内部的传入数据包将根据用作目的地的 IP 地址以正确的方式到达您的服务器(从外部用户的角度来看)。

  • 从互联网发送到 ISP1 公共地址的 SYN TCP 数据包通过 eno2 进入
  • 从互联网发送到 ISP2 公共地址的 SYN TCP 数据包通过 eno3 进入

您可以使用 Wireshark 或 Tshark 或 tcpdump 进行检查。

但是响应数据包(SYN ACK TCP)仅通过系统当前选择的主网关发送回来。两个网关中只有一个是首选,而第二个网关在同一时间根本不使用(除非您进行一些特殊设置)。这意味着针对一个接口的连接工作正常,但第二个连接通过错误的接口响应。这种情况称为“非对称路由”。数据包通过 eno3 进入,响应通过 eno2 离开,例如

提供商通常会检查并丢弃此类数据包,因为它看起来像网络攻击。源 IP 地址与源接口的网络地址不匹配。

服务器的路由决定并不取决于数据包传入方式所用的接口,而是取决于实际首选的主要传出网关。某些连接的传入方式和传出方式不同,这就是问题的原因。

这种情况可以通过高级路由(例如基于策略的路由和每个接口的特殊单独路由表/规则)来解决。搜索 iproute2 示例。

也许这些链接可以帮助到你:

https://www.thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System

https://tweenpath.net/multiple-default-gateways-system/

相关内容