isc-dhcp-server дает сбой, если интерфейс не подключен при перезагрузке

isc-dhcp-server дает сбой, если интерфейс не подключен при перезагрузке

В Ubuntu 18.04 на моем шлюзовом сервере я установил и настроил isc-dhcp-server, но он не запускается (т.е. не запускается), если после перезагрузки к enp2s0 ничего не подключено.

Обратите внимание, что там написано: "Не настроено на прослушивание каких-либо интерфейсов!"

$ service isc-dhcp-server status
● isc-dhcp-server.service - ISC DHCP IPv4 server
   Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2020-01-18 19:05:34 GMT; 1s ago
     Docs: man:dhcpd(8)
  Process: 3475 ExecStart=/bin/sh -ec      CONFIG_FILE=/etc/dhcp/dhcpd.conf;      if [ -f /etc/ltsp/dhcpd.conf ]; then CONFIG_FILE=/etc/ltsp/dhcpd.conf; fi;      [ -e /var/lib/dhcp/dhcpd.leases ] || touch /v
 Main PID: 3475 (code=exited, status=1/FAILURE)

Jan 18 19:05:34 user-Default-string dhcpd[3475]:
Jan 18 19:05:34 user-Default-string dhcpd[3475]: Not configured to listen on any interfaces!
Jan 18 19:05:34 user-Default-string dhcpd[3475]:
Jan 18 19:05:34 user-Default-string dhcpd[3475]: If you think you have received this message due to a bug rather
Jan 18 19:05:34 user-Default-string dhcpd[3475]: than a configuration issue please read the section on submitting
Jan 18 19:05:34 user-Default-string dhcpd[3475]: bugs on either our web page at www.isc.org or in the README file
Jan 18 19:05:34 user-Default-string dhcpd[3475]: before submitting a bug.  These pages explain the proper
Jan 18 19:05:34 user-Default-string dhcpd[3475]: process and the information we find helpful for debugging..
Jan 18 19:05:34 user-Default-string dhcpd[3475]:
Jan 18 19:05:34 user-Default-string dhcpd[3475]: exiting.

Мой сервер шлюза имеет два порта ethernet, enp1s0 и enp2s0. Я использую enp1s0 для доступа в интернет через маршрутизатор, а enp2s0 просто для обслуживания веб-приложения для ноутбуков, подключенных к ethernet. enp2s0 — это тот, для которого DHCP-сервер назначает IP-адреса (для ноутбуков, которым нужно веб-приложение). Яхотетьenp1s0 для получения случайного IP-адреса от подключенного к Интернету маршрутизатора в подсети 192.168.1.0, чтобы этот интерфейс не управлялся isc-dhcp-server, а только enp2s0.

Вот «ip route» без каких-либо подключений к enp2s0, если это может помочь...

$ ip route
default via 192.168.1.254 dev enp1s0 proto dhcp metric 100
169.254.0.0/16 dev enp1s0 scope link metric 1000
192.168.1.0/24 dev enp1s0 proto kernel scope link src 192.168.1.76 metric 100

Вот моя настройка dhcpd.conf:

default-lease-time 600;
max-lease-time 7200;

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# This is a very basic subnet declaration.    
subnet 192.168.2.0 netmask 255.255.255.0 {
  range 192.168.2.200 192.168.2.250;
  # option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
  option broadcast-address 192.168.2.255;
}

Вот моя настройка isc-dhcp-server:

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="enp2s0"
INTERFACESv6=""

Одним из решений является перезапуск isc-dhcp-server после подключения ноутбука к enp2s0, но я не хочу делать это после каждой перезагрузки или каждый раз, когда кто-то подключает ноутбук к enp2s0. DHCP-сервер работает после перезапуска службы...

$ sudo service isc-dhcp-server restart
$ service isc-dhcp-server status
● isc-dhcp-server.service - ISC DHCP IPv4 server
   Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-01-18 18:22:01 GMT; 14min ago
     Docs: man:dhcpd(8)
 Main PID: 2437 (dhcpd)
    Tasks: 1 (limit: 2016)
   CGroup: /system.slice/isc-dhcp-server.service
           └─2437 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf enp2s0

Есть идеи? Я уверен, что есть что-то в настройках, что я упускаю, и это решит эту проблему...

РЕДАКТИРОВАТЬ: Вывод команды "nmcli connection show lan" (также известная как nmcli cs lan)

$ nmcli connection show lan

