socat
socat TCP-LISTEN:8888,fork,reuseaddr,bind=0.0.0.0 TCP:127.0.0.1:5495
socat TCP-LISTEN:8888,fork,reuseaddr,bind=0.0.0.0 TCP:127.0.0.1:5495
# \_________ 第一个地址 _____________/ \____ 第二个地址 ___/
第一个地址(入口)- 对外监听
参数 作用
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TCP-LISTEN:8888 在 8888 端口监听 TCP 连接
bind=0.0.0.0 绑定到所有网卡(包括 Tailscale 虚拟网卡 tailscale0)
fork 每个客户端连接都 fork 新进程,支持并发访问
reuseaddr 端口可立即重用(进程重启不用等 TIME_WAIT)
第二个地址(出口)- 转发目标
参数 作用
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TCP:127.0.0.1:5495 作为客户端连接到本地 5495 端口
数据流向
外部机器 (Tailscale 网络)
|
v
100.68.116.54:8888 <-- socat 监听(所有网卡可达)
|
| socat 收到连接后,主动连接:
v
127.0.0.1:5495 <-- 原服务(仅本地可达)
^
|
Kimi Code 服务
socat 在中间做双向管道:左边 socket 有数据 -> 写到右边;右边有数据 -> 写到左边。
为什么能解决你的问题
限制 原因
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
原服务只绑 127.0.0.1:5495 出于安全或默认配置,拒绝非本地连接
Tailscale 虚拟网卡是 100.68.116.54 属于"外部"网络,无法访问回环地址
socat 监听 0.0.0.0:8888 接受所有网卡的连接,包括 Tailscale
简单说:socat 作为中间人,让外部流量"借壳"访问本只能本地访问的服务。
对比 SSH 反向隧道
方式 适用场景
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
socat 同一台机器,把本地服务暴露给其他网卡
ssh -R 把本地服务暴露到远程公网服务器
对比 ssh 反向代理
外部用户 公网服务器 你的本地机器
| | |
| 1. 访问 | |
|---------------------> | |
| http://公网IP:8888 | |
| | 2. SSH 服务器收到连接 |
| | 通过加密隧道转发 |
| |------------------------> |
| | | 3. SSH 客户端
| | | 转发到本地服务
| | |------------------->
| | | 127.0.0.1:5495
关键机制
组件 行为
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ssh -R 客户端 连接服务器时"预约"一个反向通道,让服务器代理端口
SSH 服务器 在 0.0.0.0:8888 监听,把数据包塞进已建立的 SSH 连接
SSH 加密隧道 所有流量走 SSH 端口(默认 22),穿透防火墙
SSH 客户端 解密后作为本地客户端,连接 127.0.0.1:5495
与 socat 的核心区别
对比项 socat SSH 反向隧道
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
流量路径 本机网卡间转发 跨越网络的加密隧道
暴露范围 依赖本机网卡 依赖公网服务器的网络
安全性 明文传输 SSH 加密
防火墙 需开放本地端口 只需 SSH outbound
使用场景 同一台机器多网卡 内网服务穿透到公网
为什么需要 0.0.0.0: 前缀
默认 -R 8888:... 会让 SSH 服务器只绑 127.0.0.1:8888(服务器本地),外部仍无法访问。
加 0.0.0.0: 前缀要求服务器绑定到所有接口,同时需要服务器配置:
# /etc/ssh/sshd_config
GatewayPorts yes
完整数据包流程
[浏览器] --HTTP--> [公网服务器:8888] --SSH协议封装--> [SSH隧道]
|
[本地服务:5495] <--HTTP-- [SSH客户端] <--解封装-- [SSH服务器]
一句话总结:SSH 客户端"骗"服务器帮它收流量,再通过加密隧道"快递"回本地。
本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。