我有一台小型路由器,正在 Ubuntu 18.04 桌面上开发,当我在未连接以太网的情况下启动它时,Netplan 似乎没有分配固定 IP(在 LAN 端)。WAN 端与 DHCP 连接。isc-dhcp-server 运行在 LAN eth0 接口上。
问题:isc-dhcp-server 在启动时崩溃,因为 eth0 接口上没有 IP 地址。
如果我手动思考,将设备连接到 eth0,那么一切都会正常。因此,当有东西连接到 eth0 时,静态 IP 就会起作用。
即使没有插入,如何将 192.168.10.1 分配给 eth0(此系统上为 enp2s0)?
我有一个 .YAML 文件,如下所示:
# Let NetworkManager manage all devices on this system
network:
ethernets:
enp2s0:
dhcp4: no
addresses:
- 192.168.10.1/24
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1
search: []
enp3s0:
dhcp4: yes
version: 2
renderer: NetworkManager
或者 - 是否有一种简单的方法可以根据接口连接的触发器启动(或重新启动)isc-dhcp-server?
下面是一个非常相似的问题,但 OP 没有关闭或验证它...而且我还没有成功找到实现此目的的方法。任何帮助都值得感激。
更新于 2019 年 8 月 3 日:如上所述,关于重新启动服务器,我发现可以在 /sys/class/net/enp2s0/carrier 可靠地找到电缆状态 - 断开连接时该文件中的值为 0,连接时为 1。
因此,编写一个脚本来测试该值似乎非常合乎逻辑 - 如果该值为零,则不执行任何操作;如果该值从 0 变为 1,则执行命令;最后,如果该值保持为 1 或从 1 变为 0,则不执行任何操作。我该如何编写 bash 脚本来实现这一点?
更新时间:2019/8/14:按照下面的答案找到了解决方案 - 但请确保您已安装 ifupdown - 我的系统没有安装。我没有继续使用脚本的想法,因为获取静态 IP 的解决方案似乎很可靠。
答案1
对于 networkd,请尝试这个 .yaml 文件...
network:
version: 2
renderer: networkd
ethernets:
enp2s0:
addresses:
- [192.168.10.1/24]
gateway4:
- 192.168.xx.xx
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1
search: []
enp3s0:
dhcp4: yes
sudo netplan generate
sudo netplan apply
reboot
对于 NetworkManager,使用此 .yaml 文件...
network:
version: 2
renderer: NetworkManager
sudo netplan generate
sudo netplan apply
然后编辑/etc/network/interfaces
成类似于此的内容......
auto lo
iface lo inet loopback
auto enp2s0
iface enp2s0 inet static
address 192.168.10.1
netmask 255.255.255.0
gateway 192.168.xx.xx
dns-nameservers 8.8.8.8 1.1.1.1
auto enp3s0
iface enp3s0 inet dhcp
reboot
更新#1:
决定使用 NetworkManager
已安装
ifupdown