@Rollex

Docker доступ в интернет через другой контейнер?

Как создать сеть через docker-compose между двумя контейнерами, чтобы контейнер A имел доступ в интернет через контейнер B?
Контейнером В у меня будет redsocks который будет собирать весь трафик приходящий в него и направлять в прокси сервер.
  • Вопрос задан
  • 777 просмотров
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Если нужно завернуть трафик не через обычный шлюз в штатной докер-сети, а через один из контейнеров, то это с помощью системы подпорок и растяжек таки можно сделать.

1. В конфигурацию контейнеров добавить:

cap_add:
  - NET_ADMIN


Это необходимо, так как по умолчанию внутри контейнера нельзя конфигурировать сеть. Ну и redsocks, скорее всего, без этого может не заработать.

2. В скрипте внутри первого контейнера или в entrypoint добавить прописывание роута:

ip route replace default via IP_другого_контейнера

IP второго контейнера лучше зафиксировать. Либо, как вариант, узнавать его через dig (тут контейнер имеет имя router, и нужно через параметр links разрешить к нему доступ):

ip route add default via `dig +short router`

3. В контейнере-роутере надо настроить nat и форвардинг. Примерно так:

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 172.18.0.0/24 -j MASQUERADE


Тут можно тоже какими-нибудь командами угадать нужную сетку, чтобы не завязываться на фиксированные IP. Например, так:

network=$(ip route list|grep scope\ link|cut -d ' ' -f 1)


Ну а вообще такие манипуляции - вряд ли хорошая практика. Лучше сразу закладывать в разрабатываемом софте нативную работу через прокси, если это необходимо.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы