Skip to content

用服务器跑脚本,时间长了难免会被封掉 IP,比如我的服务器 IP 就被京东封掉了,阿里云换 IP 要多加钱,没办法只能整一个代理了。

搭建代理

这里我用的是 Gost

介绍

Gost 是一个功能多样且实用的安全隧道工具,使用的是go语言编写 这里只记录下快速搭建Socks5的过程,其它的并不涉及,有兴趣的朋友可以去项目主页了解下; GitHub项目:https://github.com/go-gost/gost Gost文档:https://gost.run/Socks5属于明文代理,不要用于科学上网,否则会被阻断端口,可用于正常的跳板使用。

搭建

常规安装 AMD64 框架机型

bash
wget "https://github.com/go-gost/gost/releases/download/v3.0.0-beta.2/gost-linux-amd64-3.0.0-beta.2.gz" 
gzip gost-linux-amd64-3.0.0-beta.2.gz -d
mv gost-linux-amd64-3.0.0-beta.2  /usr/bin/gost 
chmod +x /usr/bin/gost

开启一个HTTP代理服务

bash
gost -L http://:8080

开启多个代理服务

bash
gost -L http://:8080 -L socks5://:1080 
## 测试没问题后可以用`nohup`命令挂载到后台运行,重启失效,再次挂载即可重新使用;
nohup gost -L 账号:密码@:端口 socks5://:端口 > /dev/null 2>&1 &

关闭代理

bash
kill -9 $(ps aux | grep "gost" | sed '/grep/d' | awk '{print $2}')

给青龙配置代理

这里可真是废了太大劲了,根据网上的教程是在环境变量里配置 (先说一句,这样是不行的)

bash
#配置文件添加变量,使用代理
export ALL_PROXY=socks5://127.0.0.1:40000

然后通过 curl 测试

bash
#获取IP地址
curl ip.sb -s

嗯,输出确实是我的代理服务器的 ip ,然后再按照他说的再加上这几行吧。

bash
echo '当前代理:' $ALL_PROXY
echo '开始查询公网IP:'
curl --silent --location --request GET 'ip.sb'

看他的截图整挺好,那我也跑一下试试。

然后感觉到不对了,跑的有点快啊,不像是走过代理,看一眼代理服务器的输出,确实没有。

这就是不行的地方了,在跑JS的时候根本没有走代理,但在 curl 的时候是走代理的。

那也不对啊,我的目的是让 JS 的请求走代理,然后我去青龙的 issue 里看看有没有人提过,有,但都没有解决的方法,并且现有的配置文件里 ProxyUrl="" 也并不起作用。

之后经过一下午的谷歌和各种尝试终于能让JS也走代理了.....

原理

通过 v2rayA 给整个系统套一个全局代理,那JS也肯定也要走这个全局了

v2rayA 是一个支持全局透明代理的 V2Ray Linux 客户端,同时兼容SS、SSR、Trojan(trojan-go)、PingTunnel协议。 v2rayA 致力于提供最简单的操作,满足绝大部分需求。 得益于Web客户端的优势,你不仅可以将其用于本地计算机,还可以轻松地将它部署在路由器或NAS上。 项目地址:https://github.com/v2rayA/v2rayA

Docker 安装 v2rayA

bash
docker run -d \
  --restart=always \
  --privileged \
  --network=host \
  --name v2raya \
  -e V2RAYA_ADDRESS=0.0.0.0:你想要的端口 \
  -v /lib/modules:/lib/modules:ro \
  -v /etc/resolv.conf:/etc/resolv.conf \
  -v /etc/v2raya:/etc/v2raya \
  mzz2017/v2raya

之后别忘了在防火墙开启相应的端口,然后访问相应的地址就可以看到 GUI 了。

选择添加节点,有多种方式可以选择,那意味着可以有很多代理可选择,我先用的 HTTP,依次填写完后保存。

之后选择右上角的设置

根据自己想要的设置就行。

可以这样设置。 然后在 RoutingA 里填写你的自定义设置。

注意 使用该方法会影响其他容器的网络,如果你在 透明代理/系统代理实现方式 设置为 redirect ,其他容器会无法联网,青龙在执行 curl 时无法联网,可以执行 JS 但还是不走代理。

如果你设置为 tproxy 那么青龙执行 JS 时连不上网,其他容器正常。

为了解决这个问题,需要将容器的网络模式改为 host

以青龙为例:

青龙Docker不是host的网络模式的话要重新在执行Docker run 命令的时候加上 -net=host

例如

bash
docker run -dit \
  -v $PWD/ql:/ql/data \
  --name qinglong \
  --hostname qinglong \
  --restart unless-stopped \
  --net=host \
  whyour/qinglong:latest

这样有个坏处是host 模式下该容器将无法进行端口映射,容器内部监听的端口将直接监听在宿主上,容易引起端口冲突。

设置为 redirect 模式后,只有在 host 模式下的容器才能正常联网, 在 tproxy 模式下 没有设置 host 模式的容器可以正常联网。

这样有点和说明不一样啊!

我也试过没有用 host 的青龙设置 tproxy ,可惜JS还是不走代理。

只能把其他容器一个一个设置为 host 并且根据需要修改他们的端口,我也不知道有啥别的好方法。 在删除容器的时候别忘了相关文件的保存。

相关的问题在 文档 里有说明。

问题解决

配置完后在JS里执行

js
var http = require("https");
var iconv = require('iconv-lite');
var option = { 
hostname: "myip.ipip.net",
path: ""
}; 
var req = http.request(option, function(res) {
res.on("data", function(chunk) {
console.log(iconv.decode(chunk, "utf-8"));
}); 
}).on("error", function(e) {
console.log(e.message);
});
req.end();

看看你的IP是不是成功变成代理IP 了。

修改青龙端口

将 Docker 设置成 host 模式后无法再通过 -p 5700:5700 \ 来自定义端口,用默认的 5700 又不安全,只能通过修改容器来修改端口。

配置文件在 /var/lib/docker/overlay2 文件夹下的某个目录内。

可以通过目录大小来推断是哪个文件夹,通过命令

bash
cd /var/lib/docker/overlay2
du -s ./* | sort -rn | more

我的青龙就是这个文件夹。 如果你安装了宝塔并且有 Docker 的插件,那么可以直接选择目录进入文件夹

需要修改的文件路径在 /merged 文件夹内,文件分别是

bash
\ql\shell\check.sh
\ql\shell\api.sh
\ql\shell\share.sh
\ql\docker\front.conf
\ql\docker\docker-entrypoint.sh
\ql\docker\docker-compose.yml
\ql\.env

将里面的 5700 端口改成你想要的端口就可以了。

顺便一提

貌似可以通过 cloudflare Warp 来达成刷新 IP

项目地址 https://github.com/fscarmen/warp

详细安装方法我就不写了,文档很全。

Released under the MIT License.