一、方式一:

Netplan 已在在 Ubuntu 18.04 系统中用来管理网络,它是一款是一个用于配置 Linux 网络的简单工具。 通过 Netplan ,只需用一个 YAML 文件就可描述每个网络接口需要配置。 Netplan 从 /etc/netplan/*.yaml 读取配置。根据这个配置描述, Netplan 会更新相关网络配置,而无需关心底层的网络管理工具是啥。Netplan 目前支持两种 网络管理工具 :NetworkManager和Systemd-networkd。

参考: https://netplan.io/faq/#use-pre-up-post-up-etc-hook-scripts

https://netplan.io/examples#reaching-a-directly-connected-gateway

https://netplan.io/reference#routing

https://www.digitalocean.com/community/tutorials/how-to-use-iproute2-tools-to-manage-network-configuration-on-a-linux-vps#how-to-configure-network-interfaces-and-addresses

https://www.freedesktop.org/software/systemd/man/systemd-networkd.service.html

在Ubuntu 18.04中修改了IP地址配置程序, Ubuntu和Debian的删除了以前的ifup/ifdown命令和/etc/network/interfaces配置文件, 改为使用/etc/netplan/01-netcfg.yaml和sudo netplay apply命令管理IP地址。

下图是Netplan的工作原理:

ubuntu设置efi system partition ubuntu设置永久路由_配置文件


Netplan 会从 /etc/netplan/*.yaml 读取网络配置,这些配置由管理员、安装人员、云映像实例化或其他操作系统部署编写。在早期启动期间,Netplan 在 /run 中生成后端特定的配置文件,以将设备的控制权移交给特定的网络守护程序。我们只需创建所需网络接口的 YAML 描述以及每个接口应配置为做什么。根据此描述,Netplan 将选择合适的渲染器(renderer)工具生成所有必要的网络配置。DHCP网络配置一般用NetworkManager renderer,因networkd 作为渲染器时不会让网络设备使用 DHCP 自动启动;每个接口都需要在 /etc/netplan 中的文件中指定,networkd 才能使用这些配置生效。

要在 Ubuntu 18.04 服务器上配置静态 IP 地址,需要修改 /etc/netplan/ 目录中的相关 netplan 网络配置文件。该目录下,会发现有一个名为 01-netcfg.yaml 或 50-cloud-init.yaml 的默认 netplan 配置文件,其中包含以下内容,指示 networkd 守护进程通过 DHCP 配置您的网络接口;必须为块的每一行保证正确的字段缩进。换句话说,每行的前缀空格数很重要。否则,可能会收到类似于以下内容的错误消息:Invalid YAML at //etc/netplan/01-netcfg.yaml line 7 column 6: did not find expected key。

ip link set 命令替代了 ifup 和 ifdown。

/etc/netplan/config.yaml/netpaln-*.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:
        eno1:
            addresses: [192.168.1.113/24]
            dhcp4: false
            dhcp6: false
            optional: true
            gateway4: 192.168.1.1  ##默认路由的网关地址
            nameservers:
                addresses: [8.8.8.8,8.8.4.4]
        eno2:
            addresses: [100.100.100.10/24]
            dhcp4: false
            optional: true
        eno5:
            addresses: []
            dhcp4: true
            optional: true
        eno6:
            addresses: [10.0.0.10/24]
            dhcp4: false
            optional: true
            nameservers:
                addresses: [8.8.8.8,8.8.4.4]
    version: 2

现场截图:环境:Ubuntu 18.04 LTS 配置文件:/etc/netplan/01-netcfg.yaml

ubuntu设置efi system partition ubuntu设置永久路由_yaml_02


【路由配置示例】:

eth0:
  [...]
  routes:
  - to: default # could be 0/0 or 0.0.0.0/0 optionally
    via: 10.0.0.1
    metric: 100
    on-link: true
  - to: default # could be ::/0 optionally
    via: cf02:de:ad:be:ef::2
eth1:
  [...]
  routes:  ##路由块定义接口的标准静态路由。至少必须指定 to 和 via。
  - to: default   ##格式:addr/prefixlen 或 addr
    via: 172.134.67.1
    metric: 100
    on-link: true  ##指定路由直连到设备eth1
    table: 76 # Not on the main routing table, does not conflict with the eth0 default route,某些值用于特定的路由表,查看/etc/iproute2/rt_tables确认
    type:... ## 指定:“global”, “link”, or “host”

现场实际:

ubuntu设置efi system partition ubuntu设置永久路由_yaml_03


ubuntu设置efi system partition ubuntu设置永久路由_yaml_04


修改后:

ubuntu设置efi system partition ubuntu设置永久路由_配置文件_05


在应用改变之前,让我们测试一下配置。执行命令:sudo netplan try(它会在应用配置之前验证其是否有效。如果成功,你就会看到配置被接受)确认后执行应用:sudo netplan apply //应用前切记备份,实际验证应用执行后,路由表与之前手动添加的一致。

ubuntu设置efi system partition ubuntu设置永久路由_Ubuntu 18.04_06

删除:ip address del \<address> dev \<interface>.

语法检查:sudo netplan generate   //以 /etc/netplan 配置为管理工具生成配置;

调试命令:$ sudo netplan --debug apply

networkctl :可查看输出网络设备的摘要
networkctl status   //查看系统上每个 IP 地址的状态
netplan apply  //应用yaml中指定渲染器的所有配置,必要时重新启动它们
netplan try     //应用配置并等待用户确认;如果配置使网络损坏或未给出确认,将回滚

ip -s link show eth0   //查看接口统计

//配置文件路径:

/run/netplan/*.yaml
/etc/netplan/*.yaml
/lib/netplan/*.yaml


启停网卡:
ip link set enp3s0 up
ip link set enp3s0 down

重启网络配置:sudo /etc/init.d/networking restart

临时解决: 在启动文件/etc/rc.local里加入路由添加命令

二、方式2

Debian系的网卡配置跟Redhat系很不一样,Redhat是放在/etc/sysconfig/network-scripts目录下面的一大堆文件里面。而Debian系的网卡配置则是存在/etc/network/interfaces这个文件里面,而且不管你有多少块网卡,系统都把配置统统放在这个文件里。

以下是ubuntu的一个网络配置文件示例:

auto lo  ##auto自动配置
iface lo inet loopback  ##lo为一个本地回环(loopback)地址,分别设置了v4和v6两个 loopback;
iface lo inet6 loopback
auto eth0
iface eth0 inet static
      address 192.168.2.1
      network 192.168.2.0
      netmask 255.255.255.0
      broadcast 192.168.2.255
      up route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.2.2 dev eth0  ##接口启用时,添加静态路由
      down route del -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.2.2 dev eth0  ##接口禁用时,删掉路由配置
      up route add -net 192.168.4.0 netmask 255.255.255.0 gw 192.168.2.2 dev eth0
      down route del -net 192.168.4.0 netmask 255.255.255.0 gw 192.168.2.2 dev eth0
iface eth0 inet6 static
      address 2000:2::1
      netmask 64
      up route -A inet6 add 2000:3::/64 gw 2000:2::2
      up route -A inet6 add 2000:4::/64 gw 2000:2::2
      down route -A inet6 del 2000:3::/64 gw 2000:2::2
      down route -A inet6 del 2000:4::/64 gw 2000:2::2
auto eth1
iface eth1 inet dhcp

2)路由转发:

编辑:/etc/sysctl.conf,修改:

net.ipv4.ip_forward=1
 net.ipv6.default.ip_forward=1

生效执行:sysctl -p /etc/sysctl.conf

三、附录:手动配置静态路由

添加到主机的路由

# route add -host 192.168.1.123 dev eth0

# route add -host 192.168.1.123 gw 192.168.1.1

添加到网络的路由

# route add -net 192.168.1.123 netmask 255.255.255.0 eth0

# route add -net 192.168.1.123 netmask 255.255.255.0 gw 192.168.1.1

# route add -net 192.168.1.123 netmask 255.255.255.0 gw 192.168.1.1 eth1

# route add -net 192.168.1.0/24 eth1

添加默认网关

# route add default gw 192.168.1.1

删除路由

# route del -host 192.168.1.11 dev eth0

# route del -net 192.168.1.123 netmask 255.255.255.0

四、附录2:Ubuntu 20.04添加永久路由

vim /etc/netplan/network_manager.yaml

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    eth0:
      dhcp4: true
      dhcp6: true
    eth1:
      dhcp4: true
      dhcp6: true
   eth2:
      addresses:
      - 172.16.18.3/24
      gataway4: 172.16.18.254
      routes: 
        - to: 10.0.100.0/24
          via: 172.16.18.254
      nameservers:
        addresses: []
        search: []

完成后执行:netplan try ,检查配置文件正确性,不要按enter键,随后执行netplan apply,如果未生效,一般是当前网络受interface影响,可删除或重命令/etc/network/interface,然后再netpaln apply

ubuntu设置efi system partition ubuntu设置永久路由_Ubuntu 18.04_07

ubuntu设置efi system partition ubuntu设置永久路由_Ubuntu 18.04_08


ubuntu设置efi system partition ubuntu设置永久路由_netplan_09

如果出现网卡ip信息未显示的情况,执行:sudo dhclient -v

当然我们也可以按照示例2:网卡配置静态地址

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens33:
      dhcp4: no
      addresses: [192.168.126.128/24]
      gateway4: 192.168.72.2
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]