gotun
🚀 基于 SSH 的轻量级 HTTP 代理工具,使用 Go 编写,跨平台开箱即用。
✨ 项目简介
gotun 是一个 HTTP-over-SSH 的命令行代理工具。它通过 SSH 协议连接远程主机,利用该主机作为 网络出口,将本地发起的 HTTP 请求安全地通过远程主机访问目标地址。你可以使用它来访问:
- 内网中的路由器、服务器、API 等资源
- 仅远程主机可访问的网络(公司内网、隔离网段等)
- 任意 HTTP 网站,使用远程主机作为「中转代理」
🎨 工作原理示意图
使用前:无法直接访问内网资源
你的电脑 防火墙/NAT 内网环境
┌─────────┐ ┌─────────┐ ┌─────────────┐
│ │ ❌ 直接访问 │ │ │ 📱 路由器 │
│ 💻 PC │ ──────────────▶│ 🔥🚫 │ │ 📺 NAS │
│ │ 被阻止/拒绝 │ │ │ 🖥️ 服务器 │
└─────────┘ └─────────┘ │ 📟 IoT设备 │
└─────────────┘
使用后:通过SSH跳板访问所有内网资源
你的电脑 SSH连接(22端口) 跳板机 内网环境
┌─────────┐ ┌─────────────┐ ┌─────────┐ ┌─────────────┐
│ │ 🔐 │ │ 🌐 │ │ ✅ │ 📱 路由器 │
│ 💻 PC │◀────────▶│ gotun代理隧道│◀───────▶│ 🖥️ 跳板机 │◀───────▶│ 📺 NAS │
│ │ HTTP请求 │ (加密传输) │ SSH │ │ 内网访问 │ 🖥️ 服务器 │
└─────────┘ └─────────────┘ └─────────┘ │ 📟 IoT设备 │
↑ └─────────────┘
└── 浏览器设置代理: 127.0.0.1:8080
🔑 核心优势
| 传统方案 |
gotun |
| ❌ 需要复杂的端口转发配置 |
✅ 仅需一个SSH连接 |
| ❌ 每个服务需要单独映射端口 |
✅ 访问所有内网资源无需额外配置 |
| ❌ 容易暴露内网服务到公网 |
✅ 流量全程加密,安全可靠 |
| ❌ 管理多个连接复杂 |
✅ 一条隧道解决所有问题 |
简单来说: gotun 让你的电脑就像"坐在"跳板机旁边一样,可以访问跳板机能访问的任何资源!
🧱 项目特点
- ✅ 无需在远程主机部署任何代理服务
- ✅ 全部请求自动通过 SSH 加密隧道传输
- ✅ 支持访问任何远程主机可访问的地址(含内网)
- ✅ 支持跨平台运行(Windows / Linux / macOS)
- ✅ 支持作为系统 HTTP 代理(可选扩展)
🚀 快速开始
安装
下载预编译二进制文件
前往 Releases 页面下载适合你系统的预编译版本:
从源码编译
git clone https://github.com/Sesame2/gotun.git
cd gotun
make build
编译后的可执行文件位于 build/ 目录下。
基本使用
# 基本用法:连接到SSH服务器并启动代理
./gotun user@example.com
# 指定SSH端口
./gotun -p 2222 user@example.com
# 使用私钥认证
./gotun -i ~/.ssh/id_rsa user@example.com
# 自定义代理监听端口
./gotun -listen :8888 user@example.com
# 自动设置系统代理
./gotun -sys-proxy user@example.com
在浏览器中使用
启动代理后,在浏览器中配置HTTP代理:
- 代理地址:
127.0.0.1
- 端口:
8080 (默认,或你指定的端口)
📖 操作手册
命令行参数
| 参数 |
简写 |
说明 |
默认值 |
-listen |
|
本地HTTP代理监听地址 |
:8080 |
-p |
|
SSH服务器端口 |
22 |
-pass |
|
SSH密码(不推荐,建议使用私钥) |
|
-i |
|
SSH私钥文件路径 |
|
-target |
|
可选的目标网络覆盖 |
|
-timeout |
|
连接超时时间 |
10s |
-v |
|
启用详细日志 |
false |
-log |
|
日志文件路径 |
输出到标准输出 |
-sys-proxy |
|
自动设置系统代理 |
true |
-proxy-pac |
|
代理自动配置(PAC)文件URL |
|
使用场景
1. 访问内网服务
通过具有内网访问权限的跳板机访问内网资源:
./gotun -sys-proxy admin@jumpserver.company.com
启动后,浏览器中访问内网地址如 http://192.168.1.100:8080
2. 开发调试
在开发环境中通过远程服务器访问特定网络:
./gotun -listen :8888 -v developer@devserver.example.com
3. 网络代理
使用远程服务器作为网络出口:
./gotun -sys-proxy -log /var/log/gotun.log user@proxy-server.com
认证方式
SSH私钥认证(推荐)
# 使用指定私钥文件
./gotun -i ~/.ssh/id_rsa user@example.com
# 使用默认私钥(自动检测 ~/.ssh/ 目录下的密钥)
./gotun user@example.com
密码认证
# 交互式输入密码(推荐)
./gotun user@example.com
# 程序会提示输入密码
# 命令行指定密码(不安全,不推荐)
./gotun -pass yourpassword user@example.com
系统代理设置
当使用 -sys-proxy 参数时,程序会自动:
- 启动时: 保存当前系统代理设置,然后设置为使用 gotun 代理
- 运行中: 所有系统网络流量通过 gotun 代理
- 退出时: 自动恢复原始的系统代理设置
支持的操作系统:
- ✅ macOS: 通过
networksetup 命令配置
- ✅ Windows: 通过注册表配置
- ✅ Linux: 通过 GNOME 设置和环境变量配置
故障排除
连接问题
# 启用详细日志进行调试
./gotun -v user@example.com
# 指定日志文件
./gotun -v -log /tmp/gotun.log user@example.com
权限问题
在某些系统上设置系统代理需要管理员权限:
# macOS/Linux
sudo ./gotun -sys-proxy user@example.com
# Windows (以管理员身份运行 PowerShell/CMD)
.\gotun.exe -sys-proxy user@example.com
🎯 功能状态
- HTTP 代理: 完整的 HTTP 请求代理
- HTTPS 代理: 支持 CONNECT 方法的 HTTPS 隧道
- SSH 私钥认证: 支持多种私钥格式
- 自动配置系统代理: 跨平台系统代理设置
- 交互式密码输入: 安全的密码认证方式
- 详细日志记录: 支持调试和故障排除
- 跨平台支持: Windows/Linux/macOS
- 命令行界面: 完整的 CLI 参数支持
- PAC 文件支持: 代理自动配置文件
- 托盘 GUI 界面: 图形化用户界面
- 配置文件导出/导入: 配置管理功能
- 命令行自动补全: 基于 Cobra 的智能提示
- SOCKS5 代理支持: 更广泛的协议支持
- 连接池优化: 提升性能和稳定性
- 统计和监控: 流量统计和连接监控