一、前期准备-配置上网

1.购置服务器

没啥好说的,去云平台买一个,阿里云或者腾讯云都行,我买的是阿里云的,所以这里以阿里云为例。

购买阿里云服务器的时候会让你选一些预制的镜像配置选择,这里不建议选择预制的Docker镜像,因为默认绑定了CentOS, 在CentOS上进行配置的时候遇到了诸多问题没有解决掉,最后还是选择安装了Ubuntu, 另外网上有许多CentOS的教程,亦可以参考进行配置。

2.配置代理

(1)安装shadow-socks

因为现在docker安装和拉取镜像都需要魔法上网,所以这里需要先给服务器配置个代理。Shadowsocks -libev

shell 复制代码
sudo apt update 
sudo apt upgrade  // 前两步可选,更新一下系统软件包
sudo apt install shadowsocks-libev // 安装shadowsocks

(2)从你的订阅链接解析shadowsocks的配置文件

安装成功以后找一个shadowsocks代理的订阅链接。 首先我在我找到我购买的一个订阅链接,类似于https://xxxxxxxx 这样的,然后直接访问可以得到一个base64的字符串,decode处理以后可以得到诸如ss://xxxxxx之类的订阅链接,比如下面这样的:

text 复制代码
ss://aaaaaaaa@bbb.ccc.dddd:8888/?plugin=simple-obfs%3Bobfs%3Dhttp%3Bobfs-host%3D89911fd7104f.microsoft.com#%F0%9F%87%AD%F0%9F%87%B0%20%E9%A6%99%E6%B8%AF%2001%E4%B8%A81x%20HK

这样的就是一个SS的代理链接,接下来需要从中解析出来我们需要的配置信息。

首先@符号之前的aaaaaaaa的部分是加密方式和密码,可以通过如下代码解析出来

javascript 复制代码
const url = 'aaaaaaaaa' // 需要处理的部分
const decodedBuffer = Buffer.from(url, 'base64').toString('utf-8');

function decrypt(data) {
  var bData = Buffer.from(data, 'base64')
  const iv = bData.slice(0, 12)
  const tag = bData.slice(-16)
  const cdata = bData.slice(12, bData.length - 16)
  const decipher = crypto.createDecipheriv('aes-192-gcm', keyStr, iv)
  decipher.setAuthTag(tag)
  var msg = decipher.update(cdata)
  const fin = decipher.final()
  const decryptedStr = new TextDecoder('utf8').decode(Buffer.concat([msg, fin]))
  return decryptedStr
}

最终得到的结果是aes-128-gcm:xxxxxxxx,冒号之前的部分是加密方式,之后的xxxxxx是密码。

然后@后面的部分bbb.ccc.dddd:8888是代理的服务器域名和端口。接着我们可以根据SS链接和解析出的数据添加一个配置文件config.json

json 复制代码
{
  "server": "aaa.bbb.ccc", // ss链接里的服务域名
  "server_port": 12024, // ss链接里的服务端口
  "local_port": 1080, // 自己服务器启动shadowsocks代理服务的端口
  "password": "xxxxxxxxx", // 密码
  "timeout": 300, // 超时时间
  "method": "aes-128-gcm", // 加密方式,要写SS链接上的,其他加密方式不一定支持
  "plugin": "obfs-local", // 用到的插件,如果没有还得另外安装
  "plugin_opts": "obfs=http;obfs-host=89911fd7104f.microsoft.com", // 插件的配置,复制链接上的就行,记得decode
}

接下来有了配置文件,我们可以在后台启动ss代理服务。首先在/etc/systemd/system/目录下新建一个ss-local.service文件,内容如下:

text 复制代码
[Unit]
Description=Shadowsocks Local Service
After=network.target

[Service]
ExecStart=/usr/bin/ss-local -c /etc/shadowsocks-libev/config.json // 这里是你的配置文件的路径
Restart=on-failure
User=root // 这里和下一行用root不用再单独设置权限
Group=root

[Install]
WantedBy=multi-user.target

(3)启动并检验代理服务

创建好文件以后使用启动ss服务

shell 复制代码
sudo systemctl start ss-local // 和你的.service文件名要一致
sudo systemctl enable ss-local // 设置开机自动启动
sudo systemctl status ss-local // 查看当前服务状态

如果查看服务的命令返回如图,说明ss服务已经正常启动了 如图只是证明ss服务正常启动了,我们还得测试一下我们的代理是不是真的能访问,输入命令测试一下

shell 复制代码
curl -x socks5h://127.0.0.1:1080 http://google.com

返回以上内容说明代理请求已经通了,也可以切换其他地址测试,比如www.google.com

(4)将socks5转为http代理

现在我们的代理虽然已经启用了,后面docker和jenkins需要http的代理,所以我们还得再处理一下。接下来我们需要安装gost。首先可以去github的gost项目页面根据自己的操作系统下载一个压缩包并解压,或者通过sudo apt install gost命令去安装。

安装完成以后可以通过chmod +x gost命令确保gost文件具有可执行权限。

接着在ss-local.service那个目录下新建一个gost.service文件,并配置如下内容:

shell 复制代码
[Unit]
Description=gost proxy
After=network.target

[Service]
ExecStart=/usr/local/bin/gost //你的gost的路径位置 -L http://:8888 //gost转化后的http代理的访问端口 -F socks5://:1080 //你的ss代理服务运行的端口
Restart=on-failure
User=root

[Install]
WantedBy=multi-user.target

配置完成以后用跟ss-local同样的方式启动gost服务,检查状态可以看到如图就是成功启动了 接着curl一下看看http代理是不是可以正常访问了

shell 复制代码
curl -x http://127.0.0.1:8888 http://google.com

跟ss-local一样,出现上图就是成功了

(5)注意事项

如果curl socks5或者http代理的时候出现curl: (52) Empty reply from server 说明ss代理可能挂了,去看看ss-local的服务状态,如果出现下面这种情况 一般通过systemctl restart ss-local重启一下服务就可以了

相关推荐
潜意识起点5 分钟前
精通 CSS 阴影效果:从基础到高级应用
前端·css
奋斗吧程序媛9 分钟前
删除VSCode上 origin/分支名,但GitLab上实际上不存在的分支
前端·vscode
IT女孩儿19 分钟前
JavaScript--WebAPI查缺补漏(二)
开发语言·前端·javascript·html·ecmascript
m0_748256563 小时前
如何解决前端发送数据到后端为空的问题
前端
请叫我飞哥@3 小时前
HTML5适配手机
前端·html·html5
@解忧杂货铺4 小时前
前端vue如何实现数字框中通过鼠标滚轮上下滚动增减数字
前端·javascript·vue.js
F-2H6 小时前
C语言:指针4(常量指针和指针常量及动态内存分配)
java·linux·c语言·开发语言·前端·c++
gqkmiss7 小时前
Chrome 浏览器插件获取网页 iframe 中的 window 对象
前端·chrome·iframe·postmessage·chrome 插件
m0_748247559 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
m0_748255029 小时前
前端常用算法集合
前端·算法