一、方式一:
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.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的工作原理:
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
【路由配置示例】:
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”
现场实际:
修改后:
在应用改变之前,让我们测试一下配置。执行命令:sudo netplan try(它会在应用配置之前验证其是否有效。如果成功,你就会看到配置被接受)确认后执行应用:sudo netplan apply //应用前切记备份,实际验证应用执行后,路由表与之前手动添加的一致。
删除: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
如果出现网卡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]