sshtun 多条 SSH 隧道一站式管理:TUN 透明代理、端口转发、SOCKS5,带 Web 界面与 Windows 图形客户端。

特性

  • 三种前端,同一份数据
    • sshtun 命令行:适合脚本与快速排查
    • sshtun web:内置 HTTP 服务,用浏览器管理隧道
    • sshtun-gui(仅 Windows):内嵌 WebView2 的独立窗口
  • 隧道配置存数据库(SQLite),配置文件只保留基础设置;配置与隧道分离,便于多机同步
  • TUN 模式:按网段分流,支持「走隧道」与「强制直连(bypass)」
  • SOCKS5 代理:每条隧道一个独立代理,监听 127.0.0.1,端口由内核分配
  • 端口转发:本地转发(-L)与远程转发(-R)
  • 凭据加密存储:SSH 密码用 AES-256-GCM 加密后入库,密钥由「编译期种子 + 本机机器码」派生
  • 主机密钥校验:accept-new(首次自动信任)/ strict(必须已信任)/ none(不校验)
  • 界面双语:Web 界面中英双语,未配置语言时跟随浏览器系统语言
  • 隧道进程隔离:隧道跑在独立进程,Web 进程不持有明文凭据
  • 跨实例互斥:同一时刻同一条隧道只能被一个实例占用,避免 TUN 网卡被互删

 

sshtun 多条 SSH 隧道一站式管理:TUN 透明代理、端口转发、SOCKS5,带 Web 界面与 Windows 图形客户端。 sshtun 多条 SSH 隧道一站式管理:TUN 透明代理、端口转发、SOCKS5,带 Web 界面与 Windows 图形客户端。 sshtun 多条 SSH 隧道一站式管理:TUN 透明代理、端口转发、SOCKS5,带 Web 界面与 Windows 图形客户端。 sshtun 多条 SSH 隧道一站式管理:TUN 透明代理、端口转发、SOCKS5,带 Web 界面与 Windows 图形客户端。

 

快速开始

1. 准备 tun2socks

发行包内附带了下载脚本,运行即可(会解压到当前目录):

# Linux / macOS
sh dl-tun2socks.sh
:: Windows
dl-tun2socks.bat

脚本会先比对本地版本,已是最新则跳过。Windows 版还会一并下载 wintun.dll。

2. 添加隧道

sshtun db tunnel add office \  --host example.com --port 22 --user root \  --auth password --password 'your-password' \  --host-key accept-new \  --tun-name sshtun0 --tun-address 198.18.0.1/30

3. 添加路由(哪些网段走隧道)

sshtun db route add office 192.168.31.0/24,10.0.0.0/8

逗号分隔可一次添加多条。--bypass 表示强制直连(不走隧道)。

4. 添加端口转发

# 本地 8080 -> 远端 10.0.0.5:80sshtun db forward add office local 8080 10.0.0.5:80# 一次添加多个端口,指向同一个目标sshtun db forward add office local 8080,8081,8082 10.0.0.5:80

端口与目标数量相同时按顺序一一对应;只给一个目标时,该目标被所有端口共用。 本地转发默认只监听 127.0.0.1,需要对外暴露用 --bind-addr 0.0.0.0。

5. 启动

sshtun start            # 启动全部启用的隧道sshtun start office     # 只启动指定隧道sshtun start -d         # 后台运行sshtun status           # 查看运行状态sshtun list             # 列出隧道及路由/转发数量sshtun stop             # 停止

TUN 模式需要特权:Linux 用 root 运行,Windows 用管理员运行。 权限不足时 sshtun check 会明确提示。


SSH 服务器要求

sshtun 在 SSH 连接上只开转发通道,不执行任何远端命令,所以对端 sshd 的要求很少。

必须满足

项说明
AllowTcpForwarding yes本地转发、SOCKS5、远程转发全靠它。OpenSSH 默认是 yes,但不少云镜像的加固脚本会改成 no
DisableForwarding no打开它会连同上表一并禁掉
认证方式密码或公钥都支持,服务端开启对应方式即可
不需要 shell账号可以是 nologin 或已锁定的账号,纯转发完全够用

一条命令看当前实际生效的值:

sudo sshd -T | grep -Ei 'allowtcpforwarding|disableforwarding|permitopen|permitlisten|gatewayports'

期望看到 allowtcpforwarding yes。

