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无痕网关

nat123映射怎么用?超详细步骤,外网访问内网轻松搞定
nat123域名怎么用?两种方式轻松搞定
nat123怎么用?简单几步实现内网穿透
内网穿透工具对比:nat123、花生壳与轻量新选择
远程访问内网很简单:用对工具,一“箭”穿透
ngrok下载完全指南:从入门到获取客户端
内网远程桌面软件:穿透局域网边界的数字窗口
从外网远程访问内网服务器的完整方案
Windows Server 2008端口转发完全教程:netsh命令添加/查看/删除/重置
为什么三层交换机转发比Linux服务器快?转发表硬件加速的秘密