2016-11-24 3 views
2

私はあきらめます。 UFWで強化されたubuntu 16.04でDocker 1.12.0を使用しています。ドッカーインターネット接続iptables = false

マシンが2つのインターフェイスがある - 私は、以前のバージョンで行ったよう私はドッキングウィンドウがないように偽であることを「iptablesの」構成された一つのパブリック(eth0)と、プライベートネットワークへの1(eth1の)

Server Version: 1.12.3 
Storage Driver: aufs 
Root Dir: /var/lib/docker/aufs 
Backing Filesystem: extfs 
Dirs: 15 
Dirperm1 Supported: true 
Logging Driver: json-file 
Cgroup Driver: cgroupfs 
Plugins: 
Volume: local 
Network: null bridge host overlay 
Swarm: inactive 
Runtimes: runc 
Default Runtime: runc 
Security Options: apparmor seccomp 
Kernel Version: 4.4.0-47-generic 
Operating System: Ubuntu 16.04.1 LTS 
OSType: linux 
Architecture: x86_64 
CPUs: 1 
Total Memory: 488.5 MiB 
Name: image-base 
ID: 2473:FGJQ:MEEC:CEWY:BSLR:SYB5:EXMO:WJBE:7MMM:DIZH:NJQF:L5NA 
Docker Root Dir: /var/lib/docker 
Debug Mode (client): false 
Debug Mode (server): false 
Registry: https://index.docker.io/v1/ 
WARNING: No swap limit support 
Insecure Registries: 
127.0.0.0/8 

をファイアウォールを変更します。

最新のバージョンのdocker(11+)では、このコマンドには副作用があります。リブート後、ドッカーコンテナはネットワークアクセスを停止します(ping www.google.com)。

私はそれを何度も何度も確認しました。 再現方法: を - 私は、ファイル/etc/docker/daemon.jsonを追加することにより、偽iptablesの設定=ドッカデーモン

sudo systemctl stop docker 

を停止します。

{ 
    "iptables" : false 
} 

(これが唯一の構成です)

スタートデーモン:

sudo systemctl start docker 

docker run --rm python ping www.google.com 

でもそれはするかどうかあなたのために働く - あなたがシステムを再起動した場合 - それは動作を停止します...あなたは任意の解決策を持っていますか?

私はiptablesのルールをチェックし、システムを再起動した後、私はそれらのルール欠けている:

:PREROUTING ACCEPT [8:496]  
:INPUT ACCEPT [0:0]  
:OUTPUT ACCEPT [0:0]   
:POSTROUTING ACCEPT [0:0]  
:DOCKER - [0:0]  
-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 172.17.0.0/16 ! -o docker0 -j MASQUERADE  
-A POSTROUTING -s 172.18.0.0/16 ! -o br-a0b355ce53ac -j MASQUERADE  
-A DOCKER -i docker0 -j RETURN  
-A DOCKER -i br-a0b355ce53ac -j RETURN 
# same 
:DOCKER - [0:0]  
:DOCKER-ISOLATION - [0:0] 
# same 
    -A FORWARD -j DOCKER-ISOLATION  
-A FORWARD -o docker0 -j DOCKER  
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT  
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT   
-A FORWARD -i docker0 -o docker0 -j ACCEPT  
-A FORWARD -o br-a0b355ce53ac -j DOCKER  
-A FORWARD -o br-a0b355ce53ac -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT  
-A FORWARD -i br-a0b355ce53ac ! -o br-a0b355ce53ac -j ACCEPT   
-A FORWARD -i br-a0b355ce53ac -o br-a0b355ce53ac -j ACCEPT 
# same 
    -A DOCKER-ISOLATION -i br-a0b355ce53ac -o docker0 -j DROP  
-A DOCKER-ISOLATION -i docker0 -o br-a0b355ce53ac -j DROP  
-A DOCKER-ISOLATION -j RETURN 

感謝を!

+0

Dockerは、一般的にシステム上でufwとよく似ています。システム上のdocker + ufwでどんなトラブルに遭遇しましたか? – programmerq

答えて

2

ドッカーネットワークモデルでは、iptablesを使用してコンテナのインターネット接続を設定します。ブリッジやオーバレイネットワークドライバを使用しているコンテナに、ネットワーク接続を全く持たせたくない場合は、iptables = falseを設定します。

iptables = trueでデーモンを起動すると、ファイアウォールに必要なルールが設定されます。ドッカーがシャットダウンすると、私はそれがそれらのルールを傷つけるとは思わないので、彼らはたどり着きます。これは、iptables = falseでドッカーのバックアップを開始した後にインターネット接続を確立する理由です。再起動後に次のドッカーの起動時にこれらのルールを保持したい場合は、iptables = trueにすることをお勧めします。

+0

私は理解しています。私は彼らがこの「iptables」設定を「発信」と「着信」に分けたかったのです。ドッカーが自分のコンテナに発信通信を許可するようにしたいので、 –

+0

ポートを公開する場合は、「着信」ルールしか存在しません。もしあなたがそうでなければ、実際には、そのコンテナのためにoutgong接続を可能にするためのiptablesルールしか存在しません。 – programmerq

+0

私の問題は私のクラウドプロバイダがネットワークセキュリティ設定を提供していないことだと思うので、私は外部の世界に公開するポートを定義するためにUFW/iptablesを使う必要があります。私は、私のマシンに内部ネットワークにポート8080を公開するが、外の世界には公開しないようにする簡単な方法を望んでいます。私はマシンのプライベートIPをドッカーのバインディングルールにハードコードしたくありません。 –

関連する問題