在我的网关服务器上的 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.
我的网关服务器有两个以太网端口,enp1s0 和 enp2s0。我使用 enp1s0 通过路由器访问互联网,使用 enp2s0 为以太网连接的笔记本电脑提供 Web 应用程序。enp2s0 是 DHCP 服务器分配 IP 地址的端口(用于需要 Web 应用程序的笔记本电脑)。我想enp1s0 从 192.168.1.0 子网上连接互联网的路由器获取一个随机 IP 地址,这样该接口不由 isc-dhcp-server 管理,只有 enp2s0 管理。
这是与 enp2s0 没有任何连接的“ip route”,如果这有帮助的话......
$ 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=""
一种解决方案是在将笔记本电脑插入 enp2s0 后重新启动 isc-dhcp-server,但我不想每次重启后或每次有人将笔记本电脑插入 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 地址,然后启动 (up)
任何客户端是否连接到集线器/交换机都无关紧要。
编辑:网络管理员?
我非常讨厌那个东西,但是无论如何:如果 iface 没有正确的地址,dhcpd 将无法启动,所以你需要弄清楚如何使用 nmcli 创建始终处于启动状态的静态配置。
编辑:这显示了什么?
nmcli connection show lan
connection.autoconnection 属性很有趣。
编辑:显示了什么:
nmcli -f name,autoconnect connection show
好的,状态如何
nmcli -f name,autoconnect connection show
重启后无需黑客攻击?自动连接属性应该足以调出界面……不知道为什么有些东西会失败,基本上很简单,这是我不喜欢 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
除非有更好的解决方案,否则目前这对我来说是可行的:当我的 Web 应用程序启动时,它做的前两件事是:
- sudo nmcli conn向上lan('lan' 是分配给 enp2s0 的 NetworkManager 连接名称)
- sudo 服务 isc-dhcp-服务器重新开始
Web 应用程序按 cron 计划启动 @reboot,因此 NetworkManager 已在此时启动。
如果 enp2s0 尚未“启动”,isc-dhcp-server 总是会失败,因此我必须将其设置为“启动”,然后重新启动 isc-dhcp-server 服务。虽然不太优雅,但目前可以完成工作。
答案3
如果它对任何人都有帮助,我刚刚在 Pi Zero W 上的 DietPi(Debian Buster)上遇到了这个令人恼火的问题,并且已经解决了问题。
isc-dhcp-server 非常出色,但确实存在这个怪癖,正如上面的原始询问者所指出的那样。我已经找到了问题所在 - 这不是错误 - 以下是原因的详细信息:
如果 isc-dhcp-server 在启动时看不到 UP 以太网网络子网,则会拒绝(抛出错误);它不需要(与某些评论者相反)实际连接到与其关联的以太网端口。
在开发 WiFi 热点设备时,通常使用 hostapd 作为 AP 服务器功能(重新配置 WiFi 硬件以切换到 AP 模式),并且除了 hostapd 之外,还需要一个 dhcp 服务器(如 isc-dhcp-server)来提供 IP 地址租赁服务。
因此:通常,起点是 WiFi 设备,在启动时配置为客户端设备,但需要切换到主机模式才能充当热点。因此,在启动 hostapd 之前,早期步骤是将 wlan0(或其他)设置为 DOWN。
但是这种情况是 isc-dhcp-server 不喜欢的情况之一:如果您尝试在 hostapd 之前启动它,它将会失败,并抱怨没有子网可供它监听。
因此,您可以天真地尝试将新的 IP 地址(用于主机)添加到 wlan0(或等效地址)并重试:这也行不通,因为尽管您现在有一个新的 IP 连接到以太网端口,但您也会发现您无法将其设置为“UP”(ip link set wlan0 up 将失败)。这是因为端口被仍然处于活动状态的陈旧地址和正在使用它的 wpa-supplicant 进程“污染”了。
长话短说:您需要关闭 wpa-supplicant,以“释放”旧地址/刷新端口的 IP 设置/然后为主机添加新 IP 地址;即使这样,您仍会发现 isc-dhcp-server 仍然无法启动,因为您无法设置接口 - 目前还无法。最后 - 现在在 isc 之前运行 hostapd,IT 还会(在重新配置芯片组时)将 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 )
刷新 WLAN IP 设置,使用:
ip addr flush dev wlan0
添加新的主机 IP 地址,使用:
ip addr add 10.1.1.1/24 dev wlan0
启动 hostapd,它也会将 wlan0 启动:
/usr/sbin/hostapd /etc/hostapd/hostapd.conf &
启动 isc-dhcp-server(WLAN 已启动,现在作为主机):
sudo service isc-dhcp-server restart
然后,接入点应该处于启动状态并准备好接受客户端。
当然,这些是我的地址/可以根据您的需要进行编辑。
另外两个提示:配置文件 hostapd.conf 和 dhcp.conf 也会让你抓狂:-这里有工作示例。重要提示:不要为 hostapd.conf 中的“drivername”烦恼:它不是必需的。“注释掉”就可以了:
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配置文件
# 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 上进行,但它是在纯 Debian 的 DietPi 上进行的,因此同样的建议应该适用于许多 Linux,包括多种风格的 Ububtus。
祝大家好运