2016-08-07 5 views
-1

Dockmas 컨테이너에서 DHCP 서버로 작동하도록 dnsmasq을 얻으려고하고 호스트의 실제 네트워크에있는 시스템에 DHCP 주소를 발행하려고합니다. 나는 https://hub.docker.com/r/andyshinn/dnsmasq/에서 Alpine Linux 6MB 컨테이너를 사용하고 있습니다.Docker 컨테이너 내부에서 DHCP 서버로 dnsmasq을 실행하십시오.

호스트 컴퓨터의 포트 53에서 DNS 서버로 정상적으로 작동하지만 포트 67/udp에서 수신 대기하는 것은 없습니다. DHCP가 필요한 위치입니다. dhcping 192.168.2.2을 사용하지만 "대답 없음"을 얻습니다. telnet 192.168.2.2 67은 "Connection refused"를 반환합니다. 컨테이너의

내 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의 정적 주소를 가지고 있습니다.

나는 용기 같이 시작 : 우분투 16.04를 실행하는이 컴퓨터에 방화벽이 없습니다

docker run -d --name dns -p 192.168.2.2:67:67/udp -p 192.168.2.2:53:53/udp sitapati/dns

. 내가 생각했습니다

것들/시도 : 컨테이너에서 eth0를 완전히 다른 서브넷에 주소를 가지고 있기 때문에

  • 입니까? (docker inspect은 브리지 인터페이스에서 172.17.0.2라고 알려줍니다.)
  • --net host을 사용해야합니까? 나는 그것을 시도하고, 그것은 여전히 ​​작동하지 않았다.
+1

나는 결국 isc-dhcpd를 사용했다. 그거야. 아직도 dnsmasq이 작동하지 않는 이유는 확실치 않습니다. 다음은 Docker 컨테이너에있는 작동중인 DHCP 서버입니다. https://github.com/jwulf/docker-dhcpd –

+1

이 질문에 대한 답변은 왜 실패 했습니까? – igal

답변

5

예, 컨테이너는 가상 서브넷 (rhe docker0 브리지 네트워크)에 자체 인터페이스를 갖습니다. 따라서 해당 서브넷에 주소를 제공하려고 시도 할 것입니다.

--net 호스트가 나를 위해 일한 사용하여, 나는 다음과 같은 명령 같은 것을 사용하여 작업 DHCP 서버를 가지고 :

docker run --name dnsmasq2 -t -v /vagrant/dnsmasq.conf:/opt/dnsmasq.conf -p 67:67/udp --net host centos 

--net 호스트는 컨테이너가 호스트의 네트워킹 스택을 사용하는 대신에 나타납니다 보장 그 자체.

dnsmasq -q -d --conf-file=/opt/dnsmasq.conf --dhcp-broadcast 

또한 실제로 네트워크에 DHCPOFFER 메시지를 방송 얻기 위해 컨테이너 내에서하는 dnsmasq에 --dhcp 브로드 캐스트 플래그를 추가 할 필요가 있었다. 어떤 이유로 dnsmasq는 DHCPOFFER 메시지를 유니 캐스팅하려고 시도했지만 아직 할당되지 않은 주소를 얻으려고 ARP를 사용하고있었습니다.