如何通过SSH透明绕过代理访问特定域?简化现有访问配置
嘿,我太懂你这种维护一堆静态SSH隧道的痛苦了——每条服务都要手动映射不同本地端口,书签和开发配置还得跟着改,简直是重复劳动。针对你想要透明绕过企业代理、直接访问特定隔离域服务的需求,这里有几个更省心的方案,比折腾动态SOCKS代理或者手动维护隧道高效多了:
方案一:用sshuttle实现完全透明的域名/网段转发
这是我最推荐的方案,sshuttle是一款基于SSH的透明代理工具,能让指定域名或网段的流量自动通过SSH跳板传输,完全不用手动配置端口,也不用改任何应用设置。
操作步骤:
- 先安装sshuttle:
- Linux发行版:
sudo apt install sshuttle(Debian/Ubuntu系)或yum install sshuttle(RHEL/CentOS系) - macOS:用Homebrew安装
brew install sshuttle
- Linux发行版:
- 根据你的需求运行命令:
如果是针对特定域名:
如果这些域名属于同一个内部网段,直接指定网段更方便:sshuttle -r secretServer1 --dns super01.secret.host super02.secret.host super03.secret.hostsshuttle -r secretServer1 --dns 192.168.100.0/24 # 替换成隔离网络的实际网段 - 命令运行后,你的本地系统会自动把这些域名/网段的流量通过
secretServer1(或对应跳板)转发,不管是浏览器书签还是本地开发程序,直接用原域名+端口访问就行,比如super01.secret.host:3419,完全不用改localhost端口!
核心优势:
- 完全透明,零应用配置修改
- 自动处理DNS解析,避免企业大代理干扰
- 支持域名、网段混合匹配,灵活度拉满
方案二:SSH动态转发+系统代理例外(无需额外工具)
如果公司环境不允许装第三方工具,这个方案也能解决问题——用SSH动态转发创建SOCKS代理,再让系统只把隔离域的流量导向这个SOCKS代理,其他流量继续走企业大代理。
操作步骤:
- 启动SSH动态转发:
这条命令会在本地创建一个SOCKS 5代理,端口是1080。ssh -D 1080 secretServer1 - 配置系统代理例外:
- Linux:可以用
proxychains-ng,在/etc/proxychains.conf里添加localnet super*.secret.host,之后运行程序时用proxychains your-app;或者在GNOME/KDE的系统代理设置里,把SOCKS代理设为localhost:1080,并在“例外”列表添加*.secret.host。 - macOS/Windows:在系统代理设置中,将SOCKS代理地址设为
localhost:1080,然后在“不使用代理的地址”列表里添加*.secret.host。
- Linux:可以用
- 完成后,访问
super*.secret.host的流量会自动走SSH隧道,其他流量正常走企业代理,书签和开发配置直接用原域名即可。
方案三:autossh+本地Host映射(适合长期稳定隧道)
如果需要隧道长期保持在线,避免SSH断开后手动重启,可以用autossh配合本地Host映射来简化:
操作步骤:
- 安装
autossh(大部分系统包管理器都能找到) - 写一个批量启动隧道的脚本
start-tunnels.sh:#!/bin/bash # 用autossh自动重启隧道,-M 0表示不监听监控端口 autossh -M 0 -f -L 30001:super01.secret.host:3419 secretServer1 autossh -M 0 -f -L 30002:super01.secret.host:8080 secretServer1 autossh -M 0 -f -L 30011:super02.secret.host:8080 secretServer1 autossh -M 0 -f -L 30021:super03.secret.host:4000 secretServer2 - 给脚本加执行权限:
chmod +x start-tunnels.sh,运行一次就能让隧道后台保持,断开后自动重启。 - 编辑本地
/etc/hosts(Linux/macOS)或C:\Windows\System32\drivers\etc\hosts(Windows),添加:
这样书签可以直接用127.0.0.1 super01.secret.host 127.0.0.1 super02.secret.host 127.0.0.1 super03.secret.hostsuper01.secret.host:30001,不用记localhost的端口号,更直观。
内容的提问来源于stack exchange,提问作者Uko
相关产品推荐
相关产品推荐

