web-dev-qa-db-ja.com

IPTABLES-動的なソースを使用してNATを構成する

私の開発環境では、内部に複数のマイクロサービスを備えたDockerSwarmノードを使用しています。マシンで実行されているマイクロサービスをDocker内で実行されているマイクロサービスと通信させる必要がありますが、パッケージを正しくルーティングするためにいくつかの問題があります。 Dockerサーバーを再起動するとコンテナーのIPアドレスが変わるため、ゲートウェイを使用してパッケージをルーティングしようとしています。これらのルールを使用して、必要なマイクロサービスにpingを実行できます。

sysctl net.ipv4.conf.all.forwarding=1
iptables -P FORWARD ACCEPT
iptables -t nat -A  PREROUTING -d 10.0.0.0/24 -j DNAT --to-destination 172.18.0.1

ご覧のとおり、マイクロサービスは10.0.0.0/24ネットワークで実行されており、ゲートウェイのIP172.18.0.1を使用しています。問題は、ルールにどのソースを入れるべきかわからないため、応答パッケージを処理する方法が見つからないことです。

Sudo iptables -t nat -A POSTROUTING -s 172.18.0.1 -j SNAT --to-source IP

パケットにマークを付け、このマークに基づいてソースIPを設定する方法はありますか?正しくルーティングするにはどうすればよいですか?

1
brevleq

DNATルールを172.18.0.2を指すように変更しました。これは、Dockerがすべてのノードのポートをマップするために使用するIPであり、すべてのPOSTROUTINGルールを削除し、すべてのパケットにマスカレードのみを追加したためです。

sysctl net.ipv4.conf.all.forwarding=1
iptables -P FORWARD ACCEPT
iptables -t nat -A  PREROUTING -d 10.0.0.0/24 -j DNAT --to-destination 172.18.0.2
#delete existent POSTROUTING rule (only the rule at line one)
iptables -t nat -D POSTROUTING 1
#add masquerade rule for all
iptables -t nat -A POSTROUTING -j MASQUERADE

そして、結果のNATテーブルは次のようになりました:

Chain PREROUTING (policy ACCEPT 840 packets, 89942 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      606 42480 DOCKER-INGRESS  all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL
2      353 27496 DOCKER     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL
3        9   540 DNAT       all  --  *      *       0.0.0.0/0            10.0.0.0/24          to:172.18.0.2

Chain INPUT (policy ACCEPT 402 packets, 61889 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 20 packets, 1200 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       20  1200 DOCKER-INGRESS  all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL
2        1    60 DOCKER     all  --  *      *       0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      710 44373 MASQUERADE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain DOCKER (2 references)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 RETURN     all  --  docker0 *       0.0.0.0/0            0.0.0.0/0           
2        0     0 RETURN     all  --  ecommerce_br0 *       0.0.0.0/0            0.0.0.0/0           
3        0     0 RETURN     all  --  docker_gwbridge *       0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-INGRESS (2 references)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8089 to:172.18.0.2:8089
2        0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8084 to:172.18.0.2:8084
3        0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8083 to:172.18.0.2:8083
4        0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8082 to:172.18.0.2:8082
5        0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8081 to:172.18.0.2:8081
6        8   480 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.18.0.2:8080
7        0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8079 to:172.18.0.2:8079
8        3   180 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:2181 to:172.18.0.2:2181
9       72  4320 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:9092 to:172.18.0.2:9092
10     108  6480 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8761 to:172.18.0.2:8761
11      73  4380 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:5432 to:172.18.0.2:5432
12     362 27840 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           
0
brevleq