如何使用 netplan 设置默认路由,Ubuntu 18.04 服务器,2 个网卡

如何使用 netplan 设置默认路由,Ubuntu 18.04 服务器,2 个网卡

我有两个 NIC,均通过 DHCP 进行控制。一个有公共 IP,另一个有私有 IP。

两个接口都在 DHCP 中保留了静态 IP,并且两个接口都获得了正确的 IP,但是有时重新启动服务器时我无法从公共网络访问,因为默认路由来自私有 NIC。

我如何使用 netplan 永久设置它?

公网卡 ens18(IP:213.133.xxx.xxx) 私网卡 ens19(IP:10.10.10.xxx)

我的 netplan 配置是:

network:
  version: 2
  renderer: networkd
  ethernets:
    ens18:
      dhcp4: yes
      dhcp6: no
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]
  ethernets:
    ens19:
      dhcp4: yes
      dhcp6: no

答案1

问题是 networkd 将启动两个网络,并且两个网络都将设置默认网关,并且两个网络都将采用相同的度量。

Netplan 目前不允许您跳过在一个接口上设置路由,但您可以单独配置 networkd 来告诉它执行此操作,通过基于 netplan 已经生成的内容进行配置。

我复制了下面的命令。这里我假设 ens19 是您不想为其设置默认网关的“辅助”接口——请注意,要成功执行此操作,在使用新接口重新启动之前也需要执行此操作(或者您可以复制部分配置,省略 MACAddress= 行等,以便它足够通用,可以匹配新接口)。

sudo cp /run/systemd/network/10-netplan-ens19.network /etc/systemd/network
sudo vi /etc/systemd/network/10-netplan-ens19.network

然后在[DHCP]下添加:

UseRoutes=false            # if you don't want to apply any routes from DHCP

RouteMetric=200        # any number above 100 if you want the routes applied, but that they are less preferred.

如果您还没有该文件(即您尚未连接接口),那么您可以复制为 DHCP 设置的另一个接口的内容,并删除 MACAddress=。

一般来说,该文件看起来应该是这样的:

[Match]
Name=interfacename

[Network]
DHCP=ipv4

[DHCP]
UseMTU=true
RouteMetric=200    # or UseRoutes=false, as you prefer.

答案2

对于静态接口,只需跳过gateway4(或gateway6)配置选项,netplan 就不会为该接口创建默认路由。然后,如果您需要使用routes元素(字典数组)进行额外路由

对于 DHCP 接口你可以执行以下操作:

dhcp4-overrides:
    route-metric: 100

只需增加后续接口的度量就可以了。

(看:https://netplan.io/examples

答案3

要停止 dhcp 接口netplan设置默认路由,只需use-routes设置dhcp4-overridesfalse

eth2:
    dhcp4: true
    dhcp4-overrides:
        use-routes: false

另外,最好不要/etc/netplan/50-cloud-init.yaml直接编辑,而是:

  • 将源更改为/etc/cloud/cloud.cfg.d/50-curtin-networking.cfg
  • 运行cloud-init clean -r重新启动。(这会将云配置中的更改传播到netplan配置)

答案4

我安装服务器 Ubuntu Server 18.04.1 LTS

$ uname -a
Linux srv02 4.15.0-34-generic #37-Ubuntu SMP Mon Aug 27 15:21:48 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        eth0:
            addresses: []
            dhcp4: true
            dhcp6: false
            nameservers:
                addresses:
                - 10.99.0.1
                search: []
    version: 2

需要换IP

$ sudo nano /etc/netplan/50-cloud-init.yaml

network:
    ethernets:
        eth0:
            addresses: [10.99.0.6/23]
            gateway4: 10.99.0.5
            dhcp4: false
            dhcp6: false
            nameservers:
                addresses:
                - 10.99.0.5
                search: []
    version: 2

  $ sudo netplan apply
  Invalid YAML at //etc/netplan/50-cloud-init.yaml line 9 column 0: found character that cannot start any token 9 column - addresses: [10.99.0.6/23]

相关内容