我运行的是带有 2 个以太网网卡的 Ubuntu 18.04。在两个网卡上我都使用 DHCP。如何防止 netplan 在两台设备上创建到 0.0.0.0/0 的默认路由?我希望一个 NIC 路由到 0.0.0.0/0,另一个 NIC 通过网关路由到特定的 /24 子网。我知道我可以在 netplan 配置中添加一条路由,但它始终会创建到 0.0.0.0/0 的默认路由。
答案1
根据这个答案, 它应该可以使用dhcp4-overrides
,但是从 18.04 开始 Ubuntu 不支持这一点。我的解决方法是创建一个挂钩脚本来/etc/networkd-dispatcher/routable.d/
删除默认路由:
#!/bin/sh
# Only remove the default route on the second interface, e.g. eth1
[ "$IFACE" != eth1 ] && exit 0
# delete the default route for this interface
ip route del default dev eth1
确保文件所有者和组是root
并且它是可执行的。
您可以在这里找到有关网络调度程序的更多信息:https://gitlab.com/craftyguy/networkd-dispatcher
答案2
为了更好地控制您的 NIC,请在两个适配器上保持静态或在至少一个适配器。
通过在各自的 DHCP 服务器中为其各自的 MAC 地址保留两个 IP,可以在该特定范围内轻松完成此操作,然后您将不需要DHCP 的任何限制 并手动配置所有或部分。
(例如,如果您的公司政策要求您在使用静态时使用完全不同的 IP 范围,您仍然可以使用上述混合技术)
答案3
super@gitlab:~$ lsb_release -dc
Description: Ubuntu 18.04.4 LTS
Codename: bionic
super@gitlab:~$ cat /etc/netplan/50-cloud-init.yaml
# 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:
ens18:
addresses:
- 172.16.104.177/24
dhcp4: false
gateway4: 172.16.104.1
nameservers:
addresses:
- 172.16.104.1
search: []
ens19:
dhcp4: true
dhcp4-overrides:
use-routes: false
routes:
- to: 10.0.0.0/16
via: 10.0.90.1
version: 2
super@gitlab:~$ ip r
default via 172.16.104.1 dev ens18 proto static
10.0.0.0/16 via 10.0.90.1 dev ens19 proto static
10.0.90.0/24 dev ens19 proto kernel scope link src 10.0.90.21
172.16.104.0/24 dev ens18 proto kernel scope link src 172.16.104.177
super@gitlab:~$
答案4
dhcp4-overrides
在 ubuntu 20.04 上对我不起作用。
尝试为不同的接口创建单独的文件,例如,
对于您想要添加默认路由的第一个接口,假设是 eth0:
/etc/netplan/00-eth0.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: true
然后,对于您想要避免默认路由 eth1 的另一个,创建另一个文件:
/etc/netplan/01-eth1.yaml
network:
version: 2
renderer: networkd
ethernets:
eth1:
dhcp4: true
然后运行sudo netplan apply
并检查你的路线ip r
看来使用网络作为渲染器不会为您创建默认路由。