多数发行版把配置拆进 /etc/ssh/sshd_config.d/*.conf,片段优先于主配置,且同一关键字以第一个出现的生效值为准。 sshd -T 直接给出最终生效值,比翻文件可靠。

按需设置

项什么时候需要
GatewayPorts只做远程转发(-R)且要监听 0.0.0.0 时。默认 no,即使指定 0.0.0.0 也会被降到回环地址
PermitOpen想限制「允许连哪些目标」时。本地转发与 SOCKS5 走 direct-tcpip,设了就得放行对应目标
PermitListen想限制「允许在远端监听哪些地址/端口」时

排查「连得上但转发不通」:把 sshd 日志级别调到 DEBUG,重载 sshd 后日志里会写明被哪条规则拒绝。


命令行

sshtun start [tunnel|all]      启动隧道sshtun stop [tunnel|all]       停止隧道sshtun restart [tunnel|all]    重启隧道sshtun status                  查看运行状态sshtun list                    列出隧道及路由/转发数量sshtun check [tunnel|all]      自检配置与运行环境sshtun db tunnel|route|forward 管理隧道 / 路由 / 转发sshtun web                     启动 Web 管理界面sshtun version                 版本信息

多个隧道名用逗号分隔,或重复给出。sshtun start -d 在后台运行。

sshtun check 校验配置文件与数据库中的隧道,并自检运行环境(tun2socks 是否就绪、权限是否足够等)。 加 --connect 会额外测试每条隧道的 SSH 连接与认证。

sshtun db 子命令

命令说明
db tunnel list / show <name>列出 / 查看隧道完整配置
db tunnel add [name]新增隧道(省略参数进入交互向导)
db tunnel set [name]修改隧道(只覆盖显式给出的字段)
db tunnel rm [name]删除隧道(含其路由与转发)
db tunnel enable/disable <name>启用 / 停用
db route add <tunnel> <cidr[,cidr...]>添加路由(--bypass 强制直连)
db route list/rm <tunnel>列出 / 删除路由
db forward add <tunnel> <local|remote> <port[,port...]> <host:port[,...]>添加端口转发
db forward list/rm <tunnel>列出 / 删除转发
  • add / set 在交互式终端下省略参数会进入向导,逐项询问并回填默认值
  • rm 在交互式终端下会要求确认,-y 可跳过
  • db forward add 支持 --bind-addr(监听地址)与 --disable(添加后先不启用)

Web 界面

sshtun web                                    # 默认 127.0.0.1:8080sshtun web --hostname 0.0.0.0 --port 9000sshtun web --no-window                        # 只起服务,不自动开浏览器sshtun web --username admin --password 'xxx' # 命令行覆盖配置

浏览器打开后即可管理隧道、查看流量与日志、修改设置。

  • 界面语言:设置 → 界面外观 → 界面语言(自动 / 简体中文 / English)。选「自动」时跟随浏览器系统语言
  • 界面主题:设置 → 界面外观 → 界面主题(自动 / 浅色 / 深色),顶栏按钮可快速切换
  • 日志:顶栏「运行日志」打开抽屉,可按隧道筛选;支持自动刷新(2 / 5 / 10 / 30 秒 / 1 分钟可选)并自动跳到最新一条

远程访问须知

sshtun web 只提供 HTTP,没有 TLS。若要开放在网络上,务必:

  1. 设置强密码(--password 或配置 [web] password)。绑定非回环地址时未设密码会被拒绝启动
  2. 自行套一层 TLS(反向代理 / 内网 / VPN),否则密码与会话 Cookie 会明文传输
  3. 优先绑 127.0.0.1,用 SSH 隧道或 VPN 访问

Windows 图形程序

sshtun-gui.exe 是内嵌 WebView2 的独立窗口:

  • 双击运行;关闭窗口(X)只是最小化到系统托盘,托盘双击还原窗口,托盘右键 → 退出 才会真正退出并停止隧道、清理路由
  • 提权时会显示 UAC「盾牌」提示
  • 首次运行需要在系统安装 Microsoft Edge WebView2 运行时(Windows 10/11 通常已内置)
  • 单实例:已有实例在运行时再次双击,会把原窗口唤到前台

配置文件

默认位置 config/setting.conf(相对当前工作目录),首次运行自动生成。 用 -c/--config 指定其他路径。

[app]
db = config/sshtun.db          ; 数据库路径(相对工作目录)

[web]
hostname = 127.0.0.1           ; 监听地址;0.0.0.0 表示对外开放
port = 8080                   ; 监听端口;0 表示由内核分配
cors =                        ; 允许的跨域源,逗号分隔;* 表示任意源
username = admin              ; 登录用户名
password =                    ; 登录密码(支持明文或 enc: 密文)
language =                    ; 可选:auto|zh|en;留空=跟随浏览器系统语言
theme =                       ; 可选:auto|light|dark;留空=跟随浏览器系统主题

[tun2socks]
path =                        ; tun2socks 路径;留空=自动查找

[ssh]
connect_timeout = 15          ; 连接超时(秒)
keepalive = 30                ; 保活间隔(秒)

[log]
level = info                  ; debug|info|warn|error
dir = log                     ; 日志目录;留空=只输出到控制台
console = auto                ; auto|true|false,是否同时输出到控制台

language 与 theme 是可选项(默认模板里没有这两行,留空即自动跟随)。 隧道、路由、转发存在数据库里,不在这个文件里。


依赖

组件说明
Go≥ 1.26(仅编译时需要)
tun2socks运行必需,版本随 dl-tun2socks 脚本获取
wintun.dllWindows 的 TUN 驱动,脚本会自动下载
/dev/net/tunLinux 需要,modprobe tun 加载
WebView2仅 sshtun-gui 需要

发布包提供 linux-amd64 / linux-arm64 / windows-amd64 三个平台。 其他平台(如 macOS)源码可编译,但未提供预编译包。


从源码构建

make build            # 构建本机版本make build-linux      # 构建 linux-amd64 / linux-arm64make build-windows    # 构建 windows-amd64(含 sshtun-gui.exe)make all              # 全部平台make dist             # 打包归档到 dist/(会自动递增版本号)make t2s              # 预置各平台的 tun2socks 到包目录make icon             # 重新生成 Windows 图标资源(.syso)make test / vet       # 测试与静态检查make clean            # 清理

产物都在项目内的 dist/。

make dist 生成的包只含二进制与对应平台的 dl-tun2socks 脚本 —— 不含 tun2socks / wintun / logo, 由用户运行脚本自行获取最新版本。图标已内嵌进 exe(rsrc .syso)。

版本号

版本取自 VERSION 文件(其次 git tag)。make dist 会自动把补丁号 +1 并写回 VERSION; make dist VERSION=v1.2.3 可指定而不递增。

密码加密种子

密码用 AES-256-GCM 加密,密钥由「编译期注入的种子 + 本机机器码」派生:

make dist SECRET=$(head -c 32 /dev/urandom | base64)

每个部署应注入各自的随机种子:种子内置在二进制里,机器码也可被读取,所以默认情况下 拿到数据库和二进制就等于拿到明文密码。注入独立种子后,即便两者同时泄露也无法解密。 注意:更换种子后,此前用旧种子加密的密码将无法解密,需要重新输入。


目录结构

.├── main.go              程序入口├── cmd/                 命令行与 Web 服务(cobra)│   └── webui/           内嵌的前端资源(HTML/CSS/JS,双语)├── gui/                 Windows 图形程序(WebView2 外壳)├── internal/│   ├── config/          配置解析与校验│   ├── store/           SQLite 持久化(隧道/路由/转发)│   ├── sshclient/       SSH 客户端(仅转发,不执行远端命令)│   ├── tun2socks/       tun2socks 进程管理│   ├── socks5/          SOCKS5 代理│   ├── routing/         路由配置与清理(平台相关)│   ├── forwarder/       端口转发│   ├── hostkey/         主机密钥信任存储│   ├── secret/          密码加密(机器码绑定)│   ├── daemon/          后台化、状态文件、隧道锁│   ├── logging/         日志│   ├── traffic/         流量统计│   ├── fetch/           tun2socks 下载│   └── sshtest/         测试用 SSH 服务器├── scripts/             dl-tun2socks.sh / .bat(随包分发)├── tools/               构建辅助(fetch 下载 / mkpkg 打包)├── assets/              logo.ico / logo.png / logo.svg / icon-*.png└── config/              默认配置与数据库

常见问题

连不上 / 转发不通

报错 “administratively prohibited”,远端拒绝建立转发通道 服务端没开转发。按上一节确认 AllowTcpForwarding yes,改完 systemctl reload sshd。

隧道连上了,但一点流量都没有 先确认配了路由:sshtun db route list <隧道名>。只有落在路由网段里的流量才进隧道;标了 --bypass 的网段是强制直连。再用 sshtun check <隧道名> --connect 单独测一次通道。

本地转发报 “administratively prohibited” 服务端 PermitOpen 没放行这个目标。本地转发与 SOCKS5 走的都是 direct-tcpip,受这条限制。

本地转发报 “connect failed” 策略是放行的,是服务端到目标的路由或防火墙不通。报错文案会区分这两种:策略拒绝是 “administratively prohibited”,目标不可达是 “connect failed”。

远程转发在远端只能绑 127.0.0.1 服务端 GatewayPorts 是 no。要对外暴露改成 yes(或 clientspecified),并用 --bind-addr 0.0.0.0 指定。

权限与环境

sshtun check 报 “missing privileges” TUN 模式要建虚拟网卡、改路由表,需要 root(Linux)或管理员(Windows)。端口转发和 SOCKS5 不需要。

Linux 报 /dev/net/tun 不存在 内核没加载 tun 模块:sudo modprobe tun,并写进 /etc/modules-load.d/ 保证开机自动加载。

Windows 提示找不到 tun2socks 或 wintun.dll 在程序目录运行发行包自带的 dl-tun2socks.bat,会一并下载 tun2socks 与 wintun.dll。

WebView2 运行时缺失(Windows 图形程序打不开) 安装 Microsoft Edge WebView2 Runtime。Windows 10/11 通常已内置。

密码与主机密钥

换了服务器地址后要重新输密码 有意为之:连接地址(主机/端口)一变,库里存着的密码会被清空,避免旧密码被发到新地址。重新输一次即可。

提示密文无法解密 密码密文与本机机器码绑定,换机器或改主机名后解不开,重新输入一次就会用新机器码重新加密。

密码是明文存的? 不会。写入时统一用 AES-256-GCM 加密后入库;但默认种子是公开常量,生产部署请按「密码加密种子」注入各自的随机种子。

主机密钥变了,直接拒绝连接 这是防中间人的默认行为。确认新指纹无误后,删掉信任存储(known_hosts)里的旧记录再连;也可以用 ssh-keyscan 先取回新密钥。

运行与排查

SOCKS5 代理端口是多少 每条隧道一个独立代理,只监听 127.0.0.1,端口由内核分配。sshtun status 会打印 SOCKS5: <地址>。

日志在哪 配置里的 [log] dir,默认是工作目录下的 log/。Web 界面顶栏「运行日志」也能直接看,支持按隧道筛选。

同一个机器起了两个 sshtun,第二条隧道起不来 同一时刻同一条隧道只能被一个实例占用(跨进程锁),避免 TUN 网卡被互删。先停掉另一个实例。

忘记 Web 界面密码 改配置文件 [web] password,或用命令行 sshtun web --password 'xxx' 临时覆盖。

Web 界面绑定 0.0.0.0 后起不来 绑定非回环地址时未设密码会被拒绝启动(防止裸奔)。补一个密码即可。


安全须知

  • SSH 密码加密存储,但默认种子是公开常量 —— 见上文「密码加密种子」,生产部署务必注入独立种子
  • 隧道只做 TCP 转发(direct-tcpip / tcpip-forward),不会在对端执行任何命令
  • Web 进程不持有明文凭据:隧道运行在独立进程,解密只发生在隧道进程内
  • 修改连接地址会使已存密码立即作废,需重新输入 —— 避免「改了地址 → 密码被发到新地址」
  • Web 服务没有 TLS:开放在网络上时务必自行套 TLS,并设置强密码
  • 登录接口有限速:同一来源 IP 连续失败会指数退避(30 秒起,上限 5 分钟)
  • 绑定非回环地址时未设密码会被拒绝启动;绑定回环地址时会校验 Host 头,阻断 DNS rebinding
  • 同一时刻同一条隧道只能被一个实例占用(跨进程锁),避免 TUN 网卡被互删
相关文件下载地址
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

文章版权声明

 1 原创文章作者:汇维网,如若转载,请注明出处: https://www.52hwl.com/118264.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 4 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
colibrì v2.0.0 中文版:纯 C 写的本地 AI 引擎,8G 内存旧电脑也能跑 7440 亿参数大模型(附安装教程)
上一篇 2026年10月24日 上午11:00
DeepInfer:DeepSeek 官方开源推理框架,线上同款,附特性速览
下一篇 2026年10月24日 上午11:57

相关推荐

发表回复

登录后才能评论