linux中iptables实现1:1全端口映射需启用ip_forward,执行dnat将公网ip所有流量转发至内网服务器,并配snat(双网卡)或调优rp_filter(单网卡),最后持久化规则。

要在Linux上用iptables -t nat实现1:1全端口映射(即“公网IP镜像”),本质是将一个公网IP的所有入向流量完整转发到一台内网服务器,端口、协议、连接状态全部保持一致。这不同于单端口DNAT,而是整IP级的透明映射,常用于IDC托管、云主机迁移或合规性要求高的场景。
前提条件:必须启用IP转发
系统默认关闭IPv4转发,需手动开启并持久化:
- 临时生效:echo 1 > /proc/sys/net/ipv4/ip_forward
- 永久生效:编辑/etc/sysctl.conf,确保含net.ipv4.ip_forward = 1,然后运行sysctl -p
- 验证是否成功:sysctl net.ipv4.ip_forward应返回1
核心命令:一条DNAT + 一条SNAT(双网卡典型场景)
假设你的Linux网关有两块网卡:
- eth0接公网,IP为203.0.113.10(你拥有的公网IP)
- eth1接内网,IP为192.168.10.1
- 目标内网服务器IP为192.168.10.100,需完全“镜像”203.0.113.10
执行以下两条规则:
- iptables -t nat -A PREROUTING -d 203.0.113.10 -j DNAT --to-destination 192.168.10.100
- iptables -t nat -A POSTROUTING -s 192.168.10.100 -j SNAT --to-source 192.168.10.1
说明:第一条让所有发往203.0.113.10的包目标IP变成192.168.10.100;第二条确保该服务器回包时源IP被替换为网关内网IP,避免路由环路或响应失败。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
单网卡(公网IP直接配在本机)的简化写法
若Linux主机本身拥有公网IP(如云服务器),且内网服务器通过二层可达(例如同VLAN或直连交换机),可省略SNAT,改用MASQUERADE或更稳妥的RETURN策略:
- iptables -t nat -A PREROUTING -d 203.0.113.10 -j DNAT --to-destination 192.168.10.100
- 同时确保内网服务器的默认网关指向本机(192.168.10.1),否则回包无法正确返回
- 此时无需SNAT,但务必确认内网服务器已禁用反向路径过滤:echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter 和 echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
验证与持久化
检查规则是否生效:
- iptables -t nat -vnL PREROUTING(看DNAT行是否命中计数)
- iptables -t nat -vnL POSTROUTING(看SNAT/MASQUERADE是否计数增长)
- 从外网用telnet 203.0.113.10 22或curl http://203.0.113.10测试连通性
保存规则防止重启丢失:
- Ubuntu/Debian:iptables-save > /etc/iptables/rules.v4
- CentOS/RHEL 7+:iptables-save > /etc/sysconfig/iptables,并启用iptables服务
不复杂但容易忽略










