Linux iptables端口转发从零到一:DNAT、SNAT、REDIRECT全解析

其他 作者:80KM编辑

一、什么是iptables端口转发

iptables是Linux内核的防火墙工具,通过NAT表实现端口转发。它可以将发送到某IP和端口的数据包,重定向到另一IP和端口,常用于隐藏真实服务器IP、实现内网穿透或搭建跳板机。

二、核心配置步骤

1. 开启IP转发

```bash

临时开启

echo 1 > /proc/sys/net/ipv4/ip_forward

永久开启(编辑/etc/sysctl.conf)

net.ipv4.ip_forward = 1

sysctl -p

```

2. 添加转发规则

场景一:转发到内网服务器

```bash

DNAT:将外部8080端口流量转发到内网192.168.1.100:80

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80

SNAT:让返回流量正确路由(可选但推荐)

iptables -t nat -A POSTROUTING -j MASQUERADE

```

场景二:本机端口重定向

```bash

访问80端口自动转到8080

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

```

3. 允许转发流量

```bash

iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT

```

4. 保存规则

```bash

CentOS

service iptables save

Ubuntu

iptables-save > /etc/iptables/rules.v4

```

三、常用管理命令

| 操作 | 命令 |

|------|------|

| 查看NAT规则 | `iptables -t nat -L -n -v` |

| 删除规则 | `iptables -t nat -D PREROUTING 1` |

| 清空所有规则 | `iptables -t nat -F` |

四、常见问题排查

| 问题 | 解决方法 |

|------|---------|

| 转发不生效 | 检查IP转发是否开启:`sysctl net.ipv4.ip_forward` |

| 返回包丢失 | 确认已添加MASQUERADE规则 |

| 目标服务器不通 | 检查防火墙是否允许端口 |

| SELinux阻止 | 临时测试:`setenforce 0` |

五、安全建议

- 只转发必要端口,避免默认端口(22、3389)

- 限制来源IP:`-s 10.0.0.0/24`

- 定期审计规则:`iptables -t nat -L -n -v`

一句话总结:开启IP转发 → 添加DNAT规则(指定目标IP和端口)→ 添加MASQUERADE → 保存规则,即可完成iptables端口转发配置。

另外,可以借助 80KM 端口流量转发程序,搭建流量中转节点,所有外网访问经过节点再回源,彻底隐藏真实 IP。支持 80、443 常用网页端口,兼容各大系统。