# 临时开启(立即生效,重启失效) echo 1 > /proc/sys/net/ipv4/ip_forward # 或使用 sysctl sysctl -w net.ipv4.ip_forward=1
sysctl net.ipv4.ip_forward # 输出应为:net.ipv4.ip_forward = 1
# 写入配置文件 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf # 立即加载生效 sysctl -p
一行搞定永久开启:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p
| 场景 | 用途 |
|---|---|
| NAT 上网 | 内网设备通过 Linux 共享公网 IP |
| 端口转发 | 把外部请求转给内网服务器 |
| VPN 服务 | 让客户端访问内网资源 |
| 容器网络 | Docker 容器之间互通 |
| 路由器 | 多个网段之间互相通信 |
配合 iptables 使用示例:
# NAT 上网 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE # 端口转发(8080→内网机器80) iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80 iptables -t nat -A POSTROUTING -j MASQUERADE
# 检查是否开启 cat /proc/sys/net/ipv4/ip_forward # 查看转发规则 iptables -t nat -L -n iptables -L FORWARD -n # 查看路由表 ip route
| 问题 | 原因 | 解决 |
|---|---|---|
| 重启后失效 | 没写配置文件 | 执行永久开启命令 |
| 转发不生效 | 只开了转发没配规则 | 添加 iptables NAT 规则 |
| 连不上 | FORWARD 链没放行 |
iptables -A FORWARD -j ACCEPT |
开启内核转发后,如果觉得 iptables 语法复杂,可以用 80km无痕网关(曾用名:80KM端口流量转发程序) 简化配置。
// forwarder.json { "listen": "0.0.0.0:8080", "routers": [ {"from": "0.0.0.0/0", "to": "192.168.1.100:80"} ] }
80km-forwarder -config forwarder.json
无需记忆 iptables 语法,JSON 配置即完成端口转发。
一句话总结:sysctl -w net.ipv4.ip_forward=1 开启转发,配合 iptables 或 80km无痕网关 实现流量转发。