【问题标题】:Docker redsocks proxy behind HTTP proxy with no internet DNSHTTP 代理后面的 Docker redsocks 代理,没有互联网 DNS
【发布时间】: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

【问题讨论】:

标签: proxy docker iptables


【解决方案1】:

这适用于 Ubuntu Xenial 主机。

在您的主机上,在连接信息下,获取您当前的 DNS 地址;就我而言,172.21.17.212172.21.17.210

/etc/default/docker 下,添加DOCKER_OPTS 上的DNS 地址:

DOCKER_OPTS="--dns 172.21.17.212 --dns 172.21.17.210"

使用以下内容创建/etc/systemd/system/docker.service.d/ubuntu.conf

[Service]
EnvironmentFile=/etc/default/docker
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS

然后:

sudo systemctl daemon-reload
sudo systemctl restart docker

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    相关资源
    最近更新 更多