我的服务器上运行着一个 squid 实例,它通过 连接到 ,并192.168.178.0/24
充当eth0
LAN的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
将来自 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。