商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何用iptables实现端口转发

如何用iptables实现端口转发

  发布于2026-07-06 阅读(0)

扫一扫,手机访问

说到用 iptables 做端口转发,很多刚接触 Linux 网络管理的朋友可能会觉得有点绕。其实说白了,这就是把流向某个端口的流量,偷偷“转个弯”送到另一个端口或者另一台机器上。下面几个典型场景,基本覆盖了日常工作中最常用的配置方式。

如何用iptables实现端口转发

基本端口转发

先看一个最直接的例子:你想把本地主机的 8080 端口收到的请求,全部转发到另一台服务器的 80 端口。怎么做?一条规则就够了:

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination <目标服务器IP>:80

这条命令的意思是:在 NAT 表的 PREROUTING 链上,把目标端口是 8080 的 TCP 包,目标地址和端口换成那台服务器的 IP 和 80 端口。数据包到了之后,服务器就会认为它是发给自己的。

反向端口转发

但如果外部访问你本地主机的 8080 端口,你还希望流量真正能到达目标服务器,光有 DNAT 还不够——因为回复包可能走不通。这时候需要再加一条 SNAT(源地址转换),让目标服务器认为流量就是来自你本地主机:

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination <目标服务器IP>:80
sudo iptables -t nat -A POSTROUTING -p tcp -d <目标服务器IP> --dport 80 -j MASQUERADE

第二条命令中的 MASQUERADE 会自动替换源地址为你本地主机的出口 IP,这样目标服务器回复时就能正确回到你这里,再原路返回给客户端。

本地端口转发

有时候你并不想在本地主机上直接改 iptables 规则,而是想通过 SSH 隧道做一个临时转发。比如把远程某台服务器的 80 端口映射到本地的 8080 端口:

ssh -L 8080:<目标服务器IP>:80 <用户名>@<远程服务器IP>

这种方式的好处是不需要 root 权限,适合快速调试或者临时访问内网服务。缺点嘛,SSH 会话一旦断开,隧道也就没了。

通用端口转发

如果你需要把本地任意端口转发到另一台服务器的任意端口,其实把上面的例子泛化一下就行了:

sudo iptables -t nat -A PREROUTING -p tcp --dport <本地端口> -j DNAT --to-destination <目标服务器IP>:<目标端口>
sudo iptables -t nat -A POSTROUTING -p tcp -d <目标服务器IP> --dport <目标端口> -j MASQUERADE

本地端口目标服务器IP目标端口 换成你实际的值就 OK 了。这个模板在负载均衡或者服务迁移场景里特别实用。

删除端口转发规则

规则加错了或者不用了,怎么删?把 -A 改成 -D,其他参数原样复制即可:

sudo iptables -t nat -D PREROUTING -p tcp --dport 8080 -j DNAT --to-destination <目标服务器IP>:80
sudo iptables -t nat -D POSTROUTING -p tcp -d <目标服务器IP> --dport 80 -j MASQUERADE

注意:删除时参数必须和添加时完全一致,包括 --dport 的顺序,否则会提示找不到规则。

注意事项

  1. 权限:修改 iptables 规则需要 root 权限,别忘了加 sudo,否则会报错“Permission denied”。
  2. 持久化:iptables 规则默认只在内存中生效,重启后就会消失。想让它重启后还在,可以用 iptables-persistent 工具保存规则。Debian/Ubuntu 上装一下这个包,然后 netfilter-persistent sa ve 就行了。
  3. 防火墙:如果你的系统本身有防火墙(比如 ufw、firewalld),记得确认对应端口没有被拦截。另外,目标服务器上的防火墙也要放行转发的端口。
  4. 网络配置:目标服务器必须能够正常接收并处理转发过来的流量,包括路由可达、服务监听等。如果目标服务器和本地主机不在同一个网段,可能还需要检查路由表或开启 IP 转发(net.ipv4.ip_forward=1)。

掌握了上面这几组规则,日常工作中绝大部分端口转发需求都能搞定。总之一句话:先想清楚流量要“从哪进、往哪转、从哪出”,然后对应选择 DNAT、MASQUERADE 或者 SSH 隧道,思路就清晰了。

本文转载于:https://www.yisu.com/ask/58534612.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注