个人家用服务器搭建记录(二)网络加速

当在家里要上谷歌查个资料,用snap在Linux上安装个软件,上youtube找个视频教程,下载个安卓sdk的时候就难免要用到网络加速工具。关于网络加速,很多人会使用路由器上的功能或者是直接使用软路由或是旁路由来解决这个问题,但是我这手上没有合适的硬件,而且我也就在家里使用网络的时候才会用到网络加速,没必要专门启动一个二十四小时工作的设备。这一篇就记录下在自己的个人家用服务器上搭建网络加速工具链的方法。

涉及软件

主要涉及的软件有:

  1. Clash(VMess协议加速,并提供本地HTTP,HTTPS,SOCKS5端口服务)
  2. subconverter(订阅转换,生成Clash配置文件)
  3. yacd(Clash的web面板)

部署Clash

Clash使用Golang写的,在Ubuntu上启动起来也比较简单。首先在clash的releases中下载clash-linux-amd64的包,在本地用gunzip命令解压后,直接使用./clash就可以启动了。

在启动的时候会在~/.config/clash生成配置文件夹,里面会有config.yaml和Country.mmdb文件。在第一次启动的时候clash会去下载Country.mmdb文件,但是由于网络原因有失败的可能,如果失败,可以在有网络加速环境的地方自己手动下载Country.mmdb文件,再手动上传到配置文件目录下。

如果需要后台启动使用命令nohup ./clash & 就可以后台启动了。但是个人不推荐这样做,还是建议把服务的启动关停交给systemd管理。

首先在/etc/systemd/system文件夹下新建service文件:

1
vim /etc/systemd/system/clash.service

service文件的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Description=clash
#下面的两条配置表示依赖网络服务
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=hao #用户名
ExecStart=/home/hao/clash/clash #启动命令
ExecStop=/bin/kill -s QUIT $MAINPID #停止命令
Restart=always
StandOutput=syslog
StandError=inherit

[Install]
WantedBy=multi-user.target

编辑完成保存后重载systemd并启动服务,下面是可能会用到的命令:

1
2
3
4
5
6
systemctl daemon-reload #重载systemd
systemctl start clash #启动
systemctl stop clash #关闭
systemctl enable clash #开机启动
systemctl disable clash #取消开机启动
systemctl status clash #查看状态

这样的话就可以把clash交给systemd来管理启动、关闭和开机启动了。

如果服务提供商提供了clash订阅的配置文件下载地址,那就直接下载文件,覆盖到clash配置文件目录下并重启clash,就可以开始使用了。

1
2
wget "https://abc.xyz/aabbcc" -O /home/hao/.config/clash/config.yaml
sudo systemctl restart clash

如果服务商没有提供clash的配置文件,那么就需要从其他的订阅链接转换成clash配置文件,那么就要用到下面说的subconverter了。

使用docker安装subconverter

docker的安装就不写了,直接参照官方文档 Install Docker Engine on Ubuntu 安装即可。

然后直接把subconverter的docker镜像拖下来

1
docker pull tindy2013/subconverter

按照作者提供的文档 subconverter-docker 启动即可

1
2
3
4
5
# 运行并且将容器25500端口映射到宿主机25500
docker run -d --restart=always -p 25500:25500 tindy2013/subconverter:latest
# 检查状态
curl http://localhost:25500/version
# 如果显示“subconverter vx.x.x backend”说明已经正常启动

订阅转换我是配合ACL4SSR规则进行转换的,因为需要访问https://raw.githubusercontent.com/,在进行订阅转换的时候也需要加速,为了让订阅更新更加灵活可用,除了这个不走代理的容器,我这边还会启动一个默认走代理的容器。

关于Docker的加速方式,找到了一篇文章介绍的很详细,Docker 代理脱坑指南,这里就使用Dockerfile的方式。

先写一个Dockerfile,在原来的镜像的基础上配置全局代理,MY_PROXY_URL的值就是clash的http服务路径

1
2
3
4
5
6
7
FROM tindy2013/subconverter:latest
ENV MY_PROXY_URL="http://192.168.3.18:7890"
ENV HTTP_PROXY=$MY_PROXY_URL \
HTTPS_PROXY=$MY_PROXY_URL \
http_proxy=$MY_PROXY_URL \
https_proxy=$MY_PROXY_URL
EXPOSE 25500

构建镜像

1
docker build -t subconventer-custom-proxy:latest

之后再用这个镜像启动一个容器,并分配一个别的端口,我这里映射到了25501上

1
docker run -d --restart=always -p 25501:25500 subconventer-custom-proxy:latest

关于获取转换订阅的连接,虽然可以啃subconventer的文档,但是也有现成的获取订阅转换的连接的工具sub-web,ACL4SSR的订阅转换网址 acl4ssr.netlify.app 因为生成一次链接可以一直使用,使用频率很低,所以我就懒得在本地部署了。之后直接用获取的定制订阅链接访问subconventer服务,就可以获得转换过可以直接使用的clash配置文件了。

在nginx上部署yacd面板

为了方便切换节点之类的操作,在本地部署了一个yacd面板。可以直接部署的yacd静态页面包在yacd的github页面上的readme里有提供: zip of the gh-pages

直接打开文件夹,打开index.html,设置好clash的管理api端口地址就能用了,但是为了方便在手机和其他设备上使用,我把这些文件部署到了nginx上。

nginx直接安装就行

1
apt install nginx

然后把之前获取的yacd静态页面的文件夹移动到一个固定的目录下比如mysite,然后为nginx添加一个配置文件mysite

1
2
3
4
5
6
7
8
server {
listen 81;
server_name 192.168.3.18;
location /yacd {
root /home/hao/mysite/;
index index.html;
}
}

保存之后重启nginx服务,访问http://192.168.3.18:81/yacd即可访问,具体的地址,端口和文件目录需要按照实际情况配置。

使用加速功能

要使用加速功能其实就是把流量转发到clash提供的http或socks5端口上去,浏览器上的插件SwitchyOmega,安卓手机上的BifrostV,ios上大名鼎鼎的小飞机,都可以设置把流量转发到socks5端口上。在系统的代理设置里也可以手动设置,从而达到全局代理的目的。很多软件也有代理设置的地方,这样就不需要全局代理,仅在个别软件上加速。windows上的SStap和Linux上经过设置的iptables甚至可以转发udp流量。

这样的话整个用于网络加速的工具链就搭建好了。


个人家用服务器搭建记录(二)网络加速
http://jgduhao.xyz/2021/03/14/个人家用服务器搭建记录(二)网络加速/
作者
jgduhao
发布于
2021年3月14日
许可协议