When the Server Starts Dnsmasq Service Fail to Starts
背景
刚在服务器上用dnsmasq搭建了一个dns服务。希望能够监听所有ip。配置好之后,用systemctl start dnsmasq
启动。看起来一切正常。但是在服务器重启之后,dnsmasq服务没有启动。只能手动运行systemctl start dnsmasq
启动。
调查和解决方案
通过journalctl -u dnsmasq
命令发现以下异常信息:
Sep 11 17:47:22 fedora systemd[1]: Starting dnsmasq.service - DNS caching server....
Sep 11 17:47:22 fedora dnsmasq[902]: dnsmasq: failed to create listening socket for 192.168.11.180: Cannot assign requested address
Sep 11 17:47:22 fedora dnsmasq[902]: failed to create listening socket for 192.168.11.180: Cannot assign requested address
Sep 11 17:47:22 fedora dnsmasq[902]: FAILED to start up
Sep 11 17:47:22 fedora systemd[1]: dnsmasq.service: Control process exited, code=exited, status=2/INVALIDARGUMENT
Sep 11 17:47:22 fedora systemd[1]: dnsmasq.service: Failed with result 'exit-code'.
Sep 11 17:47:22 fedora systemd[1]: Failed to start dnsmasq.service - DNS caching server..
从以上信息可以看出是原因是:
“Cannot assign requested address.”是由于linux分配的客户端连接端口用尽,无法建立socket连接所致,虽然socket正常关闭,但是端口不是立即释放,而是处于TIME_WAIT状态,默认等待60s后才释放。
检查dnsmasq的配置文件以及通过测试发现是以下两个参数可能会造成这种情况:
listen-address=127.0.0.1,192.168.11.180
bind-interfaces
将bind-interfaces注释掉之后,再次启动linux服务器,dnsmasq服务就能正常启动。