Прозрачное проксирование одного контейнера docker к другому контейнеру docker

Спасибо всем вам за то, что нашли время ответить. По сути, то, что я пытаюсь сделать, - это прокси-сервер исходящий/исходящий движение 2-го контейнера (записка: Я есть НЕ пытаюсь прокси-сервер для входящего трафика, поэтому не могу использовать Apache mod_proxy или Nginx proxy_pass. Эти модули работают для входящего трафика). 1-й контейнер запускает прокси-службу на порту 8080.

Как предположил Тьерно, я могу использовать переменные http_proxy и https_proxy ENV для прокси исходящего трафика, но, к сожалению НЕ все приложения / службы, запущенные в вашей операционной системе, учитывают эти переменные среды http_proxy и https_proxy. Существуют приложения, которые принудительно пропускают настройки прокси-сервера. Это причина, по которой я хотел использовать iptables для обеспечения соблюдения правил дорожного движения. Таким образом, ни одно приложение / служба не может пропустить прокси-сервер.

Ошибка, которую я допустил в предыдущих настройках вопроса, заключается в том, что я пытался перенаправить входящий трафик на порт 80 на 8080 прокси-сервера. Поскольку в 1-м контейнере нет никакого входящего трафика, он не будет работать, и это логически неправильно ПРЕДВАРИТЕЛЬНО маршрутизировать/ПЕРЕНАПРАВЛЯТЬ трафик чтобы достичь того, что я искал. Чтобы маршрутизировать исходящий / исходящий трафик, нам нужно использовать ВЫХОДНАЯ цепочка из iptables.

Мое Решение:

Я использовал комбинацию RedSocks с iptables для принудительного использования прокси-сервера для полного исходящего трафика с сервера. Вот конфигурация iptables, которую я использовал:

# Создайте новую цепочку для RedSocks

root# iptables -t nat -N REDSOCKS

# Игнорировать локальные сети и некоторые другие зарезервированные адреса

root# iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURNroot# iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURNroot# iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURNroot# iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURNroot# iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURNroot# iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURNroot# iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURNroot# iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN

# Перенаправить весь http на локальный порт redsocks

root# sudo iptables -t nat -A REDSOCKS -p tcp --dport 80 -j REDIRECT --to-ports 12345

# для трафика https просто замените порт 80 на 443

# Используйте всю цепочку REDSOCKS для всего исходящего трафика на eth0

root# sudo iptables -t nat -A OUTPUT -p tcp -o eth0 -j REDSOCKS

Теперь настройте redsocks на прослушивание локального порта 12345 для входящего трафика и перенаправление его на IP и порт прокси-сервера. Чтобы сделать это редактировать redsocks.conf как это,

redsocks {local_ip = 127.0.0.1;local_port = 12345;ip = 172.17.0.4;port = 8080;type = http-relay;}

просто сохраните конф и перезапустите службу redsocks. Теперь весь исходящий трафик, исходящий из 1-го контейнера, будет принудительно использоваться для использования прокси-сервера. (записка: Я использовал iptables-persistent для сохранения правил при перезагрузках сервера) На самом деле я реализовал то же самое как для http, так и для https-трафика, добавив еще одну строку в конфигурацию iptables. Хотя это не прозрачный прокси-сервер, он выполняет эту работу за меня.

Если у кого-нибудь есть какие-либо другие альтернативные решения этой проблемы, пожалуйста, предложите.