socat端口转发实现穿透nat

家里的宽带一直分配内网地址,各种ddns长期处于失效状态,苦不堪言。

前一阵QNAP和花生壳合作,免费在NAS上提供了花生棒的服务(花生壳内网版),尝试了一把,真心好使!只可惜,免费用户只能做两条映射,共计1GB流量,而且线路只能选择电信。

最近在搞ESXi的实验,远程用vSphere Client连ESXi两个端口当然不够用,于是打算自己研究一下nat-ddns的实现。

搜了一下原理,其实特别简单。有一台服务器做中转,打通一条路径进行流量转发。我原以为服务器就解析一下地址然后P2P传输,看来不是。因为所有流量都被中转,所以才有了1GB的限制。

于是,核心就是必须有一台公网上的服务器,来做流量中转。这对于有VPS的同学们来说就是现成的资源。端口转发的工具一搜一大把,socat, netcat, rinetd等等…

其实哪一个都能实现功能,不过我这边路由器刷的Tomato系统刚好原生支持socat,因此就用这个命令了,支持ip、tcp、udp、ipv6、ssl….

 

#VPS端
#开启debug级别输出,不写日志直接打在stdout方便看
#vps设置30303端口监听,有请求则转发给30304端口
socat -d -d -d tcp-l:30303,reuseaddr,bind=0.0.0.0,fork tcp-l:30304,bind=0.0.0.0,reuseaddr,retry=10

 

#Router端
#开启debug级别输出
#路由器设置27777端口监听,有请求则转发给内网vm-win7主机的RDP端口
socat -d -d -d -v tcp:vpsname:30304,forever,intervall=5,fork tcp:vm-win7:3389

测试成功,由于vps在美国,远程桌面转发速度没有特别理想,但是基本可用。对于http和ssh这种开销小的,应该是没有问题了。

稍后会放RDP, SSH, HTTP的测试结果。

vSphere Client需要连接ESXi的443端口,测试这个没有成功。之前做过netstat检查,连接服务器只需要443,不知道是不是用到了ssl加密,所以还需要在socat上配置ssl。我觉得不应该,我只让它转发流量了,它就不应该管流量里面是什么。今晚再稍微做些测试,也许还有没发现的端口需要一起开启。



	

发表评论

电子邮件地址不会被公开。

为防止垃圾评论影响阅读效果,请您耐心回答以下问题,谢谢合作 *