Один из общих способов найти что-то подобное - это захват списков процессов до и во время выполнения программы.
пс-А | sort> before.txt
ps -A | sort> during.txt
Когда у вас есть путь к процессу, используйте dpkg -S / path / to / file
, чтобы определить, какой пакет владеет файлом .
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
, либо используйте любой пакет, предоставляемый вашим дистрибутивом, для сохранения правил.