防止 netplan 创建到 0.0.0.0/0 的默认路由

防止 netplan 创建到 0.0.0.0/0 的默认路由

我运行的是带有 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

看来使用网络作为渲染器不会为您创建默认路由。

相关内容