Linux端口转发设置:从入门到实战

时间:2026-05-09 13:28

端口转发是Linux运维中最实用的技巧之一,能将访问某端口的流量导向另一台服务器的指定端口。本文介绍几种主流设置方法,覆盖不同场景需求。

一、准备工作:开启IP转发

所有端口转发的前提是开启Linux内核的IP转发功能:

bash
# 临时开启(重启失效)
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永久开启
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

二、方法一:iptables(最推荐,性能最高)

iptables工作在内核层,是最稳定高效的方案,适合生产环境。

本机端口转发

将访问8080端口的流量转到本机的80端口:

bash
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

跨服务器转发(DNAT)

将公网IP的80端口请求,转发到内网Web服务器(192.168.1.100:80):

bash
# 修改目标地址
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80

# 修改源地址,确保返回包能正确路由
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.100 --dport 80 -j MASQUERADE

查看已设置的规则

bash
iptables -t nat -L -n -v --line-numbers

删除规则(假设规则编号为1)

bash
iptables -t nat -D PREROUTING 1

保存规则(重启不丢失)

bash
# Ubuntu/Debian
apt-get install iptables-persistent
iptables-save > /etc/iptables/rules.v4

# CentOS/RHEL 7+
service iptables save

三、方法二:socat(简单灵活,适合测试)

socat是一个多功能的网络工具,配置非常简单。

安装

bash
# Ubuntu/Debian
apt-get install socat

# CentOS/RHEL
yum install epel-release && yum install socat

基本用法

将本地8080端口转发到192.168.1.100:80:

bash
# 单连接
socat TCP4-LISTEN:8080 TCP4:192.168.1.100:80

# 多连接(支持多个客户端,推荐)
socat TCP4-LISTEN:8080,fork,reuseaddr TCP4:192.168.1.100:80

后台运行

bash
nohup socat TCP4-LISTEN:8080,fork,reuseaddr TCP4:192.168.1.100:80 &

四、方法三:SSH隧道(加密安全,适合临时使用)

利用SSH协议建立加密通道,适合远程调试或需要安全传输的场景。

本地端口转发

访问本地的8080端口,实际访问远程服务器192.168.1.100的80端口:

bash
ssh -L 8080:192.168.1.100:80 user@跳板机IP -N

远程端口转发

将远程服务器的端口映射到本地:

bash
ssh -R 8080:localhost:80 user@公网服务器IP -N

动态端口转发(SOCKS5代理)

在本地1080端口开启SOCKS5代理:

bash
ssh -D 1080 user@远程服务器IP -N

五、方法四:rinetd(轻量级专用工具)

专门用于端口转发的工具,配置文件一目了然。

安装

bash
# Ubuntu/Debian
apt-get install rinetd

# 手动编译
wget http://www.boutell.com/rinetd/rinetd.tar.gz
tar zxvf rinetd.tar.gz && cd rinetd
make && make install

配置

编辑 /etc/rinetd.conf

text
# 格式:本机IP 本机端口 目标IP 目标端口
0.0.0.0 8080 192.168.1.100 80
192.168.1.10 3306 192.168.1.100 3306

启动

bash
rinetd -c /etc/rinetd.conf

六、方法五:systemd-socket-proxyd(系统原生)

systemd自带的代理工具,适合作为系统服务运行。

bash
# 安装(systemd自带)
# 创建转发服务
systemd-socket-proxyd 192.168.1.100:80

配置systemd服务文件 /etc/systemd/system/port-forward.service

ini
[Unit]
Description=Port Forwarding

[Service]
ExecStart=/usr/lib/systemd/systemd-socket-proxyd 192.168.1.100:80

七、工具推荐:80km无痕网关(图形化管理)

如果你需要Web界面管理端口转发,或者需要多节点调度功能:

👉 https://www.80km.com/dkzf/

特点:

  • 图形化配置,无需记忆命令行

  • 支持多台后端服务器的流量分发和故障转移

  • 隐藏后端真实IP,提升安全性

  • 几分钟即可完成设置

八、方法对比与选择建议

 
 
方法 性能 配置难度 适用场景
iptables 最高 中等 生产环境、高性能需求
socat 简单 临时转发、协议转换
SSH隧道 中等 简单 加密传输、远程调试
rinetd 最简单 快速部署、简单需求
systemd-socket-proxyd 中等 系统原生、开机自启

九、常见问题排查

1. 转发不生效

bash
# 检查IP转发是否开启
cat /proc/sys/net/ipv4/ip_forward

# 检查防火墙是否放行
iptables -L -n -v

2. 查看连接状态

bash
# 查看监听端口
netstat -tlnp | grep 8080

# 查看连接跟踪
conntrack -L

总结

Linux端口转发设置并不复杂,核心就三步:

  1. 开启IP转发echo 1 > /proc/sys/net/ipv4/ip_forward

  2. 选择合适工具(生产用iptables,临时用socat,加密用SSH)

  3. 配置转发规则(记住DNAT改目的、SNAT改源)

根据实际需求选择最适合的方法,就能轻松实现灵活的流量调度。

 
 
 
 
 
 
 
 
 
 

Java做端口转发性能怎么样?原生Socket vs Netty对比分析
服务器设置转发:实现高效数据传输的实用指南
解析流媒体转发服务器:支撑影音流畅传输的核心力量
Windows 截图怎么转发?超全实用转发方法汇总
查找网站隐藏ip,如何快速查找网站隐藏ip
查找网站隐藏ip,怎么快速查找网站隐藏ip
Linux开启转发:让数据包在不同网卡间流动
Linux开启路由转发功能,Linux如何开启路由器转发
Linux端口转发设置:从入门到实战
Linux HTTP端口转发:让Web请求灵活“跳转”