温馨提示×

ubuntu iptables怎样转发

小樊
64
2026-09-01 00:05:06
栏目: 智能运维

在 Ubuntu 下使用 iptables 做端口/流量转发,常见场景有:

  1. 本机端口转发(例如 8080 → 127.0.0.1:80)
  2. 公网 IP 转发到内网机器(NAT 转发)
  3. 透明代理 / 流量重定向

下面按常见用法说明。


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

如果是跨网卡/跨机器转发,必须先开启:

# 临时开启
sudo sysctl -w net.ipv4.ip_forward=1

# 永久开启
sudo vim /etc/sysctl.conf

添加或修改:

net.ipv4.ip_forward=1

生效:

sudo sysctl -p

二、本机端口转发(REDIRECT)

例:访问 8080 转到本机 80

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

✅ 适合:

  • 本机服务
  • Docker、代理、开发调试

⚠️ 只对本机外部访问有效,本机 localhost 访问 8080 不会转发(除非加 OUTPUT 规则)。

本机自己也生效(可选)

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

三、转发到另一个 IP(DNAT)

例:公网 1.2.3.4: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

或指定出口网卡:

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

四、指定来源 IP 才转发

sudo iptables -t nat -A PREROUTING -s 10.0.0.0/24 \
  -p tcp --dport 3306 \
  -j DNAT --to-destination 192.168.1.20:3306

五、保存 iptables 规则(Ubuntu)

Ubuntu 默认 不会自动保存 iptables。

方法 1:iptables-persistent(推荐)

sudo apt install iptables-persistent
sudo netfilter-persistent save

规则保存在:

/etc/iptables/rules.v4

六、查看 / 删除规则

查看:

sudo iptables -t nat -L -n -v

删除(按编号):

sudo iptables -t nat -L --line-numbers
sudo iptables -t nat -D PREROUTING 1

清空(谨慎):

sudo iptables -t nat -F

七、常见坑

❌ 只加 DNAT 没加 MASQUERADE → 内网机器回包不正常
❌ 没开 ip_forward → 转发不生效
❌ ufw 和 iptables 混用 → 规则被覆盖


八、简单示例合集

# 开启转发
sysctl -w net.ipv4.ip_forward=1

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

# 公网 80 -> 内网
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.10:80
iptables -t nat -A POSTROUTING -j MASQUERADE

如果你能告诉我:

  • 是 本机转发 还是 服务器 NAT
  • Ubuntu 版本
  • 是否用 Docker / ufw

我可以给你精确可用的规则。

0 踩