macos 自带 openssh 即可实现三类隧道:本地转发(-l)安全访问内网服务,动态 socks5 代理(-d)加密全局流量,远程转发(-r)临时暴露本机服务;需配 -n/-f 参数、避端口冲突、调防火墙及浏览器代理设置。

macOS 自带 OpenSSH,无需安装额外组件,就能实现安全、灵活的隧道配置。关键不是堆功能,而是按需选择转发类型、配好参数、避开常见拦截点。
本地端口转发:安全访问内网服务
适合从 Mac 访问公司数据库、内部 Web 后台、Redis 等仅限内网的服务。
- 命令格式:ssh -N -L [本地端口]:[目标地址]:[目标端口] [用户]@[跳板机]
- 示例:想连内网 MySQL(10.0.1.5:3306),用跳板机 user@jump.example.com:
ssh -N -L 3307:10.0.1.5:3306 user@jump.example.com - 加 -N 防止登录后自动退出;加 -f 可后台运行(需配合 -N)
- 连通后,本地用 localhost:3307 即可访问目标服务
动态 SOCKS5 代理:全局流量加密转发
让浏览器、curl、git 等工具走加密通道访问外网,尤其适合绕过网络限制或隐藏真实出口 IP。
- 启动命令:ssh -D 10808 -C -N -f user@vps.example.com
- 端口建议选高位(如 10808),避免被 macOS 防火墙默认拦截
- Safari 不支持 SOCKS5,Chrome 需手动设置代理(不读系统设置):
启动时加参数:--proxy-server="socks5://127.0.0.1:10808" --host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE 127.0.0.1" - 命令行工具推荐用 proxychains-ng(brew install proxychains-ng),改配置后直接跑:proxychains curl https://httpbin.org/ip
远程端口转发:让外网临时访问你的 Mac
适用于演示、调试或临时共享本机服务(如本地开发服务器、VNC 屏幕共享)。
- 前提:远程服务器需开启 GatewayPorts yes(在 /etc/ssh/sshd_config 中设置并重启 sshd)
- 命令:ssh -R 2222:localhost:3000 user@vps.example.com(把本地 3000 端口映射到 VPS 的 2222 端口)
- 他人访问 vps.example.com:2222 即可看到你本地的 3000 服务
- 注意:Mac 自带防火墙默认阻止外部连接,需在「系统设置 → 网络 → 防火墙 → 防火墙选项」中允许相关端口或关闭「阻止所有传入连接」
持久化与故障排查
隧道不是一次性的,要稳定就得解决断连、端口占用和权限问题。
- 检查端口是否被占:lsof -i :10808 或换其他端口
- 隧道中断常见原因:终端关闭(没加 -f)、SSH 连接超时、Mac 睡眠唤醒后连接丢失
- 长期运行建议结合 launchd 托管,或用 autossh(brew install autossh)自动重连
- 验证 DNS 是否远程解析:在远程服务器执行 dig google.com @8.8.8.8,对比本地结果;若需远程解析,Firefox 设 network.proxy.socks_remote_dns = true,Chrome 无原生支持











