linux – 从Docker容器内部运行dnsmasq作为DHCP服务器
我正在尝试让dnsmasq作为Docker容器内的DHCP服务器运行,向主机物理网络上的机器发出DHCP地址.我正在使用
https://hub.docker.com/r/andyshinn/dnsmasq/的Alpine Linux 6MB容器.
它可以作为主机端口53上的DNS服务器正常工作,但是没有任何东西监听端口67 / udp,这是我期待DHCP的地方.我用 我在容器中的dnsmasq.conf文件如下所示: interface=eth0 user=root domain-needed bogus-priv no-resolv local=/mydomain.io/ no-poll server=8.8.8.8 server=8.8.4.4 no-hosts addn-hosts=/etc/dnsmasq_static_hosts.conf expand-hosts domain=mydomain.io dhcp-range=192.168.2.10,192.168.2.250,255.255.255.0,192.168.2.255,5m # Have windows machine release on shutdown dhcp-option=vendor:MSFT,2,1i # No default route dhcp-option=3 主机的静态地址为192.168.2.2. 我像这样启动容器: docker run -d –name dns -p 192.168.2.2:67:67/udp -p 192.168.2.2:53:53/udp sitapati / dns 此机器上没有防火墙,运行Ubuntu 16.04. 我曾经想过/尝试的事情: >是因为容器中的eth0在完全不同的子网上有地址吗? (docker inspect告诉我在桥接接口上它是172.17.0.2) 解决方法
是的,容器将在虚拟子网(docker0桥接网络)上拥有自己的接口.因此,它将尝试在该子网上提供地址.
使用–net host为我工作,我使用类似以下命令的方式使DHCP服务器工作: docker run --name dnsmasq2 -t -v /vagrant/dnsmasq.conf:/opt/dnsmasq.conf -p 67:67/udp --net host centos –net host确保容器看起来使用主机的网络堆栈而不是它自己的网络堆栈. dnsmasq -q -d --conf-file=/opt/dnsmasq.conf --dhcp-broadcast 我还需要将-dhcp-broadcast标志添加到容器内的dnsmasq,以使其实际在网络上广播DHCPOFFER消息.出于某种原因,dnsmasq试图单播DHCPOFFER消息,并使用ARP来尝试获取尚未分配的地址. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |