温馨提示×

Ubuntu iptables如何设置转发

小樊
40
2026-08-22 10:51:34
栏目: 智能运维

在 Ubuntu 上设置 iptables 转发(NAT/端口转发),通常用于把一台机器的流量转发到另一台机器(如做网关、跳板、端口映射等)。下面按常见场景给你一个完整、可操作的说明。


一、开启 Linux 内核 IP 转发

iptables 转发依赖内核参数,必须先开启

临时开启(重启失效)

sudo sysctl -w net.ipv4.ip_forward=1

永久开启(推荐)

sudo nano /etc/sysctl.conf

添加或修改:

net.ipv4.ip_forward=1

生效:

sudo sysctl -p

验证:

cat /proc/sys/net/ipv4/ip_forward

输出应为 1


二、基本转发规则(NAT)

场景示例

  • 本机 IP:192.168.1.10
  • 目标机器:10.0.0.5
  • 目标端口:80

1️⃣ 设置 SNAT / MASQUERADE(出口伪装)

使用 MASQUERADE(推荐,动态 IP)

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

eth0出口网卡

或使用 SNAT(固定公网 IP)

sudo iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 公网IP

2️⃣ 设置端口转发(DNAT)

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

含义:

访问本机 8080 → 转发到 10.0.0.5:80


3️⃣ 允许转发流量(FORWARD 链)

sudo iptables -A FORWARD -p tcp -d 10.0.0.5 --dport 80 -j ACCEPT
sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

三、完整示例(本地 80 → 后端 8080)

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

sudo iptables -t nat -A POSTROUTING -j MASQUERADE

sudo iptables -A FORWARD -p tcp -d 192.168.1.20 --dport 8080 -j ACCEPT

四、查看 iptables 规则

sudo iptables -t nat -L -n -v
sudo iptables -L FORWARD -n -v

五、保存 iptables 规则(Ubuntu)

方法 1:iptables-persistent(推荐)

sudo apt update
sudo apt install iptables-persistent

保存规则:

sudo netfilter-persistent save

规则保存在:

/etc/iptables/rules.v4

六、常见注意点

✅ 确保:

  • 没有 DROPFORWARD
  • 没有被 ufw 干扰(Ubuntu 默认用 ufw)

临时关闭 ufw 测试

sudo ufw disable

七、只转发某源 IP(限制来源)

sudo iptables -t nat -A PREROUTING -s 1.2.3.4 -p tcp --dport 3306 \
-j DNAT --to-destination 10.0.0.5:3306

八、调试技巧

查看是否被转发:

sudo tcpdump -i eth0 port 80

查看连接状态:

ss -ant

如果你愿意,可以告诉我:

  • ✅ 是 端口转发 还是 整网段转发
  • ✅ 是 公网 → 内网 还是 内网 → 内网
  • ✅ Ubuntu 版本(20.04 / 22.04)

我可以给你 完全贴合你环境的 iptables 规则

0