在Ubuntu或其他Linux系统中,您使用ip
命令和sysctl
命令配置的网络和内核参数通常是临时的,这意味着在系统重启后这些配置会丢失。为了将这些配置持久化,您需要采取一些额外的步骤。
对于ip
命令配置的网络接口和路由,您可以将这些配置添加到网络管理工具的配置文件中,或者创建一个启动脚本来在系统启动时重新应用这些配置。然而,对于VRF(Virtual Routing and Forwarding)这样的高级配置,通常需要特定的网络管理工具或自定义脚本来处理。
以下是一些可能的步骤来持久化您的配置:
-
使用Netplan(如果适用):
Netplan是Ubuntu 18.04及更高版本中的网络配置工具。但是,Netplan原生不支持VRF配置。因此,您可能需要编写一个自定义的启动脚本来设置VRF。 -
编写自定义启动脚本:
您可以创建一个脚本,该脚本使用ip
命令来设置VRF和其他网络配置,并将该脚本添加到系统的启动项中。例如,您可以将脚本放在/etc/network/if-up.d/
目录中(如果此目录存在且被系统使用),或者创建一个systemd服务来在启动时运行该脚本。脚本示例(假设保存为
/etc/network/if-up.d/vrf-setup-script.sh
):#!/bin/bash ip link add mgmt type vrf table 2 ip link set dev mgmt up ip link set ens37 vrf mgmt route add default gw 192.168.8.1 dev mgmt
确保脚本具有执行权限:
sudo chmod +x /etc/network/if-up.d/vrf-setup-script.sh
但是,请注意,这种方法可能不适用于所有情况,因为
/etc/network/if-up.d/
目录和其中的脚本可能在某些Ubuntu版本或网络配置中不被使用。 -
使用systemd服务:
创建一个systemd服务来在启动时运行配置脚本可能是一个更可靠的方法。您可以创建一个systemd单元文件,该文件指定了一个在启动时运行的脚本。单元文件示例(假设保存为
/etc/systemd/system/vrf-setup.service
):[Unit] Description=Setup VRF After=network.target[Service] Type=oneshot ExecStart=/etc/network/if-up.d/vrf-setup-script.sh RemainAfterExit=true[Install] WantedBy=multi-user.target
然后,启用并启动该服务:
sudo systemctl enable vrf-setup.service sudo systemctl start vrf-setup.service
- 持久化
sysctl
设置:
对于sysctl
设置,您可以将它们添加到/etc/sysctl.conf
文件或/etc/sysctl.d/
目录中的某个文件中。例如:echo "net.ipv4.tcp_l3mdev_accept=1" | sudo tee -a /etc/sysctl.conf echo "net.ipv4.udp_l3mdev_accept=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
创建VRF
ip link add yewu type vrf table 1
ip link add mgmt type vrf table 2
启用VRF
ip link set dev yewu up
ip link set dev mgmt up##简要查看采用-br参数
# ip -br link show type vrf
##查看所有vrf,-d参数可以显示ID号
# ip link show type vrf将物理接口绑定VRF
ip link set ens33 vrf yewu
ip link set ens37 vrf mgmt
将物理接口移除VRF
ip link set dev ens33 nomaster##显示被分配给vrf的设备
$ ip link show vrf yewu查看
ip neigh show vrf yewu
ip route show table 1route add default gw 192.168.162.2 dev yewu
route add default gw 192.168.8.1 dev mgmtip route get vrf yewu 223.5.5.5
ping -I yewu -4 www.baidu.comsysctl -w net.ipv4.tcp_l3mdev_accept=1
sysctl -w net.ipv4.udp_l3mdev_accept=1sysctl net.ipv4.raw_l3mdev_accept
sysctl net.ipv4.tcp_l3mdev_accept
sysctl net.ipv4.udp_l3mdev_accept