在Linux系统中,端口转发可以将发送到某个端口的网络请求转发到另一个端口甚至另一台主机,常用于服务暴露、网络穿透、负载均衡等场景。不同的实现方式各有特点,用户可以根据实际需求选择合适的方法。

一、使用iptables设置端口转发
iptables是Linux系统自带的防火墙工具,同时也支持端口转发功能,适合需要持久化规则、系统级转发的场景。使用前需要确保系统开启了IP转发功能。
1. 开启IP转发
临时开启IP转发可以执行以下命令:
# 临时开启IP转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 验证是否开启,输出1表示已开启 cat /proc/sys/net/ipv4/ip_forward
如果需要永久开启,需要修改/etc/sysctl.conf文件,添加或修改以下配置:
net.ipv4.ip_forward = 1
修改后执行sysctl -p让配置生效。
2. 配置端口转发规则
假设需要将本机的8080端口转发到本机的80端口,执行以下iptables规则:
# 添加PREROUTING规则,处理外部发送到8080端口的请求 iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80 # 如果需要转发到另一台主机,比如转发到192.168.0.2的80端口 iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.0.2:80 # 添加POSTROUTING规则,处理转发出去的请求 iptables -t nat -A POSTROUTING -j MASQUERADE
3. 保存iptables规则
iptables规则默认重启后会丢失,需要手动保存:
# 保存规则,不同系统保存命令可能不同,以下为常见方式 iptables-save > /etc/iptables.rules # 开机自动加载规则,可在/etc/rc.local中添加 iptables-restore < /etc/iptables.rules
二、使用socat设置端口转发
socat是一款功能强大的网络工具,支持多种协议的端口转发,配置简单,适合临时转发或者轻量级场景,不需要复杂的规则配置。
1. 安装socat
不同Linux发行版的安装命令如下:
# Ubuntu/Debian系统 apt install socat -y # CentOS/RHEL系统 yum install socat -y
2. 配置端口转发
将本机8080端口转发到本机80端口的命令如下:
# 前台运行转发,转发TCP请求 socat TCP-LISTEN:8080,fork,reuseaddr TCP:127.0.0.1:80
如果需要转发到远程主机,比如将本机8080端口转发到192.168.0.2的80端口:
socat TCP-LISTEN:8080,fork,reuseaddr TCP:192.168.0.2:80
如果需要后台运行,可以加上&符号,或者使用nohup命令:
nohup socat TCP-LISTEN:8080,fork,reuseaddr TCP:127.0.0.1:80 > /var/log/socat.log 2>&1 &
三、使用SSH隧道设置端口转发
SSH隧道适合跨网络的端口转发场景,不需要在目标机器上安装额外工具,只要支持SSH连接即可,安全性较高。
1. 本地端口转发
将远程主机的端口转发到本地,比如将远程主机192.168.0.2的80端口转发到本地的8080端口:
# -L 表示本地转发,格式为本地端口:远程主机:远程端口 远程SSH用户@远程SSH主机 ssh -L 8080:127.0.0.1:80 user@192.168.0.2 -N
参数说明:-N表示不执行远程命令,只做转发;-f可以后台运行SSH连接。
2. 远程端口转发
将本地端口转发到远程主机,比如将本地的80端口转发到远程主机192.168.0.2的8080端口,让远程主机可以访问本地服务:
# -R 表示远程转发,格式为远程端口:本地主机:本地端口 远程SSH用户@远程SSH主机 ssh -R 8080:127.0.0.1:80 user@192.168.0.2 -N
四、端口转发验证与问题排查
配置完成后可以使用netstat或者ss命令验证端口监听状态:
# 查看8080端口是否被监听 ss -tuln | grep 8080 # 或者 netstat -tuln | grep 8080
也可以使用telnet或者curl命令测试转发是否生效:
# 测试本地8080端口是否可以访问 curl http://127.0.0.1:8080 # 如果是转发到远程,测试远程端口 curl http://192.168.0.2:8080
如果转发不生效,首先检查IP转发是否开启,然后检查防火墙是否拦截了对应端口,最后检查转发规则是否配置正确。使用iptables的话可以通过iptables -t nat -L -n -v查看规则是否生效,socat和SSH隧道可以查看进程是否在运行。
五、不同方式对比
以下是三种端口转发方式的对比,方便用户选择:
| 实现方式 | 适用场景 | 持久化 | 复杂度 |
|---|---|---|---|
| iptables | 系统级、持久化转发、高并发场景 | 需要手动保存规则 | 较高 |
| socat | 临时转发、轻量级场景、简单配置 | 需要后台运行进程 | 低 |
| SSH隧道 | 跨网络转发、安全场景、无需额外安装工具 | 需要保持SSH连接 | 中等 |
Linux端口转发iptablessocatssh_tunnel修改时间:2026-07-16 19:51:35