Docker配置Trojan代理
1、遇到的问题
在做云计算作业,使用阿里云的ECS服务器尝试使用docker拉取镜像的时候,发现一直无法从仓库拉取,更换了多个镜像源也没有解决问题,于是决定学会去配置linux的代理,记录过程。
2、安装Trojan
何为Trojan?
Trojans是一种加密的代理协议,全称为Trojan-GFW,是目前最成功的代理加速伪装技术之一。
Trojan的工作原理?
Trojan通过监听443端口,模仿互联网上最常见的HTTPS协议,把合法的Trojan代理数据伪装成正常的HTTPS通信,并真正地完整完成TLS握手,以诱骗GFW认为它是HTTPS,从而不被识别。
为什么使用Trojan?
首先主要原因是因为我使用的提供代理的网站大部分的连接都是采用了Trojan协议的。其次Trojan协议本身并不能被Docker识别,为了让Docker使用代理,需要借助Trojan客户端工具接收Docker发出的http协议的请求,再输出出去。
我们使用指令wget https://github.com/trojan-gfw/trojan/releases/download/v1.16.0/trojan-1.16.0-linux-amd64.tar.xz从Github下载Trojan的预编译二进制文件。
下载成功后,使用tar -xvf trojan-1.16.0-linux-amd64.tar.xz解压下载的文件夹。
使用sudo mv trojan /usr/local/bin/移动到可执行文件路径,并且使用sudo mkdir /etc/trojan创建配置文件目录。
使用/usr/local/bin/trojan/trojan -v可以检测是否安装成功。
3、配置Trojan
创建并编辑配置文件 /etc/trojan/config.json,将你的代理信息填入其中,配置文件内容如下:
{
"run_type": "client",//运行类型
"local_addr": "127.0.0.1",//本地监听地址
"local_port": 1080,//本地监听端口
"remote_addr": "***",//服务端的ip或域名
"remote_port": ***,//服务端的ip或端口
"password": [
"***"//对应服务端设置的密码
],
"ssl": {//ssl证书配置
"sni": "***"
}
//若不需要ssl证书配置,请配置如下文
// "ssl": {
// "verify": false,
// "sni": "***"
//}
}
使用如下命令后台运行Trojan。
/usr/local/bin/trojan/trojan -c /etc/trojan/config.json &
使用如下命令可以杀死Trojan进程。
pkill -f trojan
此时,Trojan客户端就会在本地启动一个SOCKS5代理服务,将Trojans流量转换成SOCKS5代理,监听127.0.0.1:8080。
4、为Docker配置代理
我们在docker的/etc/docker/daemon.json文件下添加如下配置
{
"proxies": {
"http-proxy": "http://127.0.0.1:1080",
"https-proxy": "http://127.0.0.1:1080",
"no-proxy": "localhost,127.0.0.1"
}
}
然后使用sudo systemctl restart docker重新启动docker,现在配置已经完成。
再次测试docker run hello-wolrld,查看是否成功。
哈哈!失败了。
信息显示连接失败了,那么我们需要进行错误排查。
我们使用如下命令来检查能否使用SOCKS5协议向docker仓库发送信息。
curl -x socks5://127.0.0.1:1080 https://registry-1.docker.io/v2/
[2024-10-23 22:51:23] [INFO] 127.0.0.1:49036 requested connection to 157.240.17.41:443
[2024-10-23 22:51:25] [INFO] 127.0.0.1:49036 disconnected, 3422 bytes received, 213 bytes sent, lasted for 2 seconds
curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
可以看到,失败的原因是因为证书认证失败,我们换一个网站进行测试,检查我们的代理是否面对任何网站都会认证失败,如果是那就说明是我们的Trojan客户端配出了问题。
curl -x socks5://127.0.0.1:1080 https://www.example.com
结果成功返回了一个示例,那么说明我们的代理配置是没有问题的,应该是使用的协议出了问题导致docker仓库无法识别我们的证书。
查阅资料,继续了解其代理过程,了解到Trojan客户端实现的具体原理是向本地提供了一个基于SOCKS5协议的代理服务,应用程序的流量将会发送到这个代理上,接着Trojan服务器再将流量通过Trojan协议传输到目的地上。而Docker的代理配置中,我们配置了https和http协议的代理流量发送地点,这可能是因为SOCKS5协议和http协议产生了一点冲突,导致证书不能被正确识别。为了解决这个问题,我们可以再加一层中间件,负责将https协议的流量转换成SOCKS5协议的流量,就能正确处理https的请求。

