常见问题 (FAQ)

了解关于SSH-Tunnel的常见问题和解决方案

SSH-Tunnel是一个基于SSH协议建立安全隧道并提供本地代理服务的工具。它的工作原理如下:

  1. SSH-Tunnel通过SSH协议连接到远程服务器
  2. 在本地启动SOCKS5和/或HTTP代理服务器
  3. 当您的应用程序通过这些代理发送网络请求时,请求会通过SSH隧道安全地转发到远程服务器
  4. 远程服务器代表客户端发出请求,并将响应通过隧道返回给您

这种方式提供了几个优势:

  • 所有通信都通过SSH协议加密,确保安全性
  • 您的网络流量看起来像是来自远程服务器,而不是您的本地设备
  • 可以绕过某些网络限制或防火墙

SOCKS5代理:
  • 支持任何网络协议(TCP/UDP)
  • 能够代理几乎所有类型的流量,包括HTTP、FTP、SMTP等
  • 不理解或修改网络流量的内容
  • 适用于各种应用程序,不仅限于网页浏览
HTTP代理:
  • 专门用于HTTP/HTTPS流量
  • 理解HTTP协议,可以检查和修改HTTP请求/响应
  • 可以进行内容缓存、过滤和修改
  • 通常在Web浏览中速度更快
选择建议:
  • 选择SOCKS5,如果: 您需要代理各种应用程序(不仅是浏览器)的流量,或需要代理非HTTP流量
  • 选择HTTP代理,如果: 您主要是Web浏览,或需要HTTP特定功能如内容过滤
  • 同时使用两者: SSH-Tunnel允许您同时启用两种代理,您可以根据不同应用的需求选择合适的代理
提示: 如果不确定,可以启用两种代理(SOCKS5在端口1081,HTTP在端口1082),并根据需要使用。

如果您在连接SSH服务器时遇到问题,请按照以下步骤排查:

  1. 验证SSH服务器信息:
    • 确认服务器IP地址正确
    • 确认SSH端口正确(默认是22)
    • 确认用户名正确
  2. 检查SSH密钥:
    • 确认私钥文件路径正确
    • 确认私钥文件权限正确(Linux/MacOS上应为600)
    • 尝试使用常规ssh命令连接服务器以验证密钥是否有效:ssh -i /path/to/private_key username@server_ip
  3. 检查网络连接:
    • 确认您可以从当前网络访问SSH服务器(例如通过ping测试)
    • 确认SSH端口没有被防火墙阻止
  4. 检查SSH服务器状态:
    • 确认SSH服务在服务器上运行
    • 查看服务器SSH日志寻找可能的错误
  5. 启用详细日志:
    • 使用 -admin.enable 启动SSH-Tunnel并查看管理界面上的日志

SSH-Tunnel已经内置了自动重连机制,但如果您仍然遇到连接不稳定的问题,可以尝试以下解决方案:

  1. 调整重试间隔:

    使用 -retry.interval.sec 参数调整重连间隔时间(默认为3秒):

    ./ssh-tunnel -s your_server -retry.interval.sec 5
  2. 检查网络环境:
    • 确认您的网络连接稳定
    • 如果使用移动网络或公共WiFi,这些网络可能不稳定或有流量限制
  3. 配置SSH服务器保持连接:

    在服务器的 /etc/ssh/sshd_config 文件中添加或修改以下配置:

    TCPKeepAlive yes
    ClientAliveInterval 30
    ClientAliveCountMax 3

    修改后重启SSH服务:sudo systemctl restart sshd

  4. 使用服务模式运行:

    将SSH-Tunnel配置为系统服务(Windows服务或Linux/MacOS守护进程),这样在发生崩溃时系统会自动重启服务

  5. 检查管理界面日志:

    启用管理界面并监控日志,查找可能导致断开的原因

提示: 如果您在使用笔记本电脑,确保禁用系统的电源管理功能不会在非活动状态下关闭网络连接。

域名过滤功能允许您指定哪些域名的请求通过SSH隧道转发,而其他域名则直接访问。这在以下场景中特别有用:

启用域名过滤:
  1. 创建一个域名过滤文件(例如 domain.txt),每行一个域名模式:
  2. *.google.com
    *.github.com
    github.com
    *.stackoverflow.com
  3. 启动SSH-Tunnel并启用域名过滤:
  4. ./ssh-tunnel -s your_server -http.enable -http.domain-filter.enable -http.domain-filter.file-path /path/to/domain.txt
域名过滤的用途:
  • 选择性代理: 只将特定网站的流量通过SSH隧道,其他网站直接访问,提高整体浏览速度
  • 资源优化: 仅对需要代理的网站使用隧道,减少带宽使用
  • 特定需求访问: 只对地理限制或被屏蔽的网站使用代理
通过管理界面管理域名:

如果启用了管理界面,您可以在Web界面上动态添加、删除和修改域名列表,无需重启服务:

  1. 访问 http://localhost:1083/view/index
  2. 点击导航栏中的"域名列表"
  3. 在界面上管理域名过滤规则
注意: 域名过滤仅适用于HTTP代理模式,不适用于SOCKS5代理。

