如何使用 Netplan 分配静态 IP 以避免 isc-dhcp-server 崩溃

如何使用 Netplan 分配静态 IP 以避免 isc-dhcp-server 崩溃

我有一台小型路由器,正在 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

相关内容