2016-04-27 9 views
3

私はdocker-1.9.1をQNAP raidマシンで実行しています。サブネット10.0.3.0/24を使用するデフォルトのbridgeネットワークがあります。私はドッカーはこのルール自体を作成したと仮定していますDockerはブリッジネットワーク用のiptablesでIPマスカレードルールを自動化しますか?

-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE

:iptablesのでは私はnatテーブル内のルールを参照してください。これは、iptablesのでルールを作成しません

docker network create \ 
--gateway=10.0.5.1 \ 
--subnet=10.0.5.0/24 \ 
-o "com.docker.network.bridge.host_binding_ipv4"="0.0.0.0" \ 
-o "com.docker.network.bridge.enable_icc"="true" \ 
-o "com.docker.network.driver.mtu"="1500" \ 
-o "com.docker.network.bridge.name"="lxcbr1" \ 
-o "com.docker.network.bridge.enable_ip_masquerade"="true" \ 
isolated_nw 

私は新しいブリッジネットワークを作成しました。私は一歩足りなかった?ここで

は@larsks'の例をコピーし、完全なセットアップコマンドと結果です:

[/share/Containers] # docker --version 
Docker version 1.9.1, build 147ce3e 
[/share/Containers] # iptables -t nat -S | grep 10.0.5.0 
[/share/Containers] # docker network create \ 
> --gateway=10.0.5.1 \ 
> --subnet=10.0.5.0/24 \ 
> -o "com.docker.network.bridge.host_binding_ipv4"="0.0.0.0" \ 
> -o "com.docker.network.bridge.enable_icc"="true" \ 
> -o "com.docker.network.driver.mtu"="1500" \ 
> -o "com.docker.network.bridge.name"="lxcbr1" \ 
> -o "com.docker.network.bridge.enable_ip_masquerade"="true" \ 
> isolated_nw 
a7b5c938008169f32fcdfc1d9409716b725cc916b30f472ac6ec2a1d71fb77f0 
[/share/Containers] # iptables -t nat -S | grep 10.0.5.0 
[/share/Containers] # iptables -t nat -S 
-P PREROUTING ACCEPT 
-P INPUT ACCEPT 
-P OUTPUT ACCEPT 
-P POSTROUTING ACCEPT 
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE 
[/share/Containers] # 
+0

https://docs.docker.com/engine/userguide/containers/networkingcontainers/で「独自のブリッジネットワークを作成する」ことは承知していますか? –

+0

私は自分のネットワークを作成するためにそのページの例を使用しました。それは偽のip偽装やiptablesのように見えません。 –

+0

それは...実はします。あなたは私の答えで走ったコマンドの実際のシーケンスを見ることができます。または、これを見ることができます。これは同じテストを実行している私の実際のセッションです:https://asciinema.org/a/9ipp0n6izkcb3iqk2tdgmpx1i – larsks

答えて

0

私は(Fedoraの23原子上)ドッカー1.9.1を使用しています、そして、あなたのコマンドがうまく動作するようです。ネットワークを作成する前に

# docker --version 
Docker version 1.9.1, build 7206621 
# iptables -t nat -S | grep 10.0.5.0 
<no result> 

は、ネットワークを作成します。

docker network create \ 
--gateway=10.0.5.1 \ 
--subnet=10.0.5.0/24 \ 
-o "com.docker.network.bridge.host_binding_ipv4"="0.0.0.0" \ 
-o "com.docker.network.bridge.enable_icc"="true" \ 
-o "com.docker.network.driver.mtu"="1500" \ 
-o "com.docker.network.bridge.name"="lxcbr1" \ 
-o "com.docker.network.bridge.enable_ip_masquerade"="true" \ 
isolated_nw 

チェックのiptables:

# iptables -t nat -S | grep 10.0.5.0 
-A POSTROUTING -s 10.0.5.0/24 ! -o lxcbr1 -j MASQUERADE 

を、それが正しく削除しながら、...私は、docker network rm isolated_nwを実行していることに注意してくださいブリッジデバイスは、iptablesルールを削除していないようです。これはDockerの最新バージョンで修正されているようです(たとえば、ローカルで1.11.0を実行していて、そのバージョンでネットワーク削除に関するルールが正しく削除されているようです)。

更新

あなたの質問へのアップデートはiptables -t nat -Sから全体の出力を持っている場合は、natテーブルにDOCKERチェーンが欠落しているため、その後、何か他のものは、起こっています。

# iptables -t nat -S 
-P PREROUTING ACCEPT 
-P INPUT ACCEPT 
-P OUTPUT ACCEPT 
-P POSTROUTING ACCEPT 
-N DOCKER 
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER 
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER 
-A POSTROUTING -s 10.0.5.0/24 ! -o lxcbr1 -j MASQUERADE 
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE 

そして、私は手動でDOCKERチェーンと参照を削除した場合、中に私のシステムの結果に新しいネットワークを作成しようとするため、実際に、私は、あなたのcreate networkコマンドも完了したことを驚いている:

Error response from daemon: Failed to program NAT chain: Failed to 
inject docker in PREROUTING chain: iptables failed: iptables --wait 
-t nat -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER: iptables 
v1.4.21: Couldn't load target `DOCKER':No such file or directory 
+0

私の質問をこれらのコマンドの私のバージョンで修正しています。ルールを作成せず、なぜその理由がわからない。 –

+0

私はドッカーチェーンを持っていますが、 'nat'テーブルにはありません。 [/共有/コンテナ]#iptablesの-S -P INPUT -PはFORWARD -P出力 -NドッカーをACCEPT ACCEPT ACCEPT –

関連する問題