Privoxy Docker SSH Tunneling¶
我在 Android 手机上采用 Privoxy Android SSH Tunneling 也是一种简洁的通用方法,例如,对于物理主机运行 Gentoo Linux 是非常容易设置 SSH Tunneling: 动态端口转发 为 Firefox 设置 越过长城 。但是,对于 Gentoo Docker 众多的虚拟容器,显然也需要一个通用的代理方式,以满足容器的无阻碍访问互联网:
物理主机启动 SSH Tunneling: 动态端口转发 提供本地回环地址 socks 代理
物理主机 Gentoo Linux 上安装 Privoxy代理服务 并设置上游代理为本地 socks5 代理,这样只要访问这个
privoxy
的客户端都能科学上网: 注意privoxy
仅对以下2个地址绑定服务:127.0.0.1
本地回环地址172.17.0.1
Docker的NAT网络地址,这样运行容器访问这个IP地址8118
就能够使用物理主机代理
配置 Docker客户端的Proxy ,这样每个运行的docker容器都会注入代理配置
启动SSH Tunneling¶
在物理主机上执行简单的一条命令构建起本地socks代理,创建SSH Tunnel:
ssh -D 1080 -C user@vpn.example.com
安装和运行privoxy¶
我的 Gentoo Linux 安装
privoxy
(其他发行版安装方法不同,但后续配置方法相同):
emerge --ask net-proxy/privoxy
配置
/etc/privoxy/config
设置绑定IP以及上游socks5代理:
...
listen-address 127.0.0.1:8118
listen-address 172.17.0.1:8118
...
permit-access localhost
permit-access 172.17.0.0/24
forward-socks5 / 127.0.0.1:1080 .
启动
privoxy
服务(注意,我的 Gentoo Linux 使用的是 OpenRC 服务管理):
rc-service privoxy start
rc-update add privoxy default
配置 Docker客户端的Proxy¶
配置
~/.docker/config.json
设置指向privoxy代理:
{
"proxies":
{
"default":
{
"httpProxy": "http://172.17.0.1:8118",
"httpsProxy": "http://172.17.0.1:8118",
"noProxy": "*.baidu.com,192.168.0.0/16,10.0.0.0/8"
}
}
}
则创建的docker容器会注入代理配置的环境变量
如果上述docker代理配置注入无效,则手工配置容器环境变量添加如下 :
export HTTP_PROXY="http://172.17.0.1:8118"
export HTTPS_PROXY="http://172.17.0.1:8118"
export http_proxy="http://172.17.0.1:8118"
export https_proxy="http://172.17.0.1:8118"