连接 USB 转以太网适配器后执行的操作

连接 USB 转以太网适配器后执行的操作

当我连接 USB 转以太网适配器(以前使用过)时,我会收到一个 MAC 地址,然后如果另一端连接了其他设备,我也会收到一个 IP 地址(在我的情况下是 192.168.1.1,在 NetworkManager 中配置为静态)。另一端有各种仪器等待该 PC 上运行的 DHCP 服务器为其分配 IP。

问题是,如果找不到子网,DHCP 服务器将拒绝启动,因此在连接建立之前无法启动它。systemctl restart isc-dhcp-server.service从 NetworkManager 收到 IP 192.168.1.1 后我该怎么办?

我考虑过使用 udev 规则,ATTR{address}=="f0:1f:af:3d:6c:e7" RUN+="systemctl restart isc-dhcp-server.service"但它在分配 IP 之前就运行了。有没有我可以使用 udev 选项,或者我必须通过 systemd 或 NetworkManager 或其他方法使用其他方法?

答案1

UDEV 触发 systemd 服务是实现此目的的方法。

您可以通过 USB ID 匹配您的 USB 适配器,当您看到 MAC 地址时就太晚了。

这篇文章有说明

https://unix.stackexchange.com/questions/229987/udev-rule-to-match-any-usb-storage-device

答案2

您的系统已配置 systemd 。

isc-dhcp-server因此,一个解决方案是在和 USB 设备之间添加依赖关系。

  1. 识别systemd系统下设备的名称
systemctl | grep -i sys-subsystem-net-devices.*6c.*e7

附言6c&e7你的 mac 的最后 2 个字节来自你的 usb 设备

你一定有类似的东西

 sys-subsystem-net-devices-enxf01faf3d6ce7.device
  1. 修改单元文件isc-dhcp-server
export EDITOR=emacs # <= change to what you want 
systemctl edit isc-dhcp-server.service

并添加以下行

[Unit]
After=sys-subsystem-net-devices-enxf01faf3d6ce7.device
Wants=sys-subsystem-net-devices-enxf01faf3d6ce7.device
  1. 重启

  2. isc-dhcp-server通过运行这些命令来检查状态和配置

systemctl show --property=After isc-dhcp-server.service 

systemctl status isc-dhcp-server.service

答案3

restart-dhcpd.sh最后花了一些时间解决这个问题,并用我命名并放置在的脚本解决了它/etc/NetworkManager/dispatcher.d/。(注意:之后您可能需要systemctl restart network-manager.service和/或systemctl daemon-reload):

#! /bin/bash
IF=$1
STATUS=$2
case "$2" in
    dhcp4-change|up)
            logger -s "NM Script $STATUS $IF triggered"
            if [ "$1" = "enx6cf0496c6947" ]; then
                    /bin/systemctl restart isc-dhcp-server.service
            fi
    ;;
esac

相关内容