web-dev-qa-db-ja.com

Dockerホスト上のIPSECへのブリッジDockerネットワークのルーティング

スタンドアロンのDockerHost、ipsec、およびDockerコンテナーネットワークの特定の状況で問題が発生しています。

スタンドアロンのDockerホストがあり、その中にlibreswan 3ipsecサービスとDocker環境がインストールされています。

情報:

私のDockerネットワークは、IP範囲が172.81.238.0/24のブリッジです。

Docker環境の外にIPSeclibreswanがありますが、同じホストにあり、仮想インターフェイス(eth0:3-> 10.120.0.38)を使用し、他のipsec側(10.120.0.36/30)との接続をサイト間で閉じます。 )。

Ipsecvpnの反対側で通信するCIDRは172.36.0.0/22です。

問題

重要なのは、ホストでSSH(またはsshトンネル)を介して直接接続すると、172.36.0.0/22ネットワーク(クライアントのネットワーク)上の他のサーバーと簡単に通信できるということです。

しかし、Dockerコンテナー(ネットワーク172.81.238.0/24)に接続すると、CIDR 172.36.0.0/22と通信できなくなります。 Dockerコンテナでは、Dockerホストのeth0:3(10.120.0.38)インターフェイスを「ping」できますが、ipsecvpnの反対側と通信できません。

私のルートはスタンドアロンホストでは機能していますが、コンテナ(この同じホストによってドッキングされている)では機能していません。何か、いくつかのbypaなどが不足しているようです。

誰か助けてくれませんか?

[〜#〜]編集[〜#〜]

アントンの出力:

# ip x s ls

# ip x p ls
src 10.120.0.36/30 dst 172.36.0.0/22 
    dir out priority 1040873 ptype main 
    tmpl src 0.0.0.0 dst 0.0.0.0
        proto esp reqid 0 mode transport
src ::/0 dst ::/0 
    socket out priority 0 ptype main 
src ::/0 dst ::/0 
    socket in priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 ptype main 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 ptype main 
src ::/0 dst ::/0 proto ipv6-icmp type 135 
    dir out priority 1 ptype main 
src ::/0 dst ::/0 proto ipv6-icmp type 135 
    dir fwd priority 1 ptype main 
src ::/0 dst ::/0 proto ipv6-icmp type 135 
    dir in priority 1 ptype main 
src ::/0 dst ::/0 proto ipv6-icmp type 136 
    dir out priority 1 ptype main 
src ::/0 dst ::/0 proto ipv6-icmp type 136 
    dir fwd priority 1 ptype main 
src ::/0 dst ::/0 proto ipv6-icmp type 136 
    dir in priority 1 ptype main

Libreswan構成:

# basic configuration

config setup
        strictcrlpolicy=no
        uniqueids= yes

# Add connections here.

conn %default
        type= tunnel
        authby= secret
        keyexchange=ike
        ikelifetime= 86400s
        aggressive= no

        # Outras configurações
        compress= no
        forceencaps= yes

        # IPSEC Fase 1
        ike= aes256-sha1-modp1536,aes256gcm16-sha256-ecp521,aes256-sha256-ecp384,aes256gcm16-sha256-ecp256!

        # IPSEC Fase 2
        esp= aes256-sha1-modp1024,aes256gcm16-sha256,aes256-sha256!

conn vpnipsec-myclient

        keyexchange=ike
        leftprotoport= %any
        ikev2=insist
        # IPSEC Fase 1
        ike= aes256-sha256-modp2048

        # IPSEC Fase 2
        esp= aes256-sha256-modp2048

        # Left security
        left= 173.X.X.X
        leftid= 173.X.X.X
        leftsubnet= 10.120.0.36/30
        leftauth= secret

# Right security
        right= 177.X.X.X
        rightid= 177.X.X.X
        rightauth= secret
        rightsubnet= 172.36.0.0/22
        auto= start
1
Renan M.

これはかなり古いですが、それに遭遇するかもしれない他の人のためにここにいくつかの情報を残しておきます。

デフォルトのブリッジネットワーク構成でDockerコンテナーをデプロイすると、アプリケーションがホストと同じリソースにアクセスする必要があると想定されるため、コンテナーからのトラフィックが偽装されます。

それについては2つの方法があります。

  1. Com.docker.network.bridge.enable_ip_masquerade変数をfalseに設定するか、ファイアウォールからNATルールを削除して、マスカレードを防止します(iptables -n -t nat -L --line-を参照)。番号)。

Iptablesルールを削除すると、新しいデプロイメントによってルールがすぐに書き戻されるため、リスクが伴います。

NAT)を防ぐと、インターネットへのアクセスもできなくなります。これは、ほとんどのゲストアプリケーションで必要になります。

  1. ホストのデフォルトのethIPアドレスをIPSec接続の暗号化ドメインに追加して、NATパケットがトンネルを通過できるようにします。 IPSecパートナーは、その側でNATアドレスを承認する必要があります。

それが役に立てば幸い。

1
Ștefan Anghel