Releases: Sesame2/gotun
v0.8.1 - 修复Go 1.26编译兼容性问题
v0.8.1 - 修复 Go 1.26 编译兼容性问题
此版本为一个热修复版本,主要解决了在最新的 Go 1.26 编译环境下出现的底层依赖冲突问题。普通用户的核心功能使用不受影响
🐛 修复与优化
- 修复 Go 1.26 编译崩溃: 修复了由于
gVisor底层依赖(pkg/sync)中构建标签(build tags)漏洞,导致在 Go 1.26 下编译时抛出WaitReasonSelect redeclared的错误 (#22)。 - 更新底层依赖: 将
gvisor.dev/gvisor依赖更新至专门兼容标准go build编译链的go分支版本,剥离了与 Bazel 构建系统混合导致的目录结构冲突。 - 解除编译环境限制: 包管理平台(Homebrew)现在可以顺利使用 Go 1.26 及以上环境构建本工具,不再需要强制将环境锁定在 Go 1.25。
What's Changed
Full Changelog: v0.8.0...v0.8.1
v0.8.0 - 新增TUN模式支持
✨ 核心功能更新
新增 TUN 模式 (TCP Only)
gotun 引入了强大的 TUN 模式,通过创建虚拟网卡,实现了对所有基于 TCP 协议的应用层流量的透明代理。
- 全应用支持: 不再局限于浏览器,现在可以完美支持 RDP 远程桌面、数据库连接 (MySQL/PostgreSQL)、Redis、SSH 等任何基于 TCP 的客户端。
- 指定网段代理: 支持指定网段代理 (
--tun-route),仅将特定内网流量导入 SSH 隧道,不影响本机其他网络访问。 - 网段映射 (NAT): 解决了本地与远程网段冲突的痛点。通过
--tun-nat参数,可以将远程冲突网段映射到本地的一个空闲网段,实现无缝访问。
使用场景示例 (RDP 远程桌面):
假设您在 192.168.1.0/24,目标 Windows 在远程内网 192.168.2.1 (网段 192.168.2.0/24)。
# 建立隧道,将去往 192.168.2.0/24 的流量全部通过 SSH 转发
gotun user@jump-host --tun-route 192.168.2.0/24
启动后,直接使用 RDP 客户端连接 192.168.2.1 即可,就像在局域网内一样!
⚠️ 注意: 当前版本的 TUN 模式仅支持 TCP 协议。不支持 UDP 流量和 ICMP (ping)。
⚙️ 命令行参数优化 (语义化变更)
为了使参数更加直观和符合语义,我们对部分参数进行了重命名(旧参数仍兼容,但建议迁移):
-
HTTP 代理:
-
--listen(-l) ➡️--http:指定本地 HTTP 代理监听地址。 -
--target(-t) ➡️--http-upstream:指定 HTTP 代理的上游目标(反向代理模式)。 -
TUN 模式参数:
-
--tun:显式启用 TUN 模式。 -
--tun-global(-g):启用全局 TUN 模式(慎用,可能与 Clash/ZeroTier 冲突)。 -
--tun-route <CIDR>:指定走代理的目标网段。 -
--tun-nat <Local:Remote>:启用网段映射。
🛠️ 内部改进
- gVisor 集成: 引入了 gVisor 的用户态协议栈 (netstack) 来处理 TUN 设备的 TCP/IP 流量,确保了稳定性和跨平台兼容性。
- Wintun 支持: Windows 平台采用高性能的 Wintun 驱动(需配合
wintun.dll使用)。
What's Changed
Full Changelog: v0.7.0...v0.8.0
v0.7.0 - 新增SOCKS5代理支持
✨ 核心功能更新
新增 SOCKS5 代理支持
gotun 现在不仅仅是一个 HTTP 代理,它还内置了完整的 SOCKS5 代理服务器!
- 全协议支持:支持 TCP/UDP 流量转发。
- 智能路由:SOCKS5 流量同样遵循您的自定义路由规则(--rules)。
- 远程 DNS 解析:支持 SOCKS5 协议的域名透传,配合路由规则可实现基于域名的分流,防止 DNS 污染。
使用方法:
# 开启 SOCKS5 代理,默认监听 :1080
gotun --socks5 :1080 [email protected]🛠️ 内部重构与优化
- 依赖反转 (IoC):重构了核心启动逻辑,实现了 SSH 客户端与代理服务的解耦,为未来支持更多协议(如 TUN 模式)打下基础。
- 配置验证增强:启动前会对所有参数进行更严格的校验,避免运行时错误。
What's Changed
- feat: 添加安装脚本 by @Sesame2 in #16
- chore: 添加Go CI工作流以支持构建、测试和代码检查 by @Sesame2 in #17
- docs: 添加英文README by @Sesame2 in #19
- feat: 添加SOCKS5代理支持,更新配置和初始化逻辑 by @Sesame2 in #20
Full Changelog: v0.6.1...v0.7.0
v0.6.1 - 修复版本号打印错误的问题
v0.6.0 - 框架重构与命令补全
✨ 核心变更:使用 Cobra 框架重构命令行参数解析
🚀 主要亮点
- 强大的命令自动补全
- 支持的 Shell: Bash, Zsh, Fish, PowerShell
使用方法:
运行下面脚本
#!/usr/bin/env bash
set -euo pipefail
app="gotun"
shell="${1:-}"
if ! command -v "$app" >/dev/null 2>&1; then
echo "Error: $app not found in PATH" >&2
exit 1
fi
detect_shell() {
if [ -n "${shell}" ]; then echo "$shell"; return; fi
case "${SHELL:-}" in
*zsh) echo zsh ;;
*fish) echo fish ;;
*bash|*sh) echo bash ;;
*) echo bash ;;
esac
}
install_zsh() {
local zdir="${ZDOTDIR:-$HOME}/.zfunc"
mkdir -p "$zdir"
"$app" completion zsh > "$zdir/_${app}"
chmod -R go-w "$zdir"
local zrc="${ZDOTDIR:-$HOME}/.zshrc"
grep -q '\.zfunc' "$zrc" 2>/dev/null || echo 'fpath+=("${ZDOTDIR:-$HOME}/.zfunc")' >> "$zrc"
grep -q 'compinit' "$zrc" 2>/dev/null || echo 'autoload -Uz compinit; compinit' >> "$zrc"
echo "[zsh] Installed to $zdir/_${app}. Run: exec zsh"
}
install_bash() {
local udir="$HOME/.local/share/bash-completion/completions"
mkdir -p "$udir"
"$app" completion bash > "$udir/${app}"
local brc="$HOME/.bashrc"
if ! grep -q 'bash_completion' "$brc" 2>/dev/null; then
cat >>"$brc" <<'EOF'
# Enable bash-completion (common locations)
if [ -r /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -r /etc/bash_completion ]; then
. /etc/bash_completion
elif command -v brew >/dev/null && [ -r "$(brew --prefix)/etc/profile.d/bash_completion.sh" ]; then
. "$(brew --prefix)/etc/profile.d/bash_completion.sh"
fi
EOF
fi
echo "[bash] Installed to $udir/${app}. Run: exec bash"
}
install_fish() {
local fdir="$HOME/.config/fish/completions"
mkdir -p "$fdir"
"$app" completion fish > "$fdir/${app}.fish"
echo "[fish] Installed to $fdir/${app}.fish. Run: exec fish"
}
case "$(detect_shell)" in
zsh) install_zsh ;;
bash) install_bash ;;
fish) install_fish ;;
*) install_bash ;;
esac# 重启终端后即可享受 Tab 补全的便捷
gotun -<Tab>
gotun --listen <Tab>- 更规范的命令行界面
- 标准的帮助信息:gotun --help 现在会输出由 Cobra 生成的、结构清晰的帮助文档。
- 版本信息:gotun --version 现在是内置的、标准的版本查询命令。
What's Changed
Full Changelog: v0.5.0...v0.6.0
v0.5.0 - 支持自定义路由规则
✨ 新增核心功能:自定义路由规则
此版本引入了一个强大的新功能 —— 自定义路由规则。
现在,gotun可以通过一个 YAML 格式的规则文件 精确控制哪些请求通过 SSH 代理,哪些直接连接。
🧱 功能亮点
✅ 支持 YAML 格式的规则文件
通过新的 -rules 命令行参数,您可以指定一个 YAML 规则文件。
gotun 将根据文件内容自动进行请求分流。
⚙️ 命令行变更
- 新增参数:
-rules <path>— 指定自定义路由规则文件 - 移除参数:
-proxy-pac(已废弃)
原 PAC 功能已被更通用的规则系统取代。
What's Changed
Full Changelog: v0.4.0...v0.5.0
v0.4.0 - 项目结构重构与构建规范化
🛠️ 内部重构与改进
此版本没有新增面向用户的命令行功能,但进行了一次重要的内部结构重构,以符合 Go 社区的最佳实践。
-
项目结构调整:
- 将主程序入口从
cmd/gotun.go移动到cmd/gotun/main.go。 - 这种结构使项目更加清晰,并为未来可能增加其他命令(如
gotun-server)做好了准备。
- 将主程序入口从
-
构建系统改进:
- 更新了
Makefile,使其能够处理新的目录结构。 - 所有的构建路径都已变量化,提高了可维护性。
- 更新了
✨ 新增的开发者功能
- 支持
go install:- 现在,您可以通过标准的 Go 工具链直接安装
gotun到您的系统中:go install github.com/Sesame2/gotun/cmd/gotun@latest
- 现在,您可以通过标准的 Go 工具链直接安装
What's Changed
Full Changelog: v0.3.0...v0.4.0
v0.3.0 - 新增多级跳板机支持
🔄 新增功能:
- 支持单级和多级跳板机 (Jump Host):
- 通过
-J参数指定跳板机,支持单级和多级跳板机连接。 - 格式支持
user@host:port,多个跳板机用逗号分隔。 - 自动依次建立 SSH 隧道,最终连接到目标服务器。
- 通过
📦 示例行为:
# 单级跳板机
gotun -J [email protected] [email protected]
# 多级跳板机
gotun -J [email protected],[email protected] [email protected]gotun会依次连接跳板机,最终建立到目标服务器的隧道。- 适用于需要穿透多层网络的场景。
Full Changelog: v0.2.0...v0.3.0
v0.2.0 - 支持自动私钥识别
🔄 新增功能:
- 自动识别默认 SSH 私钥路径(如 ~/.ssh/id_rsa、id_ed25519 等),无需手动指定。
- 如果未指定私钥,系统会尝试加载并连接所有已存在的私钥。
- 当私钥全部失败时,自动回退至交互式密码认证。
- 整体连接体验与原生 ssh 命令保持一致。
📦 示例行为:
gotun user@host→ 会自动使用 ~/.ssh 下的私钥,失败后进入密码输入。gotun -i ~/.ssh/id_ed25519 user@host→ 优先使用指定私钥。
🐛 错误处理优化:
- 明确日志输出私钥加载失败与连接失败原因。
- 忽略损坏或无法解析的私钥文件,不影响整体流程。
Full Changelog: v0.1.0...v0.2.0
v0.1.0 - 初始发布
🚀 新功能
- 第一个公开版本发布
- 支持基本命令行执行
- 支持编译为 Windows / macOS / Linux
📦 注意事项
- 此版本为预览版,后续可能不兼容
Full Changelog: https://github.com/Sesame2/gotun/commits/v0.1.0