Netplan初体验之网桥配置

相关背景

NetworkManager和Networkd

NetworkManager是一个标准的Linux网络配置和管理工具。NetworkManager通常被用来管理各种网络设备、配置网络接口、DHCP和静态IP等服务,它功能强大,不但支持传统的以太网有线设备配置,对无线适配器也有很好的支持。因此,NetworkManager支持各种环境下的网络管理,如服务器、桌面端甚至移动端。

Networkd全称systemd-networkd,是集成在systemd中的一个Linux网络配置和管理工具。与NetworkManager不同的是,networkd通常用来管理固定的网络配置,如服务器场景,对网卡的每个接口单独进行静态配置,且这些配置在很长一段时间内不进行改变,除非网卡故障或业务需求发生变化。

​ 总结来说,NetworkManager功能更强大,配置更复杂,对Linux下各DE的整合适配也很不错,适用于网络配置多变的环境中使用(例如经常在有线和无线网络中切换)。而networkd则适用于简单、固定的网络配置,通常用于服务器环境。

Netplan介绍

Netplan是一个抽象的网络配置渲染器(The network configuration abstraction renderer),Network configuration renderer这个概念应该是由netplan提出并使用的,个人理解就是对网络配置和管理工具的一种形式化命名,后文统一使用network renderer或renderer简写。

​ 在netplan的文档描述中,NetworkManager和networkd都是一种network renderer实现,而netplan则是支持这些实现的、更高一层的抽象renderer。Netplan目前支持NetworkManager和networkd两种renderer实现(也称作后端实现),通过对netplan进行配置,可以生成对应后端的配置文件,从而使用指定的renderer完成对系统网络的管理,其工作流程如下图所示。

how-does-netplan-work

​ 使用netplan的好处在于不需要了解具体renderer实现的配置写法,只需要提供一份对网络设备的“描述”配置,即可自动生成具体renderer的配置文件从而完成网络的配置。本文作为笔者初次上手netplan的体验文章,尝试用netplan配置网桥来感受其强大功能。

使用Netplan配置网桥

​ 网桥是用来连接两个网络的设备,在Linux中,网桥的一大作用是将VM和局域网中的其余设备连接起来,使host以外的主机也可以直接访问VM,这也是本文配置要实现的目标。通常实现这个需求要经历以下几个步骤:

  1. 选择一个物理网络接口,禁用其DHCP配置;
  2. 创建一个虚拟网桥,并为该虚拟网桥开启DHCP;
  3. 将目标物理网络接口加入到该虚拟网桥,并启动网桥。

​ Netplan使用YAML作为配置语法,其配置文件位于/etc/netplan目录下,和多数Linux管理软件一样,该目录下的配置文件可以存在多份,netplan启动时会按字典序依次解析并应用这些配置。创建一个配置文件01-network-manager-config.yaml,写入以下内容:

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    onboard-2.5g:
      match:
        macaddress: 66:47:c3:56:77:25
      dhcp4: false
      dhcp6: false
    e810-xxvda2-25g-port0:
      match:
        macaddress: b9:46:91:da:b2:5c
      dhcp4: true
      dhcp6: true
    e810-xxvda2-25g-port1:
      match:
        macaddress: b9:46:91:da:b2:5d
      dhcp4: true
      dhcp6: true
  bridges:
    br0:
      dhcp4: true
      dhcp6: true
      interfaces:
        - onboard-2.5g

​ 可以看到netplan的配置文件简洁又直观,上述配置中使用NetworkManager作为renderer,创建一个虚拟网桥br0,并将板载的2.5G网络接口作为加入br0的物理设备,注意加入网桥的物理设备应禁用DHCP,网桥应开启DHCP。剩下的两个接口来自e810-xxvda2这张Intel网卡,默认开启DHCP配置。值得注意的是配置中使用MAC地址作为匹配网络接口的标识,因为近期在做PCIE设备相关实验,需要将设备经常插拔、更换PCIE槽,因此根据网络接口名称(例如enp13s0f0np0这种)匹配不保证能匹配到设备,因为每次PCIE设备发生变化系统都会重新生成网络接口名称,使用MAC匹配则可以确保唯一性。至于网络接口名称,可以随意命名,例如这里就命名成可读性强的名称:onboard-2.5ge810-xxvda2-25g-port0等,一目了然。引用的时候按照名称引用即可,如br0网桥配置中interfaces列表引用的是onboard-2.5g这个名称。

