如何让 Docker 镜像在主机上使用我的透明/拦截 squid 而不接触 Docker 镜像?

如何让 Docker 镜像在主机上使用我的透明/拦截 squid 而不接触 Docker 镜像?

我的服务器上运行着一个 squid 实例,它通过 连接到 ,并192.168.178.0/24充当eth0LAN的192.168.178.26网关。我使用192.168.179.0/24p18p1192.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

将来自 LAN 和网关的流量重定向到已配置的 squid,url_rewrite_program然后将对.deb包的请求重定向到正在监听和服务请求的192.168.178.26:3142位置apt-cacher-ng(171 是系统用户的 ID apt-cacher-ng)。此设置适用于运行 Ubuntu 的网关和 LAN 客户端以及具有 NAT 或桥接网络的 VirtualBox 计算机。但是不适用于 Docker,无论--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在docker内部运行apt-get update && apt-get install --yes gcc

因此,为了确保万无一失,我不想在 Docker 中运行 squid。这不是一个坏主意,但 squid 在主机上运行良好,我不想触碰这个工作系统。更改 Docker 映像(我想我可以简单地iptables在启动例程中添加一些语句)不是一个选择,因为它们仍然应该可用于远程 CI 服务。

我正在使用squid从 Ubuntu 17.04 上的源代码安装的 SQUID_4_0_16-455-gc672a58b2。

相关内容