兰 亭 墨 苑
期货 · 量化 · AI · 终身学习
首页
归档
编辑文章
标题 *
URL 别名 *
内容 *
(支持 Markdown 格式)
`gost` (GO Simple Tunnel) 是一个用 Go 语言实现的多功能安全隧道工具,支持多种协议(如 SOCKS5、HTTP、Shadowsocks、VMess 等),可以作为代理服务器或客户端使用,常用于科学上网、内网穿透等场景。 下面将详细介绍 `gost` 的基本使用方法。 --- ### 1. 安装 `gost` `gost` 的安装非常简单,因为它是一个独立的二进制文件,无需其他依赖。 **方法一:下载预编译的二进制文件 (推荐)** 这是最简单快捷的方法。 1. 访问 `gost` 的 GitHub Release 页面:[https://github.com/go-gost/gost/releases](https://github.com/go-gost/gost/releases) 2. 根据你的操作系统和CPU架构下载对应的最新版本压缩包(例如 `gost_x.y.z_linux_amd64.tar.gz` 或 `gost_x.y.z_windows_amd64.zip`)。 3. 解压下载的文件,你会得到一个名为 `gost` (Linux/macOS) 或 `gost.exe` (Windows) 的可执行文件。 4. 将该文件移动到你希望的位置(例如 `/usr/local/bin/` 或任意目录),并确保它有执行权限。 **Linux/macOS 示例:** ```bash # 下载 (以 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 或更高版本),也可以从源代码编译安装: ```bash 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 代理服务器 在**服务器**上运行: ```bash gost -L "socks5://:1080" ``` * 这会在服务器的 1080 端口启动一个 SOCKS5 代理。 * 默认监听所有网络接口(`0.0.0.0`),如果想指定监听地址,例如只在本地监听:`gost -L "socks5://127.0.0.1:1080"`。 * 默认无认证,如果需要用户名密码认证: ```bash gost -L "socks5://user:password@:1080" ``` #### 3.2 使用 SOCKS5 代理客户端(本地代理) 在**客户端**本地运行: ```bash gost -L "socks5://:1080" -F "socks5://your_server_ip:remote_port" ``` * 这会在客户端本地的 1080 端口启动一个 SOCKS5 代理。 * 当你的应用程序连接到本地的 `socks5://:1080` 时,`gost` 会将请求通过 `socks5` 协议转发到 `your_server_ip:remote_port`。 * 如果远程服务器需要认证,客户端也需要提供认证信息: ```bash gost -L "socks5://:1080" -F "socks5://user:password@your_server_ip:remote_port" ``` * `remote_port` 通常是服务器上 `gost -L` 监听的端口。 **如何使用代理:** * **浏览器:** 在浏览器或系统网络设置中配置 SOCKS5 代理,地址为 `127.0.0.1`,端口为 `1080`。 * **命令行:** 使用 `curl` 等工具时指定代理: ```bash curl -x socks5://127.0.0.1:1080 https://www.google.com ``` #### 3.3 搭建一个简单的 HTTP 代理服务器 在**服务器**上运行: ```bash gost -L "http://:8080" ``` * 这会在服务器的 8080 端口启动一个 HTTP 代理。 * 带认证的 HTTP 代理: ```bash gost -L "http://user:password@:8080" ``` #### 3.4 使用 HTTP 代理客户端 在**客户端**本地运行: ```bash gost -L "http://:8100" -F "http://your_server_ip:remote_port" ``` * 这会在客户端本地的 8100 端口启动一个 HTTP 代理,并转发到远程 HTTP 代理。 #### 3.5 Shadowsocks (SS) 代理 **服务器端:** ```bash gost -L "ss://aes-256-cfb:your_password@:8388" ``` * 这会在服务器的 8388 端口启动一个 Shadowsocks 代理,使用 `aes-256-cfb` 加密方法和 `your_password` 密码。 **客户端:** ```bash 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` 可以自动生成一个自签名证书(仅供测试,生产环境请使用正式证书)。 * **使用自签名证书 (简单但有警告):** ```bash gost -L "socks5+tls://:443" ``` `gost` 会自动生成一个自签名证书。 * **使用你自己的证书和私钥:** ```bash gost -L "socks5+tls://:443?cert=/path/to/server.pem&key=/path/to/server.key" ``` **客户端:** * **连接到自签名 TLS 服务器 (会忽略证书验证,不安全):** ```bash gost -L "socks5://:1080" -F "socks5+tls://your_server_ip:443?secure=false" ``` `secure=false` 表示不验证服务器证书,方便测试,但有安全风险。 * **连接到拥有有效证书的 TLS 服务器:** ```bash gost -L "socks5://:1080" -F "socks5+tls://your_server_ip:443" ``` 或 ```bash 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 协议。 **服务器端:** ```bash gost -L "socks5+wss://:443?cert=/path/to/server.pem&key=/path/to/server.key" ``` * 同样,你可以省略 `cert` 和 `key` 参数让 `gost` 自动生成自签名证书。 **客户端:** ```bash 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`。 ```bash 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 服务器)。 ```bash gost -L "tproxy+socks5://:1080" ``` 然后,配置 `iptables` 规则将流量重定向到 `gost` 监听的端口。 **这部分配置因网络环境而异,且风险较高,请谨慎操作,并确保你理解 `iptables` 的工作原理。** 简单示例 (仅供参考,不推荐直接使用于生产环境): ```bash # 假设你的局域网接口是 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` 示例:** ```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`,然后运行: ```bash gost -C config.yaml ``` --- ### 5. 常用命令行参数 * `-L <addr>`: 定义一个或多个监听器 (listener)。 * `-F <addr>`: 定义一个或多个转发器 (forwarder) 或转发链。 * `-C <file>`: 指定配置文件路径。 * `-D`: 以后台守护进程模式运行。 * `-V` 或 `-v`: 显示版本信息。 * `-verbose`: 打印详细日志。 --- ### 6. 运行在后台 (Linux) 在 Linux 系统上,为了让 `gost` 持续运行在后台,可以使用 `nohup` 或 `systemd`。 **使用 `nohup` (简单,但管理不便):** ```bash nohup gost -L "socks5://user:password@:1080" & ``` 这会将 `gost` 进程放到后台,并将其输出重定向到 `nohup.out` 文件。 **使用 `systemd` (推荐,便于管理):** 1. 创建一个 `systemd` 服务文件,例如 `/etc/systemd/system/gost.service`: ```ini [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 ``` 2. 重新加载 `systemd` 配置: ```bash sudo systemctl daemon-reload ``` 3. 启动 `gost` 服务: ```bash sudo systemctl start gost ``` 4. 设置开机自启: ```bash sudo systemctl enable gost ``` 5. 查看服务状态: ```bash sudo systemctl status gost ``` --- ### 7. 注意事项 * **防火墙:** 确保服务器的防火墙(如 `ufw` 或 `firewalld`)允许外部流量访问 `gost` 监听的端口。例如,放行 1080 端口: ```bash sudo ufw allow 1080/tcp ``` * **安全性:** * 始终使用强密码,特别是公共服务器。 * 优先使用 TLS/WSS 等加密传输,而不是裸的 SOCKS5 或 HTTP。 * 定期更新 `gost` 到最新版本。 * **日志:** 使用 `-verbose` 参数可以查看详细日志,便于排查问题。 * **官方文档:** 遇到复杂问题或需要了解更多高级功能时,请查阅 `gost` 的官方 GitHub 仓库和文档:[https://github.com/go-gost/gost](https://github.com/go-gost/gost) `gost` 功能强大且灵活,通过掌握上述基本用法,你就可以满足绝大多数代理需求。
配图 (可多选)
选择新图片文件或拖拽到此处
标签
更新文章
删除文章