Как заставить изображения Docker использовать мой прозрачный / перехватывающий кальмар на хосте, не касаясь изображений Docker?

У меня есть экземпляр Squid, работающий на моем сервере, который подключен к 192.168.178.0/24 через eth0 с 192.168.178.26 и служит шлюзом для локальной сети 192.168.179.0/24 через p18p1 с 192.168.179.1, я использую

sudo iptables -t nat --append squid --match owner ! --uid-owner 171 -p tcp --dport 80 --jump DNAT --to 192.168.178.26:3128
sudo iptables -t nat --append PREROUTING -i p18p1 ! -s 192.168.179.1 -p tcp --dport 80 --jump DNAT --to 192.168.178.26:3128
sudo iptables --append FORWARD -s 192.168.179.0/24 -d 192.168.179.1 -i p18p1 -o p18p1 -p tcp --dport 3128 --jump ACCEPT

перенаправить трафик из локальной сети и шлюза в Squid, который имеет url_rewrite_program настроен, который затем перенаправляет запросы на .deb пакеты к 192.168.178.26:3142 где apt-cacher-ng прослушивает и обслуживает запрос (171 является идентификатором apt-cacher-ng пользователь системы). Эта настройка хорошо работает для клиентов шлюза и локальной сети, работающих под управлением Ubuntu, а также для компьютеров VirtualBox с NAT или мостовыми сетями. Однако не для Докера, независимо от того, какой --network указан режим (наверное, можно ожидать, так как виртуализация отличается от VirtualBox).

Я старался

sudo iptables -t nat --append squid --match owner ! --uid-owner 171 -p tcp --dport 80 --jump DNAT --to 192.168.178.26:3128
sudo iptables -t nat --append PREROUTING -i docker0 ! -s 172.17.0.1 -p tcp --dport 80 --jump DNAT --to 192.168.178.26:3128
sudo iptables --append FORWARD -s 172.17.0.0/16 -d 172.17.0.1 -i docker0 -o docker0 -p tcp --dport 3128 --jump ACCEPT

но это не имеет никакого эффекта (мой тест sudo docker run -it --network="bridge" ubuntu:zesty и внутри докера я бегу apt-get update && apt-get install --yes gcc)

Итак, просто чтобы убедиться: я не хочу запускать squid внутри Docker. Это неплохая идея, но squid отлично работает на хосте, и я не хочу касаться этой рабочей системы. Изменение образов Docker (я полагаю, я мог бы просто добавить несколько iptables операторы для подпрограммы запуска) не вариант, потому что они все еще должны использоваться в удаленных службах CI.

я использую squid SQUID_4_0_16-455-gc672a58b2 установлен из источника в Ubuntu 17.04.

0 ответов

Другие вопросы по тегам