2016-08-07 7 views
-1

私は、Dockmasコンテナ内のDHCPサーバとして動作し、ホストの物理ネットワーク上のマシンにDHCPアドレスを発行するようdnsmasqを取得しようとしています。私は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の静的アドレスを持っています。

私はこのようなコンテナを起動します。

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と伝えます)
  • --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を使用していました。

関連する問題