Loading... ## 前言 记录下SSH端口转发的一些实践案例 ## Docker官方源加速 --- SSH动态端口转发功能, 会在当前主机A与目标主机B之间建立一条加密通信隧道, 将所有发送到本地指定端口的流量经过目标主机B转发出去(socket5代理). Docker官方源的访问速度在国内一直不理想, 由此国内催生了很多镜像加速站点. 但时间来到2024.06, 国内官方禁止这些站点提供服务, 导致主流镜像站点纷纷响应,停止服务. 一些个人搭建的或许还能使用, 但是安全性与方便性都不可同日而语. 这里提供一种临时SSH加密隧道实践方案, 实现加速Docker官方源国内访问. * 环境要求: 一台在海外可以正常访问Docker源的服务器, 作为`目标主机B`; 可以购买自阿里云/腾讯云海外区域ECS主机(临时使用, 按量付费模式更划算), 也可以是其它国外VPS厂商 环境 * 主机A: 北京腾讯云小主机, Debian系统部署宝塔面板, 集成了Docker * 主机B: 日本软银机房小主机, 可以正常访问海外网络 配置好A到B主机的SSH秘钥登录后, 在A主机上继续进行如下操作 ```bash # 示例A主机 # 绑定本地未使用的端口: -D 19999 # 示例B主机 # 用户:IP端口 root@45.78.50.61 -p 6102 # -fN: 建立SSH连接后转入后台运行 # -C: 压缩, 大文件传输时有效加速 # ssh通信有时因为各种原因被中断但是客户端并不能及时知道, # 这里设置这2个参数来-o ServerAliveInterval=30 -o ServerAliveCountMax=3, # 在与服务端多次通信无响应时,客户端就自动断开连接并退出 root@VM-16-16-ubuntu:~# ssh -fN -C -D 19999 root@45.78.50.61 -p 6102 -o ServerAliveInterval=30 -o ServerAliveCountMax=3 # 以下可选(使用完毕后, 结束隧道) # 1. 直接结束建立隧道的终端 # 2. 查找对应的进程并结束, 如下 root@VM-16-16-ubuntu:~# lsof -i :19999 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ssh 3428483 root 4u IPv6 1010888182 0t0 TCP ip6-localhost:19999 (LISTEN) ssh 3428483 root 5u IPv4 1010888183 0t0 TCP localhost:19999 (LISTEN) root@VM-16-16-ubuntu:~# kill 3428483 ``` Docker配置更新 * Docker软件本身支持代理, 如下所示加入相关内容重启服务即可 ```bash # 配置更新 root@VM-16-16-ubuntu:~# vim /etc/docker/daemon.json """ { "proxies": { "https-proxy": "socks5://127.0.0.1:19999" } } """ # 重启服务 root@VM-16-16-ubuntu:~# systemctl restart docker ``` 测试 ```bash root@VM-16-16-ubuntu:~# docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ root@VM-16-16-ubuntu:~# ``` <span style='color:red'>小结: 对于软件本身支持代理配置的, 可以如Docker代理配置一般, 便捷快速实现我们的代理上网需求.</span> ### 扩展 --- * 对于一些配置代理比较麻烦或者不支持代理的软件, 可以结合`proxychains`工具简化使用 * 通用操作: 主机A与主机B建立好了动态端口转发 安装&配置 ```bash # 在主机A中继续如下配置与操作 # 安装 apt-get install proxychains -y # 编辑配置文件 vim /etc/proxychains.conf """ # 注释最后一行, 并且新增如下配置 #socks4 127.0.0.1 9050 socks5 127.0.0.1 19999 """ # 在主机A上需要使用代理的场景测试 # 如curl, wget, git等, 使用格式为在正常命令前添加 proxychains即可 # IP定位显示主机B的 root@VM-16-16-ubuntu:~# proxychains curl myip.ipip.net ProxyChains-3.1 (http://proxychains.sf.net) |DNS-request| myip.ipip.net |S-chain|-<>-127.0.0.1:19999-<><>-4.2.2.2:53-<><>-OK |DNS-response| myip.ipip.net is 104.22.31.153 |S-chain|-<>-127.0.0.1:19999-<><>-104.22.31.153:80-<><>-OK 当前 IP:45.78.50.61 来自于:日本 大阪府 大阪 it7.net # IP定位显示主机A的 root@VM-16-16-ubuntu:~# curl myip.ipip.net 当前 IP:62.234.12.26 来自于:中国 北京 北京 电信 root@VM-16-16-ubuntu:~# # 如果需要对如下执行的所有命令都进行代理, 可以使用proxychains bash 创建一个新的全部走代理的shell # 同理, 如果想打开一个全部代理的浏览器, 可以proxychains Firefox创建 ``` THE END 本文作者:将夜 本文链接:http://zoe.red/2024/536.html 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。 最后修改:2024 年 08 月 21 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