gost (GO Simple Tunnel) 是一个用 Go 语言实现的多功能安全隧道工具,支持多种协议(如 SOCKS5、HTTP、Shadowsocks、VMess 等),可以作为代理服务器或客户端使用,常用于科学上网、内网穿透等场景。
下面将详细介绍 gost 的基本使用方法。
1. 安装 gost
gost 的安装非常简单,因为它是一个独立的二进制文件,无需其他依赖。
方法一:下载预编译的二进制文件 (推荐)
这是最简单快捷的方法。
-
访问
gost的 GitHub Release 页面:https://github.com/go-gost/gost/releases -
根据你的操作系统和CPU架构下载对应的最新版本压缩包(例如
gost_x.y.z_linux_amd64.tar.gz或gost_x.y.z_windows_amd64.zip)。 -
解压下载的文件,你会得到一个名为
gost(Linux/macOS) 或gost.exe(Windows) 的可执行文件。 -
将该文件移动到你希望的位置(例如
/usr/local/bin/或任意目录),并确保它有执行权限。
Linux/macOS 示例:
# 下载 (以 v3.0.0 为例,请替换为最新版本)
wget https://github.com/go-gost/gost/releases/download/v3.0.0/gost_3.0.0_linux_amd64.tar.gz
# 解压
tar -xzf gost_3.0.0_linux_amd64.tar.gz
# 移动到 /usr/local/bin 并添加执行权限 (需要root权限)
sudo mv gost /usr/local/bin/gost
sudo chmod +x /usr/local/bin/gost
# 验证是否安装成功
gost -v
方法二:从源代码编译 (需要 Go 环境)
如果你已经安装了 Go 语言开发环境(Go 1.18 或更高版本),也可以从源代码编译安装:
go install github.com/go-gost/gost/cmd/gost@latest
编译成功后,gost 可执行文件将位于 $GOPATH/bin 或 $GOBIN 目录下。
2. 基本概念
在使用 gost 之前,需要理解其核心概念:
-
监听 (Listen,
-L或--listen):gost作为服务端时,指定它监听的地址和端口,以及监听什么协议。 -
转发 (Forward,
-F或--forward):gost作为客户端时,指定它将请求转发到哪个远程地址和端口,以及使用什么协议进行转发。 -
协议 (Protocol):
gost支持多种协议,如socks5、http、ss(Shadowsocks)、wss(WebSocket Secure) 等。协议通常与地址一起构成一个 URL 形式的字符串,例如socks5://:1080或http://user:pass@example.com:8080。
3. 常见使用场景与示例
3.1 搭建一个简单的 SOCKS5 代理服务器
在服务器上运行:
gost -L "socks5://:1080"
-
这会在服务器的 1080 端口启动一个 SOCKS5 代理。
-
默认监听所有网络接口(
0.0.0.0),如果想指定监听地址,例如只在本地监听:gost -L "socks5://127.0.0.1:1080"。 -
默认无认证,如果需要用户名密码认证:
gost -L "socks5://user:password@:1080"
3.2 使用 SOCKS5 代理客户端(本地代理)
在客户端本地运行:
gost -L "socks5://:1080" -F "socks5://your_server_ip:remote_port"
-
这会在客户端本地的 1080 端口启动一个 SOCKS5 代理。
-
当你的应用程序连接到本地的
socks5://:1080时,gost会将请求通过socks5协议转发到your_server_ip:remote_port。 -
如果远程服务器需要认证,客户端也需要提供认证信息:
gost -L "socks5://:1080" -F "socks5://user:password@your_server_ip:remote_port" -
remote_port通常是服务器上gost -L监听的端口。
如何使用代理:
-
浏览器: 在浏览器或系统网络设置中配置 SOCKS5 代理,地址为
127.0.0.1,端口为1080。 -
命令行: 使用
curl等工具时指定代理:curl -x socks5://127.0.0.1:1080 https://www.google.com
3.3 搭建一个简单的 HTTP 代理服务器
在服务器上运行:
gost -L "http://:8080"
-
这会在服务器的 8080 端口启动一个 HTTP 代理。
-
带认证的 HTTP 代理:
gost -L "http://user:password@:8080"
3.4 使用 HTTP 代理客户端
在客户端本地运行:
gost -L "http://:8100" -F "http://your_server_ip:remote_port"
- 这会在客户端本地的 8100 端口启动一个 HTTP 代理,并转发到远程 HTTP 代理。
3.5 Shadowsocks (SS) 代理
服务器端:
gost -L "ss://aes-256-cfb:your_password@:8388"
- 这会在服务器的 8388 端口启动一个 Shadowsocks 代理,使用
aes-256-cfb加密方法和your_password密码。
客户端:
gost -L "socks5://:1080" -F "ss://aes-256-cfb:your_password@your_server_ip:8388"
- 这会在客户端本地的 1080 端口启动一个 SOCKS5 代理,并通过 Shadowsocks 协议转发到远程服务器。
3.6 加密隧道 (TLS/WS/WSS)
为了增加安全性或伪装流量,gost 支持使用 TLS、WebSocket 或 WebSocket Secure (WSS) 作为底层传输协议。
a) SOCKS5 over TLS (SOCKS5+TLS)
服务器端:
为了使用 TLS,你需要一个证书和私钥。如果没有,gost 可以自动生成一个自签名证书(仅供测试,生产环境请使用正式证书)。
-
使用自签名证书 (简单但有警告):
gost -L "socks5+tls://:443"gost会自动生成一个自签名证书。 -
使用你自己的证书和私钥:
gost -L "socks5+tls://:443?cert=/path/to/server.pem&key=/path/to/server.key"
客户端:
-
连接到自签名 TLS 服务器 (会忽略证书验证,不安全):
gost -L "socks5://:1080" -F "socks5+tls://your_server_ip:443?secure=false"secure=false表示不验证服务器证书,方便测试,但有安全风险。 -
连接到拥有有效证书的 TLS 服务器:
gost -L "socks5://:1080" -F "socks5+tls://your_server_ip:443"或
gost -L "socks5://:1080" -F "socks5+tls://your_server_ip:443?secure=true"(默认
secure=true,会验证证书)。如果你的证书是自签发的但想验证,需要指定 CA 证书路径:?ca=/path/to/ca.crt
b) SOCKS5 over WebSocket Secure (SOCKS5+WSS)
WSS 隧道通常被用于伪装成普通网页流量,因为它运行在 443 端口,并且使用 HTTPS 协议。
服务器端:
gost -L "socks5+wss://:443?cert=/path/to/server.pem&key=/path/to/server.key"
- 同样,你可以省略
cert和key参数让gost自动生成自签名证书。
客户端:
gost -L "socks5://:1080" -F "socks5+wss://your_server_ip:443?secure=false"
secure=false的作用同上。
3.7 代理链 (Proxy Chain)
gost 允许你通过多个代理服务器进行连接,形成代理链。
客户端通过两个 SOCKS5 代理连接:
假设你有两个 SOCKS5 代理:proxy1_ip:port1 和 proxy2_ip:port2。
gost -L "socks5://:1080" -F "socks5://proxy1_ip:port1/socks5://proxy2_ip:port2"
-
这表示本地 SOCKS5 代理(1080端口)的请求,会先转发到
proxy1_ip:port1,然后由proxy1转发到proxy2_ip:port2,最后proxy2访问目标网站。 -
注意
-F参数中协议链的写法:协议1://地址1/协议2://地址2/...。
3.8 透明代理 (Transparent Proxy) - 较复杂,通常用于网关
透明代理允许将网络流量透明地重定向到 gost 代理,而无需在应用程序中手动配置代理。这通常涉及防火墙(如 iptables)规则。
服务器端 (假设在网关设备上):
首先,启动一个透明 SOCKS5 服务器 (或 HTTP 服务器)。
gost -L "tproxy+socks5://:1080"
然后,配置 iptables 规则将流量重定向到 gost 监听的端口。
这部分配置因网络环境而异,且风险较高,请谨慎操作,并确保你理解 iptables 的工作原理。
简单示例 (仅供参考,不推荐直接使用于生产环境):
# 假设你的局域网接口是 eth0, Gost 监听在 1080 端口
# 开启 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 转发 TCP 流量到 Gost
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 1080
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-ports 1080
# 还需要配置 OUTPUT 链,防止 gost 本身陷入循环
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 1080
sudo iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 1080
4. 使用配置文件 (推荐复杂场景)
对于更复杂的配置,例如同时监听多个协议,或者有多个转发规则,使用配置文件会更清晰方便。gost 支持 YAML、JSON 和 TOML 格式的配置文件。
config.yaml 示例:
# 监听服务配置
services:
- name: my-socks5-server # 服务名称
addr: ":1080" # 监听地址和端口
handler: # 处理程序配置
type: socks5 # 协议类型
auth: # 认证信息
username: user
password: password
listener:
type: tcp
- name: my-http-client-to-remote-socks5
addr: ":8100"
handler:
type: http
listener:
type: tcp
# 转发链配置
chain:
name: remote-socks5-chain # 链名称
hops: # 转发路径,可以有多跳
- name: hop1
nodes:
- addr: "your_remote_server_ip:remote_socks5_port"
protocol: socks5
auth:
username: remote_user
password: remote_password
# transport:
# type: tls # 如果远程是 socks5+tls,这里配置
# 转发链配置 (可以独立于 service 定义)
chains:
- name: another-socks5-chain
hops:
- name: hop-to-ss
nodes:
- addr: "your_ss_server_ip:8388"
protocol: ss
secret:
cipher: aes-256-cfb
password: your_ss_password
transport:
type: tcp
保存为 config.yaml,然后运行:
gost -C config.yaml
5. 常用命令行参数
-
-L <addr>: 定义一个或多个监听器 (listener)。 -
-F <addr>: 定义一个或多个转发器 (forwarder) 或转发链。 -
-C <file>: 指定配置文件路径。 -
-D: 以后台守护进程模式运行。 -
-V或-v: 显示版本信息。 -
-verbose: 打印详细日志。
6. 运行在后台 (Linux)
在 Linux 系统上,为了让 gost 持续运行在后台,可以使用 nohup 或 systemd。
使用 nohup (简单,但管理不便):
nohup gost -L "socks5://user:password@:1080" &
这会将 gost 进程放到后台,并将其输出重定向到 nohup.out 文件。
使用 systemd (推荐,便于管理):
-
创建一个
systemd服务文件,例如/etc/systemd/system/gost.service:[Unit] Description=GO Simple Tunnel After=network.target [Service] Type=simple # 将 /usr/local/bin/gost 替换为你的 gost 可执行文件路径 # 将 -L 参数替换为你的实际配置,或使用 -C 参数指定配置文件 ExecStart=/usr/local/bin/gost -L "socks5://user:password@:1080" Restart=always User=nobody # 推荐使用非特权用户运行 Group=nobody # 推荐使用非特权用户运行 [Install] WantedBy=multi-user.target -
重新加载
systemd配置:sudo systemctl daemon-reload -
启动
gost服务:sudo systemctl start gost -
设置开机自启:
sudo systemctl enable gost -
查看服务状态:
sudo systemctl status gost
7. 注意事项
-
防火墙: 确保服务器的防火墙(如
ufw或firewalld)允许外部流量访问gost监听的端口。例如,放行 1080 端口:sudo ufw allow 1080/tcp -
安全性:
-
始终使用强密码,特别是公共服务器。
-
优先使用 TLS/WSS 等加密传输,而不是裸的 SOCKS5 或 HTTP。
-
定期更新
gost到最新版本。
-
-
日志: 使用
-verbose参数可以查看详细日志,便于排查问题。 -
官方文档: 遇到复杂问题或需要了解更多高级功能时,请查阅
gost的官方 GitHub 仓库和文档:https://github.com/go-gost/gost
gost 功能强大且灵活,通过掌握上述基本用法,你就可以满足绝大多数代理需求。