资深开发工程师教你:五分钟搞定Linux端口转发,内网穿透实战指南
在日常的开发以及运维期间,我们常常会碰到这般的场景,本地服务开发完毕之后,需要给客户或者同事进行临时的演示,不过服务运行在内网之中,外网是无法对其造访的;要么云服务器仅仅开放了特定 的端口,需要把流量转送到内网里其他机器的数据库抑或是Web服务之上。
手动去配置iptables规则,是繁琐的,并且容易出现错误,今天要分享一个基于socat的极简方案,全程是没有多余废话的,上手就可以使用。
sudo apt-get install redir -y
一、工具介绍:为什么是socat?
socat被称作网络工具箱里的“瑞士军刀”,它具备在两个数据流之间构建双向通道的能力。
相比于复杂的iptables ,或是需要安装重量级代理的情况, ,socat 的安装包较小,配置较为简单, 特别适合于快速搭建临时的端口转发,或是轻量级生产转接服务。
TCP协议它支持,UDP协议它也支持,UNIX Socket协议它同样支持,它属于资深工程师手边常常预备的工具。
二、适用场景
1. 临时外网演示强>:把内网开发服务器的8080端口,借由公网跳板机的6666端口予以暴露出来。
2. 数据库安全访问方面哈,不允许数据库直接开启公网端口,要借助跳板机来进行相关操作,将3306端口转发到内网数据库那儿去。
3. 针对遗留系统改造,老旧服务存在不支持修改监听端口的情况,通过转发来达成平滑迁移。

4. 微服务于本地进行调试:把云端测试环境所具有的流动量,临时朝着本地代码予以转发。
三、极简配置步骤(干货实操)
第一步:安装socat工具
于那需要担当转发器角色的服务器之上(一般而言是公网的跳板机),将下述命令予以执行:
sudo apt-get update && sudo apt-get install -y socat
sudo redir :6666 目标地址:8888
经过执行之后,要是出现了安装成功的提示,并且没有报错的信息,那么也就是已经达成了转发服务的安装。
第二步:启动转发端口服务
假使需求呈现为这般情况:把本机之中的那个端口号为6666的端口,朝着目标服务器所对应的那台有着IP地址为192.168.1.100上面的端口号为8888的端口进行转发。
直接执行:
socat TCP-LISTEN:6666,fork,reuseaddr TCP:192.168.1.100:8888
命令被执行之后,显示出没有任何一次输出的状况,这意味着按照要求执行成功了,此时它已经转变为进入后台进行运行的状态。
在这个时候,去访问那个由 公网IP 加上冒号再加上数字 6666 所构成的内容,这就等同于去访问那个由 192.168.1.100 加上冒号再加上数字 8888 所构成的内容。
技能突出显示:“fork”参数能够对多个并发连接予以处理,“reuseaddr”准许端口即刻进行重用,避免服务重新启动之际出现“Address already in use”的提示。
四、高效技巧:如何修改转发目标
在线上这种环境下,随时都有着会发生变化的可能性,举例来讲,像是存在一种需求,那就是要把流量从处于 192.168.1.100 这个状态的地方,转换到定位为 192.168.1.200 的地方。
此时无需停止所有服务,只需以下三步:

1. 查看当前监听端口的进程ID
之所以是因为,socat 默认之时运行于前台,要是运用&或者nohup那就会处于后台这个情况,另外呢,咱们需要寻觅到它那个PID来去停止。
执行:
ps aux | grep socat
你会看到类似输出,其中 1907 即为进程ID:
sudo netstat -anp |grep 6666
root 1907 0.0 0.1 6768 1024 pts/0 S+ 11:20 0:00 socat TCP-LISTEN:6666,fork,reuseaddr TCP:192.168.1.100:8888
2. 停止当前转发服务
在这里呢,1907 是作为示例ID存在的哟,请你一定要把它替换成为,你实际所看到的那个ID之后,再去执行:
kill -9 1907
3. 启动新的转发服务
修改目标地址后,重新运行启动命令:
socat TCP-LISTEN:6666,fork,reuseaddr TCP:192.168.1.200:8888
执行后无输出,则修改成功。
整个过程秒级完成,连接几乎无感知。
sudo kill 1907
五、避坑指南(老司机经验)
1. 云服务器重启相关问题:当它重启时:,之前运行着的socat进程会不见,转发服务也得要再次启动。
将启动命令写入 /etc/rc.local 进行建议,或者配置为 systemd 服务,以此来实现开机自启。
2. 进行端口冲突检查,在启动之前,要保证监听端口并没有被占用,能够运用netstat -tlnp | grep 6666来开展检查。
首先,关于防火墙规则,要保证云服务商那里的安全组,做到已放行你所监听的端口,也就是上文提及的6666端口,同时,也要保证服务器内部的防火墙,比如ufw,也已然放行该端口。
4. 连接时长稳定特性:socat自身具备相当高的稳定性,然而要是在进行转发操作时,长时间处于没有数据往来的连接状态,那么某些处于中间位置的设备就有可能将连接予以切断。
可以在命令之后附加上参数,,tcp - keepalive = 1,用以维持心跳。
六、总结
有着轻量特点的、具备高效性质的转发神器是 socat,上述步骤已经涵盖了从进行安装开始起,到启动操作,再到实施修改,直至开展维护的整个流程。
sudo redir :6666 目标地址:8888
搞定它,你能够于1分钟之内处理绝大多数端口映射需求,不管是临时演示情形,还是生产应急境况,都可以显著提高工作效率。
牢记核心命令,以及进程管理技巧,下次碰到内网穿透问题时,直接进行复制粘贴操作,便可立竿见影。

Comments NOTHING