В 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
Если нет лучшего решения, то на данный момент мне подходит следующее: когда запускается мое веб-приложение, первые две вещи, которые оно делает, это:
- sudo nmcli подключениевверхlan («lan» — это имя соединения NetworkManager, назначенное enp2s0)
- 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 отличный, но у него ЕСТЬ эта странность, как отметил изначальный вопрошающий выше. Я разобрался с проблемой - это не ошибка - и вот подробности причины:
isc-dhcp-server отказывается (выдает ошибку), если не может обнаружить подсеть сети UP Ethernet во время запуска; он НЕ требует (вопреки мнению некоторых комментаторов) фактического подключения К порту Ethernet, с которым он связан.
При разработке устройства точки доступа WiFi обычно используется hostapd в качестве функции сервера AP (который перенастраивает оборудование WiFi для переключения в режим AP), а наряду с hostapd вам необходим сервер DHCP, например isc-dhcp-server, для предоставления услуги аренды IP-адресов.
ТАК: обычно отправной точкой является устройство WiFi, которое при загрузке было настроено как устройство КЛИЕНТА, но его нужно переключить в режим ХОСТА, чтобы оно действовало как точка доступа. Поэтому первым шагом является установка wlan0 (или чего-то еще) в положение ВНИЗ, перед запуском hostapd.
НО эта ситуация как раз из тех, которые не нравятся isc-dhcp-server: если вы попытаетесь запустить его до hostapd, он потерпит неудачу, жалуясь на отсутствие подсети для прослушивания.
Итак, вы можете невинно попробовать добавить новый IP-адрес (для хоста) к вашему wlan0 (или эквиваленту) и повторить попытку: ЭТО ТАКЖЕ НЕ СРАБОТАЕТ, потому что, хотя у вас теперь есть новый IP, подключенный к порту Ethernet, вы также обнаружите, что не можете установить его «UP» (ip link set wlan0 up НЕ ВЫПОЛНИТСЯ). Это происходит потому, что порт «испорчен» все еще активным устаревшим адресом и процессом wpa-supplicant, который его использовал.
КОРОЧЕ: вам нужно убить wpa-supplicant, чтобы "освободить" старый адрес / СБРОСИТЬ настройки IP для порта / ЗАТЕМ добавить новый IP-адрес для хоста; ДАЖЕ ТОГДА вы обнаружите, что isc-dhcp-server ВСЕ ЕЩЕ не запустится, потому что вы не можете настроить интерфейс - пока. Наконец - запустите hostapd сейчас, перед isc, и он (при перенастройке чипсета) также УСТАНОВИТ интерфейс wlan0 в положение UP. Так что теперь - наконец - вы МОЖЕТЕ запустить isc-dhcp-server, и он запустится чисто, и ваша точка доступа будет включена.
У меня ушло около пяти часов, надеюсь, это сэкономит кому-то время. Моя выжимка:
СОРТИРОВКА ISC-DHCP-SERVER ВМЕСТЕ С HOSTAPD: РЕШЕНИЕ
ВАМ НУЖНО СОБЛЮДАТЬ ЭТУ ПОСЛЕДОВАТЕЛЬНОСТЬ:
УБЕЙТЕ процесс wpa-supplicant (который поддерживает клиентское соединение) следующим образом:
kill -2 $( cat /run/wpa_supplicant.wlan0.pid ) sleep 1 kill -9 $( cat /run/wpa_supplicant.wlan0.pid )
ОЧИСТИТЕ настройки IP-адреса WLAN, используя:
ip addr flush dev wlan0
ДОБАВЬТЕ новый IP-АДРЕС хоста, используя:
ip addr add 10.1.1.1/24 dev wlan0
ЗАПУСТИТЕ hostapd, который также поднимет wlan0 в UP:
/usr/sbin/hostapd /etc/hostapd/hostapd.conf &
ЗАПУСТИТЕ 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 многих разновидностей.
ВСЕМ УДАЧИ