Когда я подключаю USB-к -Адаптер Ethernet (который использовался ранее), я получаю MAC-адрес, а затем, если что-то подключено на другом конце, я также получаю IP-адрес (192.168.1.1 в моем случае, настроен как static в NetworkManager). На другом конце есть различные инструменты, которые ждут, пока DHCP-сервер, работающий на этом ПК, не предоставит им IP.
Проблема в том, что DHCP-сервер отказывается запускаться, если подсеть не найдена, поэтому он не может быть запущен до установления соединения. работает. Как мне выполнить systemctl restart isc-dhcp-server.service
после того, как я получу IP 192.168.1.1 от NetworkManager?
Я хотя t использования правила udev с ATTR {address} == "f0: 1f: af: 3d: 6c: e7" RUN + = "systemctl restart isc-dhcp-server.service"
, но оно выполняется до IP назначен. Могу ли я использовать опцию udev или мне нужно использовать другой метод через systemd, NetworkManager или что-то еще?
Наконец-то я потратил некоторое время на эту проблему и решил ее с помощью сценария, который я назвал restart-dhcpd.sh
и поместил в /etc/NetworkManager/dispatcher.d/
. (Примечание: после этого может потребоваться systemctl перезапустить 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
UDEV, запускающий службу systemd, — это способ сделать это.
Вы можете сопоставить свой usb-адаптер по идентификатору usb, слишком поздно, когда вы можете увидеть MAC-адрес.
в этом посте есть инструкции
https://unix.stackexchange.com/questions/229987/udev-rule-to-match-any-usb-storage-device
В вашей системе настроен systemd .
Таким образом, одним из решений является добавление зависимости между isc-dhcp-server
и USB-устройством.
systemctl | grep -i sys-subsystem-net-devices.*6c.*e7
ps 6c и e7 — это последние 2 байта вашего Mac с вашего USB-устройства
у вас должно быть что-то вроде
sys-subsystem-net-devices-enxf01faf3d6ce7.device
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
reboot
проверить состояние и конфигурацию isc-dhcp-server
, выполнив эти команды
systemctl show --property=After isc-dhcp-server.service
systemctl status isc-dhcp-server.service