​ 配置写完了,使用sudo netplan apply立即应用,但实测下来该条命令不保证能使配置立即生效,如果配置不生效或遇到不确定的行为,稳妥起见请重启机器,笔者重启后配置才完全生效。使用ip a查看所有的网络接口,这里只截取与配置相关的结果:

2: enp12s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 66:47:c3:56:77:25 brd ff:ff:ff:ff:ff:ff
3: enp13s0f0np0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether b9:46:91:da:b2:5c brd ff:ff:ff:ff:ff:ff
    inet 10.77.55.3/24 brd 10.77.55.255 scope global noprefixroute enp13s0f0np0
       valid_lft forever preferred_lft forever
    inet6 240e:39b:f79:e50::812/128 scope global dynamic noprefixroute 
       valid_lft 41824sec preferred_lft 41824sec
    inet6 fdae:7c1c:4da5::812/128 scope global dynamic noprefixroute 
       valid_lft 41824sec preferred_lft 41824sec
    inet6 fdae:7c1c:4da5:0:b696:91ff:fedb:a25c/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 240e:39b:f79:e50:b696:91ff:fedb:a25c/64 scope global dynamic noprefixroute 
       valid_lft 227516sec preferred_lft 141116sec
    inet6 fe80::b696:91ff:fedb:a25c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: enp13s0f1np1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether b9:46:91:da:b2:5d brd ff:ff:ff:ff:ff:ff
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 4e:54:51:d4:55:76 brd ff:ff:ff:ff:ff:ff
    inet 10.77.55.112/24 brd 10.77.55.255 scope global dynamic noprefixroute br0
       valid_lft 41857sec preferred_lft 41857sec
    inet6 240e:39b:f79:e50::e54/128 scope global dynamic noprefixroute 
       valid_lft 41856sec preferred_lft 41856sec
    inet6 fdae:7c1c:4da5::e54/128 scope global dynamic noprefixroute 
       valid_lft 41856sec preferred_lft 41856sec
    inet6 fdae:7c1c:4da5:0:4c54:51ff:fed4:5576/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 240e:39b:f79:e50:4c54:51ff:fed4:5576/64 scope global dynamic noprefixroute 
       valid_lft 227516sec preferred_lft 141116sec
    inet6 fe80::4c54:51ff:fed4:5576/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

​ 可以看到配置已经生效了,网桥br0被成功创建,enp12s0这个物理网络接口成功加入网桥中(从输出中的master br0即可看出),DHCP也如预期一般工作。如此一来,我们便使用netplan管理好了3个物理网络接口(实际上的renderer是NetworkManager),并成功创建了一个网桥。后续KVM使用这个网桥为VM搭建桥接网络等操作就不再赘述了,操作比较简单,互联网上也有不少相关文章。

写在后面

​ Netplan的强大之处可不止在配置一个小小的简单网桥,它还可以配置支持VLAN划分的复杂网桥,或是配置DNS服务器、网关、路由及VPN等,下图是netplan官方example一览:

netplan-examples

​ 如今越来越多的发行版正使用netplan作为顶层网络配置工具,学会使用netplan无疑能够为Linux系统管理员的工作带来便利,本文内容只是浅尝辄止,更多玩法还请阅读netplan的文档,这里推荐几篇个人认为对于快速上手有帮助的文档:

posted @ 2024-06-11 14:21  窝法氦镁烷  阅读(492)  评论(0)    收藏  举报