connection.id:                          lan
connection.uuid:                        96fbb458-1178-4af2-a1b7-ccce301176e0
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              enp2s0
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.auth-retries:                -1
connection.timestamp:                   1579379514
connection.read-only:                   no
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --
connection.gateway-ping-timeout:        0
connection.metered:                     unknown
connection.lldp:                        default
connection.mdns:                        -1 (default)
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          no
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist:   --
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:        --
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            --
802-3-ethernet.wake-on-lan:             default
802-3-ethernet.wake-on-lan-password:    --
ipv4.method:                            manual
ipv4.dns:                               --
ipv4.dns-search:                        --
ipv4.dns-options:                       ""
ipv4.dns-priority:                      0
ipv4.addresses:                         192.168.2.2/24
ipv4.gateway:                           --
ipv4.routes:                            --
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv4.dad-timeout:                       -1 (default)
ipv6.method:                            auto
ipv6.dns:                               --
ipv6.dns-search:                        --
ipv6.dns-options:                       ""
ipv6.dns-priority:                      0
ipv6.addresses:                         --
ipv6.gateway:                           --
ipv6.routes:                            --
ipv6.route-metric:                      -1
ipv6.route-table:                       0 (unspec)
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.addr-gen-mode:                     stable-privacy
ipv6.dhcp-send-hostname:                yes
ipv6.dhcp-hostname:                     --
ipv6.token:                             --
proxy.method:                           none
proxy.browser-only:                     no
proxy.pac-url:                          --
proxy.pac-script:                       --

EDIT2: Добавлен вывод из «nmcli -f name,autoconnect connection show»

$ nmcli -f name,autoconnect connection show
NAME                AUTOCONNECT
Wired connection 1  yes
lan                 yes

EDIT3: Добавлен вывод из "cat /etc/NetworkManager/system-connections/lan"

[connection]
id=lan
uuid=96fbb458-1178-4af2-a1b7-ccce301176e0
type=ethernet
interface-name=enp2s0
permissions=
timestamp=1579379263

[ethernet]
mac-address-blacklist=

[ipv4]
address1=192.168.2.2/24
dns-search=
method=manual

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

решение1

Интерфейс (enp2s0) вообще работает? Ему нужно добавить адрес ipv4 и затем запустить (включить)

Не имеет значения, подключены ли к концентратору/коммутатору какие-либо клиенты.

Редактировать: Сетевой менеджер?

Я ненавижу эту штуку всей душой, но в любом случае: если интерфейс iface не работает с правильным адресом, dhcpd не запустится, поэтому вам нужно выяснить, как с помощью nmcli создать статическую конфигурацию, которая всегда работает.

Редактировать: Что это показывает?

nmcli connection show lan

Интересно свойство connection.autoconnection.

Редактировать: Что это показывает:

  nmcli -f name,autoconnect connection show

Хорошо, каков статус?

  nmcli -f name,autoconnect connection show

после перезагрузки без вашего взлома? Свойство autoconnect должно быть достаточно для вызова интерфейса... незнание того, почему что-то дает сбой в чем-то, что в принципе очень просто, - это одна из моих нелюбимых особенностей NetworkManager (слишком большая сложность для неизвестных преимуществ, я вижу смысл для клиентов, которые постоянно находятся в движении, но серверы, которые должны просто работать??)

Редактировать: есть ли файлы в etc/NetworkManger/system-connections? По крайней мере, так я настроил устройства в своей системе (это мостовая конфигурация), поэтому я использую NetworkManager для запуска машины. Машина является хостом для трех гостей, поэтому устройство enp1s0 является подчиненным.

Редактировать: что произойдет, если вы определите устройство локальной сети (сначала полностью удалите его), например, что-то вроде:

nmcli connection down lan 
nmcli connection delete lan
nmcli connection add type ethernet ifname enp2s0 con-name lan autoconnect on
nmcli connection modify lan   ipv4.method manual ipv4.addresses 192.168.2.2/24 
nmcli connection lan up

решение2

Если нет лучшего решения, то на данный момент мне подходит следующее: когда запускается мое веб-приложение, первые две вещи, которые оно делает, это:

  1. sudo nmcli подключениевверхlan («lan» — это имя соединения NetworkManager, назначенное enp2s0)
  2. sudo сервис isc-dhcp-серверперезапуск

Веб-приложение запланировано cron на запуск @reboot, поэтому NetworkManager к этому моменту уже запущен.

isc-dhcp-server всегда дает сбой, если enp2s0 еще не "up", поэтому мне приходится его "up" настраивать, а затем перезапускать службу isc-dhcp-server. Это не очень элегантно, но пока справляется.

решение3

ЕСЛИ ЭТО КОМУ-НИБУДЬ ПОМОЖЕТ, Я только что разобрался с этой раздражающей проблемой на DietPi (Debian Buster) на Pi Zero W и УДАЛ ГЛАВНОЕ РЕШЕНИЕ ПРОБЛЕМЫ.

isc-dhcp-server отличный, но у него ЕСТЬ эта странность, как отметил изначальный вопрошающий выше. Я разобрался с проблемой - это не ошибка - и вот подробности причины:

  1. isc-dhcp-server отказывается (выдает ошибку), если не может обнаружить подсеть сети UP Ethernet во время запуска; он НЕ требует (вопреки мнению некоторых комментаторов) фактического подключения К порту Ethernet, с которым он связан.

  2. При разработке устройства точки доступа WiFi обычно используется hostapd в качестве функции сервера AP (который перенастраивает оборудование WiFi для переключения в режим AP), а наряду с hostapd вам необходим сервер DHCP, например isc-dhcp-server, для предоставления услуги аренды IP-адресов.

  3. ТАК: обычно отправной точкой является устройство WiFi, которое при загрузке было настроено как устройство КЛИЕНТА, но его нужно переключить в режим ХОСТА, чтобы оно действовало как точка доступа. Поэтому первым шагом является установка wlan0 (или чего-то еще) в положение ВНИЗ, перед запуском hostapd.

