Ubuntu 18.04 网卡有两个IP地址

Ubuntu 18.04 网卡有两个IP地址

我想了解如何设置具有两个 IP 地址的网卡

我尝试了如下方法,但是现在

网络:
  版本:2
  渲染器:NetworkManager
  以太网:
     enp0s3:
        dhcp4:否
        dhcp6:否
        地址:[ 192.168.0.2/32, 172.16.0.2/16 ]
        网关4:192.168.0.1
        网关4:172.16.0.1
        名称服务器:
              搜索:[usp.br]
              地址:[ 192.168.0.100, 192.168.0.102 ]
        可选: true

每个 IP 都有自己的网关....

你能帮助我怎么做吗?

谢谢

答案1

为接口设置多个网关通常会带来问题。将数据包路由到一个网关,然后再路由到另一个网关可能会导致网络混乱,因此,除非您真的知道自己在做什么,否则最好使用单个默认网关。

简而言之,你通常只需要一个

gateway4: xx.xx.xx.xx

在您的配置中。

如果必须为接口的各个 IP 设置多条路由,则可以通过编写静态路由(并根据地址的优先级设置度量)来精确控制它们的行为方式,如下所示:

network:
  version: 2
  renderer: NetworkManager
  ethernets:
     enp0s3:
        dhcp4: no
        dhcp6: no
        addresses: [ 192.168.0.2/32, 172.16.0.2/16 ]
        nameservers:
              search: [usp.br]
              addresses: [ 192.168.0.100, 192.168.0.102 ]
        routes:
          - to: 0.0.0.0/0
            via: 192.168.0.1
          - to: 0.0.0.0/0
            via: 172.168.0.1

你也不需要可选: true:只有当接口启动速度不够快时,它才会停止延迟启动,但考虑到您指定的静态地址,这应该不是问题。添加可选: true也有不阻止某些目标的副作用systemd,这可能意味着如果这些服务需要网络,服务器将不会立即启动所有应该启动的服务。

答案2

有点晚了,但是... 有 2 个默认网关没什么意义。想想看:如果我 ping 8.8.8.8,它应该使用哪个网关?

您可以设置优先级,如果一条线路较慢/更昂贵/仅用于备份/...如果两条线路具有相同的优先级,我怀疑它会尝试进行循环。

答案3

我最近遇到了完全相同的问题。我在这里看到了答案(来自 Mathieu Trudel-Lapierre),但它并没有真正解决问题。netplan 将发出一个错误,即一个路由表有两个默认路由。这样做是正确的:

  1. 800要在路由表中添加表:

    sudo vi /etc/iproute2/rt_tables
    

    在最后添加一行:

    800 second_ip
    
  2. 你的 netplan 配置计划应该是:

    network:
      version: 2
      renderer: NetworkManager
      ethernets:
         enp0s3:
            dhcp4: no
            dhcp6: no
            addresses: [ 192.168.0.2/32, 172.16.0.2/16 ]
            nameservers:
                  search: [usp.br]
                  addresses: [ 192.168.0.100, 192.168.0.102 ]
            routes:
                - to: 0.0.0.0/0
                  via: 192.168.0.1
                - to: 0.0.0.0/0
                  via: 172.16.0.1
                  table: 800
            routing-policy:
                - from: 172.16.0.2
                  table: 800
    

    这里需要注意的是,第一个网关(192.168.0.1)应该进入主表(即,我们没有指定routes/table:),第二个网关进入800表(routes/table: 800)。我们必须routing-policy对第二个 IP 地址(172.16.0.2)使用 —— 有必要的是,如果数据包来自此 IP 地址,它们将准确地进入800表并被发送到第二个网关(172.16.0.1)。

    如果您只是运行ping 8.8.8.8,那么服务器需要了解从哪个 IP 地址向其发送数据包。在这种情况下,它将在表中搜索默认路由main并找到网关192.168.0.1,并且它将了解默认情况下从哪个 IP 地址发送数据包 - 来自192.168.0.2。重要的是,如果表中没有default路由main(例如,如果我在另一个表中定义了第一个默认路由,例如801) - 您将无法从服务器发起数据包(例如ping 8.8.8.8) - 服务器将只能响应从外部发送到其 IP 地址的数据包。

相关内容