Как заставить изображения 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.