ARTICLE
GOST SOCKS5 代理状态检查与故障排查

本文记录一套 GOST SOCKS5 代理的完整排查方法,适用于以下结构:
应用程序
|
v
客户端服务器 127.0.0.1:10801
|
| socks5+tls
v
上游服务器 <UPSTREAM_IP>:10800
|
v
目标网站
本次故障的最终结论是:客户端 GOST 服务运行正常,但上游服务器的 GOST 服务没有启动。上游 unit 文件并未被删除,实际服务名是 gost.service,而不是最初检查的 gost-server.service。该服务处于 disabled 状态,因此服务器重启后没有自动运行。
一、检查 SOCKS5 监听端口
假设本地 SOCKS5 端口为 10801:
sudo ss -lntp | grep ':10801'
示例输出:
LISTEN 0 4096 *:10801 *:* users:(("gost",pid=255133,fd=6))
这表示:
10801正在监听。- 监听程序是
gost。 - 进程 PID 是
255133。 *:10801表示监听所有网络接口,而不只是本机回环地址。
如果该代理只供服务器本机使用,建议将监听地址限制为 127.0.0.1:10801,避免代理端口直接暴露到公网。
二、根据 PID 定位 systemd 服务
已知进程 PID 后,可以直接查询所属服务:
sudo systemctl status 255133
本次查询结果显示:
gost-client.service - GOST Client Tunnel Service
Loaded: loaded (/etc/systemd/system/gost-client.service; enabled)
Active: active (running)
Main PID: 255133 (gost)
CGroup: /system.slice/gost-client.service
由此可以确认:
- 服务名为
gost-client.service。 - 服务正在运行。
- 服务已经设置为开机启动。
- 当前 GOST 进程确实由该服务管理。
还可以使用以下命令辅助定位:
cat /proc/255133/cgroup
ps -fp 255133
sudo tr '\0' ' ' < /proc/255133/cmdline; echo
sudo readlink -f /proc/255133/exe
三、查看客户端配置和日志
查看 unit 文件及实际启动参数:
sudo systemctl cat gost-client.service
sudo systemctl show gost-client.service -p ExecStart
查看最近日志:
sudo journalctl -u gost-client.service -n 100 --no-pager
持续观察日志:
sudo journalctl -u gost-client.service -f
注意:ExecStart 中可能包含代理用户名和密码。保存日志、截图或向他人提供输出时,应先隐藏凭据。
四、判断 connection refused 的故障位置
本次客户端日志包含以下关键信息:
[route] 127.0.0.1:<LOCAL_PORT> -> auto://:10801 \
-> 1@socks5+tls://<UPSTREAM_IP>:10800 -> httpbin.org:80
dial tcp <UPSTREAM_IP>:10800: connect: connection refused
请求路径已经非常明确:
本地程序 -> 127.0.0.1:10801 -> <UPSTREAM_IP>:10800 -> 目标网站
客户端能够接收到本地请求,但建立到上游 10800 的 TCP 连接时被拒绝。因此,故障不在本机 10801,而在上游服务或上游端口。
connection refused 通常表示:
- 目标服务器网络可达;
- 目标端口没有程序监听;或者
- 防火墙使用
REJECT明确拒绝连接。
如果是安全组丢弃流量或网络路由不通,更常见的表现是连接超时,而不是立即返回 connection refused。
五、从客户端测试上游端口
在客户端服务器执行:
nc -vz <UPSTREAM_IP> 10800
常见结果:
Connection refused
表示服务器可达,但端口未监听或被明确拒绝。
Connection timed out
表示应重点检查云安全组、防火墙、路由和公网 IP。
succeeded
表示 TCP 端口已连通,下一步应检查 GOST 协议、TLS、用户名和密码是否匹配。
六、检查上游 GOST 服务
登录上游服务器后,先检查端口和进程:
sudo ss -lntp | grep ':10800'
pgrep -a gost
不要直接假设服务名为 gost-server.service。先搜索实际 unit:
systemctl list-unit-files | grep -i gost
sudo find /etc/systemd/system /lib/systemd/system /usr/lib/systemd/system \
-type f -iname '*gost*' -print
同时检查程序安装情况:
command -v gost
gost -V
本次实际输出为:
gost.service disabled enabled
/etc/systemd/system/gost.service
/usr/local/bin/gost
gost 2.11.5 (go1.19.2 linux/amd64)
这说明:
- unit 文件仍然存在;
- 正确服务名是
gost.service; - GOST 二进制仍然存在;
- 服务当前为
disabled,不会随系统启动; - 输出最后一列的
enabled是系统预设值,不代表服务当前已启用。
由于 pgrep 没有找到进程,ss 也没有发现 10800 监听,因此可以确认上游 GOST 当时没有运行。
七、恢复上游服务
先检查服务配置和当前状态:
sudo systemctl cat gost.service
sudo systemctl status gost.service --no-pager -l
确认 ExecStart 中的监听端口、协议和凭据正确后,启动服务并设置开机自启:
sudo systemctl enable --now gost.service
再次确认:
sudo systemctl status gost.service --no-pager
sudo ss -lntp | grep ':10800'
pgrep -a gost
正常情况下,端口输出应类似:
LISTEN 0 4096 0.0.0.0:10800 0.0.0.0:* users:(("gost",pid=<PID>,fd=<FD>))
如果启动失败,查看日志:
sudo journalctl -u gost.service -n 100 --no-pager
修改 unit 文件后,需要重新加载并重启:
sudo systemctl daemon-reload
sudo systemctl restart gost.service
八、端到端验证
上游服务恢复后,先在客户端服务器检查 TCP 端口:
nc -vz <UPSTREAM_IP> 10800
然后通过本地 SOCKS5 代理请求公网 IP:
curl --socks5-hostname 127.0.0.1:10801 https://api.ipify.org
也可以请求测试网站:
curl --socks5-hostname 127.0.0.1:10801 http://httpbin.org/ip
同时观察客户端日志:
sudo journalctl -u gost-client.service -f
验证成功时,不应再出现:
connect: connection refused
九、仍然无法连接时的检查项
1. 检查服务监听地址
如果上游只监听:
127.0.0.1:10800
外部客户端无法连接。需要根据实际安全设计,让服务监听公网或内网网卡,例如 0.0.0.0:10800,然后通过防火墙限制来源。
2. 检查防火墙
sudo ufw status verbose
sudo iptables -L -n
sudo nft list ruleset
如果使用云服务器,还需要检查云厂商安全组是否允许 TCP 10800。
建议只允许客户端服务器的固定 IP 访问该端口,不要直接向整个公网开放。
3. 检查协议和凭据
本次客户端使用的上游协议是:
socks5+tls://<UPSTREAM_IP>:10800
服务端必须使用兼容的 socks5+tls 配置。若服务端配置了认证,客户端用户名和密码也必须一致。
4. 检查公网 IP 和端口
确认客户端 unit 中配置的上游 IP 仍是当前服务器公网 IP:
sudo systemctl show gost-client.service -p ExecStart
同时确认上游服务实际监听的端口确实是 10800。
十、常用管理命令
客户端服务:
sudo systemctl status gost-client.service
sudo systemctl restart gost-client.service
sudo journalctl -u gost-client.service -f
上游服务:
sudo systemctl status gost.service
sudo systemctl restart gost.service
sudo systemctl enable gost.service
sudo journalctl -u gost.service -f
端口检查:
sudo ss -lntp | grep -E ':10800|:10801'
十一、快速排查清单
遇到 GOST SOCKS5 无法连接时,可以按以下顺序检查:
- 使用
ss -lntp确认本地 SOCKS5 端口是否监听。 - 根据 PID 使用
systemctl status <PID>定位服务名。 - 使用
journalctl确认失败发生在本地还是上游。 - 使用
nc -vz <UPSTREAM_IP> <PORT>测试上游 TCP 端口。 - 在上游搜索真实的 GOST unit 名称,不要凭名称猜测。
- 使用
pgrep和ss确认上游进程及监听端口。 - 使用
systemctl enable --now启动服务并设置开机自启。 - 检查防火墙、安全组、监听地址、协议和认证信息。
- 使用
curl --socks5-hostname完成端到端验证。
本次故障通过第 5 至第 7 步定位并恢复:上游服务实际名为 gost.service,因未启用开机启动而停止运行,最终导致客户端连接上游 10800 时收到 connection refused。
COMMENTS
评论
暂无已通过的评论。