我有一台带有 2 个 eth 端口的 ubuntu 18.04 服务器。eth1 有一个静态 ip,然后 eth2 可以有 3 种不同的配置:dhcp-static-bridge(带有 eth1)。我编写了一个脚本,该脚本在每次启动时启动并检查 USB 端口,最终替换 /etc/netplan/50-cloud-init.yaml 以恢复我的默认配置。重新启动时,50-cloud-init.yaml 实际上已经更改,但我的 eth2 直到第二次重新启动才获取 ip 地址。仅当上一个配置处于桥接模式时才会发生这种情况,当我的 eth2 的上一个配置是静态时,eth2 会在第一次重新启动时获取一个地址。这是我从 crontab 启动的脚本。
#!/bin/bash
source $HOME/.bash_profile
echo "Mount usb..">>/var/log/example/reset.log
sudo mount -t vfat /dev/sdb1 /media/USB
DIR=/media/USB
FILE=$DIR/__EXAMPLE.reset
if test -f "$FILE"; then
echo "$FILE exists." >> /var/log/example/reset.log
cp $FILE /etc/netplan/50-cloud-init.yaml
#/usr/sbin/netplan apply
ip link set enp1s0 up
ip link set enp2s0 up
ip link set br0 down
/sbin/brctl delbr br0
/usr/sbin/netplan
redis-cli -n 1 set __EXAMPLE.lan_config dhcp
rm /opt/example/example_web_config/machine_configs.json
echo "{\"machines\":[]}" >> /opt/example/example_web_config/machine_configs.json
fi
这是我的 USB 默认配置
network:
ethernets:
enp1s0:
dhcp4: no
optional: true
addresses: [10.0.0.10/24]
gateway4: 10.0.0.1
nameservers:
addresses: [8.8.8.8,8.8.4.4]
enp2s0:
dhcp4: yes
optional: true
version: 2