1

Моя среда разработки использует док-узел Swarm с множеством микросервисов внутри. Мне нужно, чтобы микросервисы, работающие на моей машине, связывались с микросервисами, работающими внутри докера, однако у меня возникают некоторые проблемы для правильной маршрутизации пакетов. Когда ip-адрес контейнеров меняется, когда я перезагружаю докер-сервер, я пытаюсь использовать шлюз для маршрутизации пакетов. Используя эти правила, я могу пропинговать любой микросервис, какой захочу:

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, и я использую IP-адрес шлюза 172.18.0.1. Проблема в том, что я не могу найти способ обработки пакетов ответов, так как не знаю, какой источник я должен указать в правиле:

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

Есть ли способ, которым я могу пометить пакет и установить исходный IP на основе этой метки? Что я могу сделать, чтобы правильно проложить маршрут?

1 ответ1

0

Я изменил правило DNAT, указав на 172.18.0.2, так как это ip Docker использует для сопоставления портов всех узлов, удалил все правила 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           

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .