Linux 地址转发完全指南:从内核参数到 NAT 实战

首页 2026-05-11 13:51:06

一、核心概念

IP 转发 = 允许数据包从一个网卡进入,从另一个网卡出去(让 Linux 当路由器用)

bash
# 开启转发的关键命令
sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

二、两种核心转发方式

 
 
类型 作用 场景 iptables 语法
SNAT 修改源IP 内网上网 -t nat -A POSTROUTING -j SNAT --to-source IP
DNAT 修改目标IP 端口映射 -t nat -A PREROUTING -j DNAT --to-destination IP

三、常用命令速查

bash
# 内网上网(共享公网IP)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

# 端口转发(公网8080 → 内网192.168.1.100:80)
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
iptables -t nat -A POSTROUTING -d 192.168.1.100 -p tcp --dport 80 -j MASQUERADE
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT

# 查看规则
iptables -t nat -L -n -v --line-numbers

# 删除规则(按行号)
iptables -t nat -D PREROUTING 1

四、专用转发工具:80km无痕网关

除了 iptables,80km无痕网关(曾用名:80KM端口流量转发程序) 是一款更现代化的转发工具,具备配置热加载、实时监控、更高并发等优势。

快速上手

json
// forwarder.json 配置
{
    "listen": "0.0.0.0:8080",
    "routers": [
        {"from": "0.0.0.0/0", "to": "192.168.1.100:80"},
        {"from": "10.0.0.0/8", "to": "192.168.1.101:22"}
    ]
}
bash
# 启动转发服务
80km-forwarder -config forwarder.json

相比 iptables,它无需记忆复杂的 NAT 表结构,配置文件直观,适合频繁调整转发规则的场景。


五、避坑指南

 
 
问题 原因 解决
转发不生效 IP转发未开 sysctl net.ipv4.ip_forward 检查是否为1
只进不出 缺少回程SNAT DNAT后必须加MASQUERADE
重启后失效 规则没保存 iptables-save > /etc/iptables/rules.v4
高并发丢包 连接跟踪表满 net.netfilter.nf_conntrack_max=1048576

一句话总结:开启 ip_forward + 配好 SNAT/DNAT = Linux 转发网关。简单场景用 iptables,复杂/高频变更场景用 80km无痕网关

Linux 内网转发设置教程
Linux iptables 转发设置,Linux iptables 转发教程
Linux 端口转发完全指南
Linux 转发命令速查,Linux常见转发命令
Linux 地址转发完全指南:从内核参数到 NAT 实战
Linux NAT转发与网关实战:从iptables到高效流量转发程序
Win系统实现网络转发与端口映射:从 IPEnableRouter 到 RRAS 完整步骤
Win7 IP转发怎么开?3分钟让电脑变成“网络桥接器”
Windows网络转发到底能转哪些协议?为什么只支持TCP
win8 路由转发:Win8路由转发实用指南