SOCKS5 动态代理 -D
动态转发在本机启动 SOCKS5 代理。客户端把“目标地址 + 端口”交给代理,NetShuttle 再通过远端 SSH 服务器建立对应 TCP 连接。
30 秒结论
Section titled “30 秒结论”浏览器 / curl → 本地 SOCKS5 → SSH 服务器 → 客户端指定的目标- 监听方:本机。
- 目标连接发起方:远端 SSH 服务器。
- 目标是否固定:不固定。
- 适合:多个内网域名、Web 管理、CLI 调试。
ssh -N -D 127.0.0.1:1080 user@ssh.example.com含义:
| 部分 | 含义 |
|---|---|
-D | 动态 SOCKS5 代理 |
127.0.0.1 | 本机监听地址 |
1080 | SOCKS5 端口 |
user@ssh.example.com | 代理出口服务器 |
当前实现范围
Section titled “当前实现范围”NetShuttle 当前支持:
- SOCKS5。
- 无认证握手。
CONNECT命令。- IPv4、域名和 IPv6 地址类型。
- 连接建立期间的数据积压和转发。
当前不包含:
- SOCKS5 用户名 / 密码认证。
- UDP ASSOCIATE。
BIND命令。- HTTP 代理协议。
案例一:浏览器访问多个内网域名
Section titled “案例一:浏览器访问多个内网域名”配置系统或浏览器代理:
代理类型:SOCKS5地址:127.0.0.1端口:1080之后浏览器可以访问:
http://grafana.internal:3000https://wiki.corp.examplehttp://service-a.internal:8080不需要为每个域名单独创建一个 -L 规则。
建议使用仅浏览器代理,不要把系统代理长期设为全局开启,避免所有流量都经过远端网络。
案例二:curl 通过 SOCKS5 访问
Section titled “案例二:curl 通过 SOCKS5 访问”本机解析目标域名:
curl --socks5 127.0.0.1:1080 http://service.internal:8080由远端 DNS 解析目标域名:
curl --socks5-hostname 127.0.0.1:1080 http://service.internal:8080区别很重要:
--socks5:本机先解析域名,再把 IP 交给代理。--socks5-hostname:把域名交给 SOCKS5 代理,由远端侧解析。
如果内网域名只存在于远端 DNS,应优先使用 --socks5-hostname。
案例三:CLI 工具访问多个服务
Section titled “案例三:CLI 工具访问多个服务”很多工具支持 HTTPS_PROXY,但 HTTP 代理变量不一定适配 SOCKS5。优先查看工具自己的 SOCKS5 参数,例如:
git -c http.proxy=socks5h://127.0.0.1:1080 clone https://git.internal/team/repo.gitsocks5h 表示由代理端解析域名。
NetShuttle 配置
Section titled “NetShuttle 配置”- 选择能够访问目标网络的 SSH 服务器。
- 新建隧道,添加动态转发规则。
- 本地地址填写
127.0.0.1。 - 本地端口填写
1080或未占用端口。 - 启用规则。
- 在浏览器、命令行或应用中选择 SOCKS5 代理。
- 绑定
127.0.0.1,不要将无认证 SOCKS5 暴露到局域网。 - 使用完成后关闭代理规则。
- 不要同时把浏览器全局流量发送到不可信服务器。
- 远端服务器应只访问预期网络,避免把代理变成开放出口。
- 对敏感服务继续使用应用层 TLS 和鉴权。
浏览器提示不支持代理
Section titled “浏览器提示不支持代理”确认选择的是 SOCKS5,不是 HTTP 或 HTTPS。
域名解析失败
Section titled “域名解析失败”尝试由远端解析:
curl --socks5-hostname 127.0.0.1:1080 http://service.internal代理端口连接失败
Section titled “代理端口连接失败”检查本机监听:
lsof -nP -iTCP:1080 -sTCP:LISTEN只有部分服务能打开
Section titled “只有部分服务能打开”可能是远端 DNS、目标防火墙或目标服务绑定地址问题。逐个使用 curl --socks5-hostname 验证。