用服务器跑脚本,时间长了难免会被封掉 IP,比如我的服务器 IP 就被京东封掉了,阿里云换 IP 要多加钱,没办法只能整一个代理了。
搭建代理
这里我用的是 Gost
介绍
Gost
是一个功能多样且实用的安全隧道工具,使用的是go语言编写 这里只记录下快速搭建Socks5的过程,其它的并不涉及,有兴趣的朋友可以去项目主页了解下; GitHub项目:https://github.com/go-gost/gost Gost文档:https://gost.run/Socks5
属于明文代理,不要用于科学上网,否则会被阻断端口,可用于正常的跳板使用。
搭建
常规安装 AMD64
框架机型
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代理服务
gost -L http://:8080
开启多个代理服务
gost -L http://:8080 -L socks5://:1080
## 测试没问题后可以用`nohup`命令挂载到后台运行,重启失效,再次挂载即可重新使用;
nohup gost -L 账号:密码@:端口 socks5://:端口 > /dev/null 2>&1 &
关闭代理
kill -9 $(ps aux | grep "gost" | sed '/grep/d' | awk '{print $2}')
给青龙配置代理
这里可真是废了太大劲了,根据网上的教程是在环境变量里配置 (先说一句,这样是不行的)
#配置文件添加变量,使用代理
export ALL_PROXY=socks5://127.0.0.1:40000
然后通过 curl 测试
#获取IP地址
curl ip.sb -s
嗯,输出确实是我的代理服务器的 ip ,然后再按照他说的再加上这几行吧。
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
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
。
例如
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里执行
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
文件夹下的某个目录内。
可以通过目录大小来推断是哪个文件夹,通过命令
cd /var/lib/docker/overlay2
du -s ./* | sort -rn | more
我的青龙就是这个文件夹。 如果你安装了宝塔并且有 Docker 的插件,那么可以直接选择目录
进入文件夹
需要修改的文件路径在 /merged
文件夹内,文件分别是
\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
详细安装方法我就不写了,文档很全。