在科学上网的时候搭建自己的节点的时候,有些人会使用xui这种面板工具,有些人会用一键脚本,今天我给大家分享一个使用docker 搭配gost 搭建一个稳定的自建节点,最安全、最稳定的专属节点搭建方法,晚高峰高速稳定,4K秒开的科学上网线路体验。本文需要一定的技术基础及动手能力,但是好处是搭建好了,不受外部环境影响,使用非常稳定。这种方法也是左耳朵耗子在github推荐的一种方法。
一 主机选择
你可以选择大厂的免费主机或者购买主机,你可以使用像甲骨文,谷歌,亚马逊这种大厂提供的试用主机,但是注意设置账单或者信用卡限制,以免过期还继续扣费。像server00,infinityfree这种免费主机或者虚拟机,不能提供sudo权限的不适合我们这种情况。
二 域名注册
首先你需要一个域名,可以使用免费的,也可以付费的。免费的可以参考我的这篇文章或者youtube视频注册us.kg的域名,付费的如果不做他用,也有很多非常便宜的,可以按照最低价格购买一个便宜的域名。注册完成后你可以把它托管到cloudflare。
三 域名托管与解析
域名托管到cloudflare比较简单,如果是us.kg免费域名,先在cloud添加你的域名,会生成两个ns服务器,把它这两个服务器,添加到us.kg的后台就可以了。 等待一会生效。 然后你可以添加一个子域名,绑定到你的服务器。
四 nginx安装
我们使用certbot 申请安装证书,所以我们先安装一个nginx,我使用的ubuntu22,他的默认安装版本1.18有点低,你可以从官网安装最新版,当然你也可以直接sudo apt install nginx
1.18版本,版本高低对于我们的项目也没有影响。
五 域名配置
复制一个etc/nginx/conf.d/default.conf
这个文件,重命名为为gost.conf
,
把server_name 修改为你刚才绑定的域名。
server {
listen 80;
## 只需要修改下面一行 为你的域名 例如:gost.youdoamin.us.kg
server_name gost.youdoamin.us.kg;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
六 证书申请
证书申请我们使用certbot,可以参考我的这个视频
七 docker 安装
现在我们来安装docker,参考文档
1.设置 Docker 的apt存储库。
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
2.安装 Docker 包。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3.通过运行映像来验证 Docker Engine 安装是否成功 hello-world。
sudo docker run hello-world
八 定义sh文件
我们可以直接使用docker 来启动gost服务了,但是涉及的变量很多,为了方便,我们可以定义一个sh文件。当开启的时候直接运行这个sh文件就可以了。
#!/bin/bash
# 根据自己配置更改下面参数
DOMAIN="你的域名"
USER="user"
PASS="password"
PORT=8443
AUTH=$(echo -n ${USER}:${PASS} | base64)
BIND_IP=0.0.0.0
CERT_DIR=/etc/letsencrypt
CERT=${CERT_DIR}/live/${DOMAIN}/fullchain.pem
KEY=${CERT_DIR}/live/${DOMAIN}/privkey.pem
sudo docker run -d --restart always --name gost \
-v ${CERT_DIR}:${CERT_DIR}:ro \
--net=host gogost/gost \
-L "mwss://${BIND_IP}:${PORT}?auth=${AUTH}&cert=${CERT}&key=${KEY}&probe_resist=file:/usr/share/nginx/html&knock=www.google.com"
这里注意一下,你可以随意定义 PORT=8443,端口,但是必须保证你的服务器的防火墙打开端口。
九 服务器/本地 运行
在服务器运行刚刚定义的脚本文件。 可以使用下面的命令测试服务是否启动
curl -v "https://www.google.com" --proxy "https://DOMAIN" --proxy-user 'USER:PASS'
或者查看docker 日志
docker logs gost
十 本地配置
在本地打开命令行工具,运行
gost -L ss://chacha20-ietf-poly1305:pass@:8337 -F mwss://user:[email protected]:8443
其中user,password,youdomain.com,8443 和你脚本定义的变量一致。 然后在你的服务v2ray 或者clash 添加节点信息使用了,下面是clash的一个例子:
- {
'type': 'ss',
'name': '🇦🇺yt',
'server': '127.0.0.1',
'port': 8337,
'cipher': 'chacha20-ietf-poly1305',
'password': 'pass',
}
十一 不使用docker的方式
安装gost
如果你的服务器配置比较低,可能不适合使用docker,可以在服务器直接安装gost使用,安装方式见github,我这里采用
bash <(curl -fsSL https://github.com/go-gost/gost/raw/master/install.sh) --install
这个脚本,安装最新的gost.
安装完成后,我们可以使用
gost -V
来查看安装版本。
修改脚本文件
安装好gost的后,我们修改我们的脚本文件,使用服务器上的gost运行。把docker run 的部分替换为gost 即可。
#!/bin/bash
# 根据自己配置更改下面参数
DOMAIN="你的域名"
USER="user"
PASS="password"
PORT=8443
AUTH=$(echo -n ${USER}:${PASS} | base64)
BIND_IP=0.0.0.0
CERT_DIR=/etc/letsencrypt
CERT=${CERT_DIR}/live/${DOMAIN}/fullchain.pem
KEY=${CERT_DIR}/live/${DOMAIN}/privkey.pem
gost -L "mwss://${BIND_IP}:${PORT}?auth=${AUTH}&cert=${CERT}&key=${KEY}&probe_resist=file:/usr/share/nginx/html&knock=www.google.com"
重新测试一下,我发现在我的小服务器上直接运行gost比docker上快多了,说明小服务器还是不适合使用docker~
后台运行
为了使用脚本在后台运行,我们还需要修改一下,把gost运行部分修改如下
nohup gost -L "mwss://${BIND_IP}:${PORT}?auth=${AUTH}&cert=${CERT}&key=${KEY}&probe_resist=file:/usr/share/nginx/html&knock=www.google.com" >gost.log 2>&1 &
这样我们可以随意关闭窗口,也可以在当前目录查看log日志,如果你不想查看日志,可以去掉gost.log 2>&1 部分,如果保留,记得定期删除日志,或者设置一个定时删除日志任务,这里就不讨论了。