Контейнер Docker подключает iptables к прокси
У меня есть два VPS, первая машина (прокси-сервер) предназначена для прокси, а вторая машина (док-станция) - это хост докера. Я хочу перенаправить весь трафик, генерируемый внутри самого док- контейнера, через прокси, чтобы не подвергать стыковочные машины общедоступным IP-адресам.
Так как соединение между VPS осуществляется через Интернет, локальное соединение отсутствует, и туннель между ними создал ip tunnel следующим образом:
На прокси:
ip tunnel add tun10 mode ipip remote x.x.x.x local y.y.y.y dev eth0
ip addr add 192.168.10.1/24 peer 192.168.10.2 dev tun10
ip link set dev tun10 mtu 1492
ip link set dev tun10 up
На доке:
ip tunnel add tun10 mode ipip remote y.y.y.y local x.x.x.x dev eth0
ip addr add 192.168.10.2/24 peer 192.168.10.1 dev tun10
ip link set dev tun10 mtu 1492
ip link set dev tun10 up
PS: Не знаю, можно ли использовать ip tunnel для производства, это другой вопрос, так или иначе планируя использовать libreswan или openvpn в качестве туннеля между VPS.
После этого добавили правила SNAT в iptables на VPS и некоторые правила маршрутизации следующим образом:
На прокси:
iptables -t nat -A POSTROUTING -s 192.168.10.2/32 -j SNAT --to-source y.y.y.y
На доке:
iptables -t nat -A POSTROUTING -s 172.27.10.0/24 -j SNAT --to-source 192.168.10.2
ip route add default via 192.168.10.1 dev tun10 table rt2
ip rule add from 192.168.10.2 table rt2
И, наконец, что не менее важно, была создана докерская сеть с одним тестовым контейнером, следующим образом:
docker network create --attachable --opt com.docker.network.bridge.name=br-test --opt com.docker.network.bridge.enable_ip_masquerade=false --subnet=172.27.10.0/24 testnet
docker run --network testnet alpine:latest /bin/sh
К сожалению, все это закончилось безуспешно. Так что вопрос в том, как это отладить? Это правильный путь? Как бы вы сделали перенаправление через прокси?
Несколько слов о теории: трафик из подсети 172.27.10.0/24 соответствует правилу SNAP iptables, IP-адрес источника меняется на 192.168.10.2. По правилу маршрутизации он проходит через устройство tun10, это туннель. И запускает другое правило SNAP iptables, которое меняет IP на yyyy и, наконец, отправляется по назначению