您可以在各种浏览器中配置使用SSH-Tunnel提供的代理服务:

Google Chrome:
  1. 打开设置 (Settings)
  2. 搜索"代理"或滚动到底部点击"高级",然后找到"系统"部分下的"打开计算机代理设置"
  3. 在Windows上,这将打开系统代理设置
  4. 在macOS上,这将打开"网络"偏好设置的"代理"选项卡
Firefox:
  1. 打开设置 (Options/Preferences)
  2. 滚动到底部,点击"网络设置"下的"设置"
  3. 选择"手动配置代理"
  4. 对于SOCKS代理:输入"127.0.0.1"作为SOCKS主机,"1081"作为端口,选择"SOCKS v5"
  5. 对于HTTP代理:输入"127.0.0.1"作为HTTP代理,"1082"作为端口
  6. 点击"确定"保存设置
Microsoft Edge:
  1. 打开设置
  2. 搜索"代理"或导航到"系统和性能"
  3. 点击"打开计算机代理设置"
Safari:
  1. 打开"系统偏好设置"
  2. 点击"网络"
  3. 选择当前连接,然后点击"高级"
  4. 选择"代理"选项卡
  5. 选择"SOCKS代理"并输入"127.0.0.1"和"1081",或选择"Web代理"并输入"127.0.0.1"和"1082"
  6. 点击"好",然后点击"应用"
使用代理切换扩展:

您也可以使用浏览器扩展来方便地切换代理设置:

提示: 使用扩展可以更方便地在不同代理配置之间切换,甚至可以设置基于URL的自动代理规则。

您可以运行多个SSH-Tunnel实例,连接到不同的服务器或使用不同的配置。这在以下情况下特别有用:

  • 连接到不同地区的服务器以获取不同的IP地址
  • 为不同的应用程序使用不同的代理配置
  • 测试不同的代理设置
运行多个实例的步骤:
  1. 为每个实例指定不同的端口:
  2. # 实例1
    ./ssh-tunnel -s server1 -l 127.0.0.1:1081 -http.local.address 127.0.0.1:1082 -admin.address 127.0.0.1:1083
    
    # 实例2
    ./ssh-tunnel -s server2 -l 127.0.0.1:2081 -http.local.address 127.0.0.1:2082 -admin.address 127.0.0.1:2083
  3. 如果配置为系统服务,为每个实例创建不同的服务配置文件
针对Windows服务:

对于Windows服务,您需要:

  1. 在不同目录中安装不同的服务实例:
  2. # 在C:\ssh-tunnel1目录安装第一个服务
    C:\ssh-tunnel1\ssh-tunnel-svc.exe install --config=C:\ssh-tunnel1\.ssh-tunnel\config.properties
    
    # 在C:\ssh-tunnel2目录安装第二个服务
    C:\ssh-tunnel2\ssh-tunnel-svc.exe install --name "SSHTunnelService2" --config=C:\ssh-tunnel2\.ssh-tunnel\config.properties
  3. 为每个实例创建不同的配置文件(.ssh-tunnel/config.properties)
针对MacOS LaunchAgents:

对于MacOS,创建多个不同名称的plist文件:

# 第一个实例
/Library/LaunchDaemons/com.idefav.ssh-tunnel1.plist

# 第二个实例
/Library/LaunchDaemons/com.idefav.ssh-tunnel2.plist
注意: 运行多个实例时,确保端口不冲突,每个实例使用不同的端口。

是的,SSH-Tunnel可以与许多其他工具和服务集成:

网络应用集成:
  • 浏览器: 所有支持代理的浏览器都可以使用SSH-Tunnel
  • 电子邮件客户端: Outlook, Thunderbird等可以配置使用代理
  • 即时通讯工具: 许多IM客户端支持代理设置
  • FTP客户端: 通过SOCKS5代理进行文件传输
系统级集成:
  • 系统代理: 配置操作系统全局代理,使所有应用程序使用SSH-Tunnel
  • VPN分流: 与VPN结合使用,实现特定流量的分流
开发工具集成:
  • Git: 配置Git使用代理进行代码拉取和推送
  • 命令行工具: 为curl, wget等设置代理环境变量
  • 包管理器: 为npm, pip等配置代理
集成示例:

配置Git使用SSH-Tunnel:

# 使用HTTP代理
git config --global http.proxy http://127.0.0.1:1082

# 使用SOCKS5代理
git config --global http.proxy socks5://127.0.0.1:1081

设置Linux/MacOS命令行代理环境变量:

# HTTP代理
export http_proxy=http://127.0.0.1:1082
export https_proxy=http://127.0.0.1:1082

# SOCKS5代理
export ALL_PROXY=socks5://127.0.0.1:1081

Windows命令行代理:

set http_proxy=http://127.0.0.1:1082
set https_proxy=http://127.0.0.1:1082
提示: 对于需要同时连接内外网的场景,建议使用域名过滤功能,只对特定域名使用代理。

还有其他问题?

如果您有其他问题或遇到未在此页面列出的问题,您可以:

在GitHub上提问

在项目的GitHub仓库创建一个Issue,详细描述您的问题。

提交Issue
查阅文档

查看详细的项目文档以获取更多信息和高级用法。

查看文档