我有两个 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
只需增加后续接口的度量就可以了。
答案3
要停止 dhcp 接口netplan
设置默认路由,只需use-routes
设置dhcp4-overrides
为false
。
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]