5、安装配置Privoxy
使用如下命令在centOS上安装Privoxy
sudo yum install privoxy
接着配置/etc/privoxy/config这个文件,将Privoxy连接到本地的SOCKS5代理。
forward-socks5 / 127.0.0.1:1080 .
然后启动Privoxy
sudo systemctl start privoxy
sudo systemctl enable privoxy
Privoxy 默认会监听本地的 8118 端口,这意味着你可以将应用程序的 HTTP/HTTPS 代理配置为 http://127.0.0.1:8118。
接着我们需要再次更改daemon配置,修改为如下
{
"proxies": {
"http-proxy": "http://127.0.0.1:8118",
"https-proxy": "http://127.0.0.1:8118",
"no-proxy": "localhost,127.0.0.1"
}
}
重启docker
sudo systemctl restart docker
最终我们再运行docker run hello-world,成功了。
Docker配置Trojan代理的更多相关文章
- docker配置代理的用户名密码
公司访问外网全部需要经过代理服务器,在使用docker的过程中,发现就算为docker配置了代理,还是会因为没有代理服务器认证,导致pull操作失败,报如下错误: Error response fro ...
- Docker设置http代理
在国内由于不可描述的原因无法访问Google等网站,但是作为一枚挨踢人士,无法使用Google搜索,在使用Ctrl + C技能时是抓狂的:特别是当下Docker.Kubernetes等容器技术火热的时 ...
- centos7 docker使用https_proxy 代理配置
centos7 docker使用https_proxy 代理配置 背景: 内网的centos主机不能上网,通过同网段的windows设置代理上网,yum.conf配置http代理是可以的,但是dock ...
- Docker 配置代理
最近在k8s上部署helm 老提示无法下载镜像,因为伟大的祖国的长城Firewall....导致k8s根本玩不了..... 第一步:配置系统代理 # vim .bashrc export http_p ...
- 一文教您如何通过 Docker 搭建反向代理 Ngnix,并配置 Https SSL 证书
欢迎关注个人微信公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注附送 100G 海量学习资源哟!! 个人网站: https://www.exception.site/docker/h ...
- docker配置与实践#可以好好看看
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 L ...
- Docker配置整理
目录: 以非root用户身份管理Docker 配置Docker以在启动时启动 配置Docker守护程序监听连接的位置 以非root用户身份管理Docker 默认情况下,Docker运行权限由用户roo ...
- [转帖]龙芯:Docker 配置与实践清单
Docker 配置与实践清单 http://www.sohu.com/a/254904706_198222 文章对来官方文档及 Docker Links[1] 中链接内容进行归档整理,包含了日常工作中 ...
- Linux +Docker +Nginx 部署代理转发初探
很多开发人员仅仅只会码代码,如果让开发人员部署一些深入点的东西,或者做负载均衡等,很多开发人员估计就懵逼了,作为一个专业的开发还需要懂一些基本的运维知识:虽然说在互联网行业中,中小企业都有一个牛逼的运 ...
- 【Azure 应用服务】App Service For Container 配置Nginx,设置/home/site/wwwroot/目录为启动目录,并配置反向代理
问题描述 通过Docker Desktop for Linux,配置Nginx镜像后,自定义nginx.conf文件,修改启动目录和对 /out 路径的反向代理到博客园的博文地址 (https://w ...
随机推荐
- 什么是淘宝API?
淘宝API是淘宝开放平台提供给开发者的一系列应用程序编程接口,它们允许开发者访问和使用淘宝的数据和服务.通过这些API,开发者可以构建应用程序,实现商品信息检索.订单管理.用户行为分析.物流跟踪等 ...
- 在 Windows 中启用 Administrator 帐户
打开管理员终端. 启用: net user administrator /active:yes 关闭: net user administrator /active:no
- 一篇文章讲清楚Java中的反射
介绍 每个类都有一个 Class 对象,包含了与类有关的信息.当编译一个新类时,会产生一个同名的 .class 文件,该文件内容保存着 Class 对象. 类加载相当于 Class 对象的加载.类在第 ...
- Docker高级:Redis集群实战!4主4从缩容到3主3从,怎么处理?
在上一篇,我们学会了redis集群的扩容.从3主3从扩容到4主4从. 那么,接着,活动过去了.流量没有那么大了.需要缩容了.从4主4从缩容到3主3从了.那么这个时候又该怎么处理呢? PS本系列:< ...
- 公有云-实验一 实践腾讯云部署Web应用
实验一 实践腾讯云部署Web应用 概述 企业A需要搭建一套在互联网上发布的论坛平台,但是企业内部并没有完善的基础架构设施,难以保证论坛平台的高可用性和高安全性.经过IT部门相关专家分析讨论,决定在腾讯 ...
- C++ weak_ptr除了解决循环引用还能做什么?
C++: weak_ptr到底有什么用? 很多人对std::weak_ptr的认识只是不增加std::shared_ptr的引用计数,可以用来解决std::shared_ptr可能造成的循环引用问题. ...
- Node.js开发博客项目笔记-http请求处理(1)
处理get与post请求示例代码: const http = require('http'); const querystring = require('querystring'); const se ...
- JavaScript – 小技巧 Tips
1e6 等价于 1 + 后面 6 个零 console.log(1e6 === 1_000_000); 模拟 C# 的 Record Deconstruct class Size implements ...
- CSS – Icon
前言 Icon 并不容易搞. 市场有许多平台支持 Icon, 有些收费有些免费. 有些 icon 很丰富, 有些很缺失. 尤其是在做网站的时候寻找 icon 是一个挺累的事情. 这篇就来聊聊 icon ...
- Oracle 到 MySQL 函数替换方案汇总
常用函数和语法转换 NVL函数 Oracle语法: NVL(COUNT(*), 0) MySQL语法: IFNULL(COUNT(*), 0) 转字符串 Oracle语法: to_char ...