【发布时间】:2016-05-04 16:11:36
【问题描述】:
网络环境
- 没有可用的互联网 DNS
- Corporate squid 代理允许端口 3128 上的 HTTP 和 HTTPS 流量
Docker 环境
Docker 在 OS X 上 VirtualBox 内的 Ubuntu 15.04 客户机上运行。
一个容器docker-forgetproxy (https://github.com/k-labs/docker-forgetproxy) 在主机的网络基础设施之上运行redsocks,运行:
$ docker run -it --rm --net=host --privileged \
-e http_proxy=$http_proxy \
-e https_proxy=$https_proxy \
klabs/docker-forgetproxy
这会通过发出以下命令修改主机的 iptables 规则,其中 $1 设置为 A:
iptables -t nat -$1 PREROUTING -i docker0 -d 127.0.0.0/8 -j RETURN
iptables -t nat -$1 PREROUTING -i docker0 -d 169.254.0.0/16 -j RETURN
iptables -t nat -$1 PREROUTING -i docker0 -d 172.16.0.0/12 -j RETURN
iptables -t nat -$1 PREROUTING -i docker0 -d 192.168.0.0/16 -j RETURN
iptables -t nat -$1 PREROUTING -i docker0 -d 224.0.0.0/4 -j RETURN
iptables -t nat -$1 PREROUTING -i docker0 -d 240.0.0.0/4 -j RETURN
iptables -t nat -$1 PREROUTING -p tcp --dport 80 -i docker0 -j REDIRECT --to 12345 2>/dev/null
iptables -t nat -$1 PREROUTING -p tcp --dport 8080 -i docker0 -j REDIRECT --to 12345 2>/dev/null
iptables -t nat -$1 PREROUTING -p tcp --dport 53 -i docker0 -j REDIRECT --to 5300
iptables -t nat -$1 PREROUTING -p tcp -i docker0 -j REDIRECT --to 12346
并启动redsocks 与
base {
log_debug = off;
log_info = on;
log = "stderr";
daemon = off;
user = redsocks;
group = redsocks;
redirector = iptables;
}
redsocks {
type = http-relay;
ip = http://my-proxy;
port = 3128;
local_ip = 0.0.0.0;
local_port = 12345;
}
redsocks {
type = http-connect;
ip = http://my-proxy;
port = 3128;
local_ip = 0.0.0.0;
local_port = 12346;
}
dnstc {
local_ip = 127.0.0.1;
local_port = 5300;
}
问题
当我使用 docker run -it --rm ubuntu apt-get update 启动一个新的 docker 容器时,似乎容器的请求没有被重新路由到 redsocks 容器。
如果我将 DNS 服务器设置为docker0 iface 似乎被 172.16.0.0/12 iptables 规则捕获,因为今天它是 172.17.42.1
【问题讨论】:
-
更多信息请访问docker-forgetproxy github 页面