远程服务器上的Docker容器通过本机Clash联网

​目录

远程服务器上的Docker容器连接本机代理客户端,解决服务器无法访问外网问题。这里以Clash为例,v2ray、shadowsocks等同理。

首先要能够通过SSH连接容器

容器配置sshd启动容器# IMAGE替换为相应的IMAGE ID docker run -it IMAGE bash下载openssh-server# 容器内部执行 apt update apt-get install openssh-server修改配置文件中的PermitRootLogin prohibit-password这一行,改为PermitRootLogin yes # 容器内部执行 vim /etc/ssh/sshd_config启动ssh服务,然后为 root 设置密码,否则无法用 ssh 连接# 容器内部执行 service ssh start # 启动sshd passwd # 设置密码

2. 查看容器的IP

主机为每个容器分配了局域网IP,可以用下面的命令查看# CONTAINER替换为相应的CONTAINER ID,可以用 docker ps 查看 docker inspect -f {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} CONTAINER # 172.17.0.6

3. 主机通过上面的IP就能连接容器了

ssh [email protected] # 输入 passwd 设置的密码

4. 利用跳板机原理就可以使本地连接容器了

在本地~/.ssh/config中写入配置Host DOCKER # 取名随便 HostName 172.17.0.6 # 容器的局域网IP Port 22 ProxyJump REMOTE # REMOTE为远程主机地址:user@ip:port本地连接容器ssh DOCKER

利用端口转发将容器的网络代理到本机Clash端口

查看本机代理客户端的端口我用的是 clash for windows,代理端口是127.0.0.1:7890

2. 配置端口转发(把容器内的15980端口转发到本机代理的端口)

ssh -R 15980:127.0.0.1:7890 DOCKER # DOCKER在config中已经配置了

3. 最后,在容器内配置代理

# 容器内执行 export ALL_PROXY=socks5://127.0.0.1:15980

可以使用Proxychains全局代理

对于git等不走终端代理的应用,可以用Proxychains进行全局代理[1]

安装sudo apt-get install -y proxychains4

2. 配置

安装完后可以找到/etc/proxychains4.conf文件进行修改,一般下翻到最后添加代理服务器即可[ProxyList] # add proxy here ... # meanwile # defaults set to "tor" socks5 127.0.0.1 15980

3. 使用方式

在命令前添加proxychains4即可,比如要运行git clone [email protected]:rofl0r/proxychains-ng.git,则输入:proxychains4 git clone [email protected]:rofl0r/proxychains-ng.git 注意:Proxychains和 ALL_PROXY 不能混用,使用Proxychains需要先 unset ALL_PROXY

参考

^Proxychains参考博客