ホストマシンでVPNを開始すると、コンテナーでpingを実行できません。
私はこれをやってみます:
docker run adiazmor/docker-ubuntu-with-ping ping 8.8.8.8
VPNが起動すると失敗しますが、これは機能します。
docker run --net=Host adiazmor/docker-ubuntu-with-ping ping 8.8.8.8
Docker-composeでlinks
を使用できないため、--net=Host
オプションを常に使用できるわけではありません。
IKEを使用してVPNを開始します。これがVPNの設定です(見られるデータなし):
n:version:4
n:network-ike-port:500
n:network-mtu-size:1380
n:client-addr-auto:1
n:network-natt-port:4500
n:network-natt-rate:10
n:network-frag-size:540
n:network-dpd-enable:1
n:client-banner-enable:1
n:network-notify-enable:1
n:client-dns-used:1
n:client-dns-auto:0
n:client-dns-suffix-auto:1
n:client-splitdns-used:1
n:client-splitdns-auto:1
n:client-wins-used:1
n:client-wins-auto:1
n:phase1-dhgroup:2
n:phase1-keylen:256
n:phase1-life-secs:86400
n:phase1-life-kbytes:0
n:vendor-chkpt-enable:0
n:phase2-keylen:256
n:phase2-life-secs:28800
n:phase2-life-kbytes:0
n:policy-nailed:0
n:policy-list-auto:0
b:auth-mutual-psk:----
n:phase2-pfsgroup:-1
s:network-Host:[network-Host-ip]
s:client-auto-mode:pull
s:client-iface:virtual
s:network-natt-mode:enable
s:network-frag-mode:enable
s:client-dns-addr:8.8.8.8,8.8.4.4
s:auth-method:mutual-psk-xauth
s:ident-client-type:address
s:ident-server-type:any
s:phase1-exchange:main
s:phase1-cipher:aes
s:phase1-hash:sha1
s:phase2-transform:esp-aes
s:phase2-hmac:sha1
s:ipcomp-transform:disabled
s:policy-level:auto
s:policy-list-include:0.0.0.0 / 0.0.0.0
route -n
の結果は次のとおりです。
VPNが実行されていないときのホスト:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.254 0.0.0.0 UG 100 0 0 enp4s0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enp4s0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-c57946727b62
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-e5b5cdaf12ea
172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0f8aa3757cdc
172.21.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-89f7a8041283
172.22.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-9313de2b3cda
172.23.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-5eb78801c6be
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp4s0
VPNが実行されている場合:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.226.1 0.0.0.0 UG 0 0 0 tap0
0.0.0.0 192.168.1.254 0.0.0.0 UG 100 0 0 enp4s0
78.109.86.184 192.168.1.254 255.255.255.255 UGH 0 0 0 enp4s0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enp4s0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-c57946727b62
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-e5b5cdaf12ea
172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0f8aa3757cdc
172.21.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-89f7a8041283
172.22.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-9313de2b3cda
172.23.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-5eb78801c6be
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp4s0
コンテナ上(コンテナがマウントされているかどうかにかかわらず、変更なし):
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.19.0.1 0.0.0.0 UG 0 0 0 eth0
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
私は他の質問をチェックしましたが、私の場合、うまくいくものが見つかりませんでした。 IPアドレスにアクセスしようとしているので、DNSとは関係ないと思います。
私に何ができる?
事実:
考慮事項:
ホストが新しい接続の送信トラフィックを送信する場合(つまり、受信接続に応答しない場合)、適用するルートとそのトラフィックに適したインターフェースを決定する必要があります。
上記のルートテーブルに基づいて、ホストで生成されたトラフィックは、en4ps0インターフェイスよりもメトリックが低いため、タップインターフェイスを選択します。
問題の根本的な原因:
コンテナ内から生成されたトラフィックはen4ps0インターフェースでホストのIPアドレスに変換されるため、そのインターフェースに適したルートを適用し、VPNを完全にスキップします。
非対称トラフィック、VPNソフトウェアによるen4ps0とのトラフィックのブラックホールなどが原因でpingが失敗する可能性がありますが、ここでのポイントは、NAT/PATが原因でコンテナのトラフィックがトンネルを通過しないことです。
基盤となるネットワークやその他の要件によっては、ブリッジやホストよりもmacvlanドライバーの方が適している場合があります。または、アーキテクチャを再検討する必要があります。または、VPNをホストに配置する必要があります(別のホスト/デバイスではなく)。