利用socat实现公网访问内网设备上的服务(无需端口映射)

CentOS发行版自带了小程序socat,可以按照设定策略,进行各种端口转发。

官网:
http://www.dest-unreach.org/socat/

1.实战

以穿网拉取内网设备RTSP流为例

#公网设备(假设IP是100.100.100.100)
socat -d tcp-listen:9997,reuseaddr,bind=0.0.0.0,fork tcp4-listen:9996,bind=0.0.0.0,reuseaddr,retry=100
#内网设备(假设IP是192.168.1.100)
socat -d tcp:100.100.100.100:9996,forever,intervall=0.1,fork tcp:localhost:554

此时使用RTSP客户端拉取 rtsp://100.100.100:9997/realmonitor ,可以获取内网设备的码流。
支持多路连接,因此用来转接WEB服务(包括websocket)也是可以的(已验证)。

2.原理解析

1) 公网设备侧的socat的意思是,监听TCP 9997端口,当有用户连接时,监听TCP 9996端口,并负责两边的数据周转。
2) 内网设备侧的socat的意思是,每隔0.1秒(100毫秒)尝试连接公网设备的TCP 9996端口。当连接成功时,主动连接本地554端口(RTSP服务端口),并负责两边数据周转。
3) 对比直接拉取终端流,延时没有明显增大。从客户端的抓包数据来看TCP瞬间建立,第一个信令请求的反馈在80毫秒后到达(符合100毫秒尝试连接一次的机制表现)。

3.参考资料

https://www.cnblogs.com/iamlehaha/p/6540695.html

https://blog.csdn.net/flaming999/article/details/52289775

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值