Docker配置Trojan代理

news/2024/10/24 0:08:51

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

参考:Linux命令行使用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,成功了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/75282.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

为什么大部分 PHP 程序员做不了架构师?

架构师一直是 PHP 程序员中梦寐以求的职位,它可望而不可及。我想大部分的 PHP 程序员心中都有一个架构师梦,但是这个梦基本上很难实现,梦终究还是梦,这是多么痛的领悟。大家好,我是码农先森。 架构师一直是 PHP 程序员中梦寐以求的职位,它可望而不可及。我想大部分的 PHP…

10.23每日总结

上次的正课可以说给了我极大的挑战,期中考试的复杂图形化可互动增删改查系统例题我可以说是毫无头绪,而选课系统在多方援助下也算大概完成,数据库、Java语言、编程深入结合,属实是我万万没想到的难度,还需努力,加油!!!

SMMU学习这一篇就够了

前言 最近朋友圈、微信群(ARM-Trustzone-TEE-AT)掀起一阵学习SMMU的热潮,作为一名安全领域的渣渣 ,势必要蹭一蹭这个“热点”,也学习一下吧,反正早晚都要学,因为它和安全的关系还是比较大的。学习是一件长期的过程,本文就先简单理一下概念吧。 1、SMMU总结 1.1、SMMU的ti…

Linux 的系统信息命令

Linux 查看操作系统、内核、服务器架构、CPU、GPU、内存和磁盘信息等命令。Author: ACatSmiling Since: 2024-10-22操作系统信息:方式一:uname -a。uname是 "Unix Name" 的缩写,这个命令主要用于打印与系统相关的信息,-a是 uname 命令的一个选项,这个选项的作用…

一个著名的日志系统是怎么设计出来的

原文:一个著名的日志系统是怎么设计出来的1 前言 Java 帝国在诞生之初就提供了集合、线程、IO、网络等常用功能,从 C 和 C++ 领地那里吸引了大量程序员过来加盟,但是却有意无意地忽略了一个重要的功能:输出日志。 对于这一点,IO 大臣其实非常清楚,日志是个很重要的东西,…

实验三蕉 C语言函数应用编程蕉

实验三蕉 C语言函数应用编程蕉可恶,是原始博士!什么时候!?😖😫额啊,我,我是,呃,香蕉?🤔对,我是香蕉🍌😃香🐵香🐵香🐵香🐵香🐵香🐵🍌蕉🍌蕉🍌蕉🍌蕉🍌蕉🍌蕉香🐵香🐵香🐵香🐵香🐵香🐵🍌蕉🍌蕉🍌蕉🍌蕉🍌蕉�…

Cookie、Session、Token三者的区别

在数字世界的茫茫人海中,每一次点击、每一次登录,都伴随着身份认证与数据安全的较量。今天咱要来一场惊心动魄的技术探秘之旅,今天我要带你深入探索Web开发中那三个绕不开的名字——Cookie、Session、Token,它们不仅仅是技术名词,更是构建安全、高效用户交互的基石,看看它…

20222417 2024-2025-1 《网络与系统攻防技术》实验三实验报告

1.实践内容 1.1实验目的 (1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件 veil,加壳工具 使用C + shellcode编程 (2)通过组合应用各种技术实现恶意代码免杀 如果成功实现了免杀的,简单语…