I want to redirect all traffic generated inside a docker container itself over proxy, to not exposure dock machines public IP.
Если это все, что вам нужно, вам не нужен NAT между двумя экземплярами Docker.
Вам необходимо включить переадресацию на экземпляре
proxy
(, например. через sysctl ).Если общедоступный IP-адрес
proxy
виден внутриproxy
, вам необходимо выполнить SNAT с этим общедоступным IP-адресом внутриproxy
, только (, а неdock
). Это также называется МАСКАРАД. Это стандартная установка, погуглите "masquerade".Если общедоступный IP-адрес
proxy
не виден внутриproxy
(, т. е. указан, когда вы выполняетеip addr
), потому что хостproxy
(или даже какой-то другой хост выше )выполняет NAT, тогда вам следует избегать двойного NAT и сделать так, чтобыdock
отображался для хоста как другой контейнер. Детали зависят от того, как настроена сеть на хосте (, который вы не назвали ), но в основном конец туннеля вdock
должен иметь IP-адрес в той же подсети, что и контейнеры наproxy
. ] хозяин.Туннель
ipip
не зашифрован; вы не должны использовать этот туннель, если транспорт полностью не находится внутри доверенной сети (, что, вероятно, не так, потому что вам, похоже, нужны разные общедоступные IP-адреса ).Поэтому используйтеOpenVPN
или простые в настройке альтернативы, такие как tinc .Libreswan
настроить не так-то просто.Редактировать
Шаг -на -шаг:
1 )Убедитесь, что туннель работает. На
proxy
выполнитеping 192.168.10.2
. Наdock
выполнитеping 192.168.10.1
. Выполните отладку с помощьюtcpdump
на всех промежуточных сетевых интерфейсах, к которым у вас есть доступ. Если туннель ipip -не работает, используйте другой туннель и заставьте его работать.2 )Удалить все правила
iptables
наdock
. Установите маршрут по умолчанию через туннель. Проверьте с помощьюip route get 8.8.8.8
, работает ли маршрут.3 )Предполагая, что
eth0
наproxy
имеет общедоступный IP-адрес, удалите всеiptables
правила, выполните:echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -i eth0 -o tun10 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -o eth0 -i tun10 -j ACCEPT
Здесь говорится: «Пересылать пакеты, маскировать все переадресованные пакеты, отправляемые на
eth0
, давая им общедоступный IP-адрес наeth0
в качестве адреса источника, и отслеживать их соединение. Пакеты изtun10
всегда можно перенаправить наeth0
, входящие пакеты наeth0
перенаправляются наtun10
, только если соединение было установленоdock
.Протестируйте, выполнив
ping 8.8.8.8
наdock
при выполненииtcpdump
наtun10
иeth0
наproxy
. Вы должны увидеть пересылаемые пакеты и перезаписываемый источник.4 )Как только все заработает, сделайте его постоянным :Отредактируйте
/etc/sysctl.conf
или файл в/etc/sysctl.d
, чтобы иметьnet.ipv4.ip_forward = 1
. Либо используйте сценарий запуска, чтобы добавить правилаiptables
, либо используйте любой пакет, предоставляемый вашим дистрибутивом, для сохранения правил.
Перейдите к системным настройкам Оформление окна и щелкните вкладку Кнопки заголовка .
Удалите значок гамбургера из заголовка.
Строка меню возвращается.