OP | 服务器端口转发
🛠️

OP | 服务器端口转发

AI custom autofill
通过 sonat 实现端口转发,可以实现本地访问服务器被屏蔽的mysql、kafka 等依赖。
Tags
OP
网络
Published
April 21, 2025

一 背景

在本地服务调试时,有时会依赖服务器中的mysql、kafka 等。但是服务器中往往只会放开 8000-8999 网段,对 mysql 的 3306 和 kafka 的 9093 是不放行的。
这时我们需要可以本地能够成功访问 mysql 和 kafka 。

二 解决思路

2.1 端口转发

方案一 ncat

因为使用时 CentOS6 只有 ncat,所以先使用了 ncat 来进行转发
nohup ncat -l -p 8306 -c "ncat localhost 3306" &
ncat 默认是 单次连接模式(类似 netcat),处理完一个连接后就会退出。

方案二 socat

使用 socat 可以实现持续转发:
  • fork:让 socat 在每次连接后 fork 子进程,保持主进程持续监听。
  • reuseaddr:允许端口快速复用(避免 TIME_WAIT 状态)
# 安装 socat(如果尚未安装) wget http://www.dest-unreach.org/socat/download/socat-2.0.0-b9.tar.gz tar -xzf socat-2.0.0-b9.tar.gz cd socat-2.0.0-b9 ./configure make sudo make install # 持久化转发 MySQL 3306 → 8306 nohup socat TCP-LISTEN:8306,fork,reuseaddr TCP:localhost:3306 > /dev/null 2>&1 & # 持久化转发 Kafka 9093 → 8093 nohup socat TCP-LISTEN:8093,fork,reuseaddr TCP:localhost:9093 > /dev/null 2>&1 &
验证是否成功:
netstat -tulnp | grep -E '3306|9093' 期望输出: tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1234/mysqld tcp 0 0 0.0.0.0:9093 0.0.0.0:* LISTEN 5678/kafka
转发后,原来的端口(如 3306 或 9093)仍然可以正常访问
端口转发(如 8306 → 3306 或 8093 → 9093)只是 新增了一个访问入口,不会影响原有的服务监听。

2.2 ssh 通道