Skip to content

Releases: Sesame2/gotun

v0.8.1 - 修复Go 1.26编译兼容性问题

13 Mar 09:09
df99375

Choose a tag to compare

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

  • fix: 更新gvisor依赖以修复 Go 1.26 环境下的编译失败问题 by @Sesame2 in #24

Full Changelog: v0.8.0...v0.8.1

v0.8.0 - 新增TUN模式支持

03 Jan 11:26
05e95fa

Choose a tag to compare

✨ 核心功能更新

新增 TUN 模式 (TCP Only)

gotun 引入了强大的 TUN 模式,通过创建虚拟网卡,实现了对所有基于 TCP 协议的应用层流量的透明代理。

  • 全应用支持: 不再局限于浏览器,现在可以完美支持 RDP 远程桌面数据库连接 (MySQL/PostgreSQL)、RedisSSH 等任何基于 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代理支持

17 Dec 06:57
43ea244

Choose a tag to compare

✨ 核心功能更新

新增 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 - 修复版本号打印错误的问题

10 Nov 07:16
69d9715

Choose a tag to compare

修复--version命令

What's Changed

  • docs: v0.6.0版本更新命令行参数格式 by @Sesame2 in #14
  • fix: 修复--version参数打印版本号不正确的问题 by @Sesame2 in #15

Full Changelog: v0.6.0...v0.6.1

v0.6.0 - 框架重构与命令补全

02 Nov 15:20
dfa7241

Choose a tag to compare

✨ 核心变更:使用 Cobra 框架重构命令行参数解析

🚀 主要亮点

  1. 强大的命令自动补全
  • 支持的 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>
  1. 更规范的命令行界面
  • 标准的帮助信息:gotun --help 现在会输出由 Cobra 生成的、结构清晰的帮助文档。
  • 版本信息:gotun --version 现在是内置的、标准的版本查询命令。

What's Changed

  • feat: 使用Cobra框架重构命令行参数解析 by @Sesame2 in #13

Full Changelog: v0.5.0...v0.6.0

v0.5.0 - 支持自定义路由规则

27 Oct 12:19
6f52968

Choose a tag to compare

✨ 新增核心功能:自定义路由规则

此版本引入了一个强大的新功能 —— 自定义路由规则
现在,gotun可以通过一个 YAML 格式的规则文件 精确控制哪些请求通过 SSH 代理,哪些直接连接。

🧱 功能亮点

✅ 支持 YAML 格式的规则文件

通过新的 -rules 命令行参数,您可以指定一个 YAML 规则文件。
gotun 将根据文件内容自动进行请求分流。

⚙️ 命令行变更

  • 新增参数:
    -rules <path> — 指定自定义路由规则文件
  • 移除参数:
    -proxy-pac(已废弃)

原 PAC 功能已被更通用的规则系统取代。

What's Changed

  • docs: 更新基本使用说明,明确系统代理默认行为 by @Sesame2 in #11
  • feat: 新增自定义流量规则的支持 by @Sesame2 in #12

Full Changelog: v0.4.0...v0.5.0

v0.4.0 - 项目结构重构与构建规范化

09 Oct 06:23

Choose a tag to compare

🛠️ 内部重构与改进

此版本没有新增面向用户的命令行功能,但进行了一次重要的内部结构重构,以符合 Go 社区的最佳实践。

  • 项目结构调整:

    • 将主程序入口从 cmd/gotun.go 移动到 cmd/gotun/main.go
    • 这种结构使项目更加清晰,并为未来可能增加其他命令(如 gotun-server)做好了准备。
  • 构建系统改进:

    • 更新了 Makefile,使其能够处理新的目录结构。
    • 所有的构建路径都已变量化,提高了可维护性。

✨ 新增的开发者功能

  • 支持 go install:
    • 现在,您可以通过标准的 Go 工具链直接安装 gotun 到您的系统中:
      go install github.com/Sesame2/gotun/cmd/gotun@latest

What's Changed

  • refactor: 优化项目目录结构,以支持go install by @Sesame2 in #9

Full Changelog: v0.3.0...v0.4.0

v0.3.0 - 新增多级跳板机支持

06 Oct 12:35
ced500b

Choose a tag to compare

🔄 新增功能:

  • 支持单级和多级跳板机 (Jump Host)
    • 通过 -J 参数指定跳板机,支持单级和多级跳板机连接。
    • 格式支持 user@host:port,多个跳板机用逗号分隔。
    • 自动依次建立 SSH 隧道,最终连接到目标服务器。

📦 示例行为:

  • gotun 会依次连接跳板机,最终建立到目标服务器的隧道。
  • 适用于需要穿透多层网络的场景。

Full Changelog: v0.2.0...v0.3.0

v0.2.0 - 支持自动私钥识别

20 Sep 12:02

Choose a tag to compare

🔄 新增功能:

  • 自动识别默认 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 - 初始发布

19 Sep 08:56

Choose a tag to compare


🚀 新功能
- 第一个公开版本发布
- 支持基本命令行执行
- 支持编译为 Windows / macOS / Linux

📦 注意事项
- 此版本为预览版,后续可能不兼容

Full Changelog: https://github.com/Sesame2/gotun/commits/v0.1.0