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 ...
随机推荐
- Node.js 使用
创建 Node 项目 npm init -y # 初始化 Node 项目 package.json 文件 这个文件记录了项目的相关信息. { "name": "hello ...
- Python新手爬虫四:爬取视频
老样子,先上最后成功源码(在D盘下创建'好看视频'文件夹,直接运行即可获取视频): import sys import re,os import requests from you_get impor ...
- pyinstaller 打包成 exe
生成 spec 和可执行文件: pyinstaller --onefile your_file.py 如果需要修改生成的spec文件,则后续可以这样运行: pyinstaller -F your_fi ...
- SQL无法解决排序规则 Chinese_PRC_CI_AS 和 Latin1_General_CI_AS 的冲突
最近在执行一些跨库关联查询语句的时候提示了 "Cannot resolve the collatior conflict between "Chinese_PRC_Ci As&qu ...
- ZEGO 即构科技首发适配鸿蒙系统的 Express SDK 1.0 版本
2019年8月,华为在开发者大会上正式发布鸿蒙系统. HarmonyOS 鸿蒙系统是一款"面向未来".面向全场景(移动办公.运动健康.社交通信.媒体娱乐等)的分布式操作系统.在 ...
- JavaScript – Generator Function
参考 阮一峰 – Generator 函数的语法 介绍 Generator Function 是一种特别的函数, 它让函数有一种分阶段执行的能力. 一般的函数, 你调用它, 它执行所有函数内的代码, ...
- 【Abyss】Android 平台应用级系统调用拦截框架
Android平台从上到下,无需ROOT/解锁/刷机,应用级拦截框架的最后一环 -- SVC系统调用拦截. ☞ Github ☜ 由于我们虚拟化产品的需求,需要支持在普通的Android手机运行.我们 ...
- C++ const常量指针
const常量指针 const是C++关键字,译为常量,const指针即为常量指针. 分为三类 指向const的指针 const指针 指向const的const指针 指向const的指针 表示指向区域 ...
- 线段树与离散化技巧 Mayor's posters——poj 2528
问题描述: 有一堵海报墙,从左到右一共有10000000个小块,墙上贴了许多海报,每张海报的高度与墙的高度相同,宽度不同,新帖的海报会将原有的海报覆盖,问当所有人把海报贴完是,墙上可以看到几张海报 输 ...
- Python 潮流周刊#70:微软 Excel 中的 Python 正式发布!(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...