НО эта ситуация как раз из тех, которые не нравятся isc-dhcp-server: если вы попытаетесь запустить его до hostapd, он потерпит неудачу, жалуясь на отсутствие подсети для прослушивания.

  1. Итак, вы можете невинно попробовать добавить новый IP-адрес (для хоста) к вашему wlan0 (или эквиваленту) и повторить попытку: ЭТО ТАКЖЕ НЕ СРАБОТАЕТ, потому что, хотя у вас теперь есть новый IP, подключенный к порту Ethernet, вы также обнаружите, что не можете установить его «UP» (ip link set wlan0 up НЕ ВЫПОЛНИТСЯ). Это происходит потому, что порт «испорчен» все еще активным устаревшим адресом и процессом wpa-supplicant, который его использовал.

  2. КОРОЧЕ: вам нужно убить wpa-supplicant, чтобы "освободить" старый адрес / СБРОСИТЬ настройки IP для порта / ЗАТЕМ добавить новый IP-адрес для хоста; ДАЖЕ ТОГДА вы обнаружите, что isc-dhcp-server ВСЕ ЕЩЕ не запустится, потому что вы не можете настроить интерфейс - пока. Наконец - запустите hostapd сейчас, перед isc, и он (при перенастройке чипсета) также УСТАНОВИТ интерфейс wlan0 в положение UP. Так что теперь - наконец - вы МОЖЕТЕ запустить isc-dhcp-server, и он запустится чисто, и ваша точка доступа будет включена.

У меня ушло около пяти часов, надеюсь, это сэкономит кому-то время. Моя выжимка:

СОРТИРОВКА ISC-DHCP-SERVER ВМЕСТЕ С HOSTAPD: РЕШЕНИЕ

ВАМ НУЖНО СОБЛЮДАТЬ ЭТУ ПОСЛЕДОВАТЕЛЬНОСТЬ:

  1. УБЕЙТЕ процесс wpa-supplicant (который поддерживает клиентское соединение) следующим образом:

     kill -2  $( cat /run/wpa_supplicant.wlan0.pid )
    
     sleep 1
    
     kill -9  $( cat /run/wpa_supplicant.wlan0.pid )
    
  2. ОЧИСТИТЕ настройки IP-адреса WLAN, используя:

    ip addr flush dev wlan0
    
  3. ДОБАВЬТЕ новый IP-АДРЕС хоста, используя:

    ip addr add 10.1.1.1/24 dev wlan0
    
  4. ЗАПУСТИТЕ hostapd, который также поднимет wlan0 в UP:

     /usr/sbin/hostapd /etc/hostapd/hostapd.conf &
    
  5. ЗАПУСТИТЕ isc-dhcp-server (WLAN теперь работает как хост):

     sudo service isc-dhcp-server restart
    

ТОГДА точка доступа должна быть РАБОТАЮЩЕЙ и готовой принимать клиентов.

Конечно, это мои адреса. Отредактируйте их по своему усмотрению.

ЕЩЕ ДВА СОВЕТА: Файлы конфигурации hostapd.conf и dhcp.conf также могут свести вас с ума: - вот рабочие примеры. ВАЖНО: не переживайте из-за 'drivername' в hostapd.conf: он не нужен. 'Закомментировано' тоже нормально:

hostapd.conf

interface=wlan0

#driver=brcmfmac

ssid=THIS-IS-MY-AP

country_code=US

hw_mode=g

channel=6

macaddr_acl=0

auth_algs=1

ignore_broadcast_ssid=0

wpa=2

wpa_passphrase=12345678

wpa_key_mgmt=WPA-PSK

wpa_pairwise=CCMP

wpa_group_rekey=86400

ieee80211n=1

wme_enabled=1

dhcpd.conf

# COMMENT OUT BOTH OF THE TEMPLATES' 'option domain..' lines.. 
# then ADD THIS AT BOTTOM
#
#
subnet 10.1.1.0 netmask 255.255.255.0 {
        range 10.1.1.100 10.1.1.109;
        option broadcast-address 10.1.1.255;
        option routers 10.1.1.1;
        default-lease-time 600;
        max-lease-time 7200;
        option domain-name "mynetwork.org";
        option domain-name-servers 8.8.8.8, 8.8.4.4;
}
#
#

Хотя это работает на Pi, это было сделано на DietPi, который является чистым Debian, так что этот же совет должен подойти многим Linux, включая Ubuntu многих разновидностей.

ВСЕМ УДАЧИ

Связанный контент