温馨提示×

ubuntu iptables怎么设置转发

小樊
44
2026-08-06 22:11:29
栏目: 智能运维

在 Ubuntu 上用 iptables 设置转发(NAT/端口转发) 通常分为几种常见场景。下面按最常用 → 进阶给你说明,并附完整示例。


一、开启 Linux 内核 IP 转发(必须)

1️⃣ 临时开启(重启失效)

sudo sysctl -w net.ipv4.ip_forward=1

2️⃣ 永久开启(推荐)

sudo nano /etc/sysctl.conf

取消注释或添加:

net.ipv4.ip_forward=1

生效:

sudo sysctl -p

二、本地端口转发(本机端口 → 本机端口)

示例:访问本机 8080 → 转发到本机 80

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

✅ 适用于:

  • 本机服务端口映射
  • 非 root 用户无法监听 80 时

三、端口转发(一台机器 → 另一台机器)

示例:访问本机 80 → 转发到 192.168.1.10:80

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

sudo iptables -t nat -A POSTROUTING -j MASQUERADE

✅ 常用于:

  • 网关
  • 负载均衡
  • 内网穿透

四、SNAT / MASQUERADE(内网上网)

场景:Ubuntu 作为网关,内网通过它上网

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

或指定源网段:

sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

五、允许转发流量(FORWARD 链)

默认 iptables 可能 DROP 转发包,需要允许:

sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

六、保存 iptables 规则(防止重启丢失)

Ubuntu 常见方式(使用 iptables-persistent)

sudo apt update
sudo apt install iptables-persistent

保存规则:

sudo netfilter-persistent save

规则保存在:

/etc/iptables/rules.v4

七、查看当前 NAT 规则

sudo iptables -t nat -L -n -v

八、删除规则示例

删除 PREROUTING 规则

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

九、常见错误排查

1️⃣ 转发不生效

✅ 检查:

cat /proc/sys/net/ipv4/ip_forward

2️⃣ 端口无法访问

✅ 检查:

  • 防火墙是否拦截
  • FORWARD 链是否允许
  • 目标服务是否监听

十、快速示例总结

场景 命令
本机端口转发 REDIRECT
跨机器端口转发 DNAT + MASQUERADE
内网 NAT 上网 POSTROUTING MASQUERADE
永久生效 iptables-persistent

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

  • Ubuntu 版本
  • 要转发的端口
  • 是本地转发还是跨机器
  • 是否作为网关

我可以给你 一条可直接复制执行的完整命令

0