Linux默认关闭IP转发,必须使/proc/sys/net/ipv4/ip_forward运行时值严格等于1才生效;临时启用用echo 1 > /proc/sys/net/ipv4/ip_forward或sysctl -w,永久启用推荐新建/etc/sysctl.d/99-ipforward.conf并执行sysctl --system。

Linux 默认关闭 IP 转发,哪怕配好双网卡、写全路由表,非本机目的的数据包也会被静默丢弃——连 tcpdump 都抓不到痕迹。开启的关键不是“改配置”,而是让内核运行时参数 /proc/sys/net/ipv4/ip_forward 的值严格等于数字 1。
确认当前是否真正开启
别看配置文件,直接查内核实时状态:
-
cat /proc/sys/net/ipv4/ip_forward—— 输出必须是纯 1(不能带空格、换行、引号) -
sysctl net.ipv4.ip_forward—— 返回net.ipv4.ip_forward = 0就说明没开 - 即使
/etc/sysctl.conf里写了net.ipv4.ip_forward = 1,没加载就等于没写
临时开启(调试首选)
立即生效,重启失效,适合快速验证:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward- 或:
sudo sysctl -w net.ipv4.ip_forward=1 - 执行后务必再运行
cat /proc/sys/net/ipv4/ip_forward确认输出为 1
永久开启(推荐现代做法)
旧式修改 /etc/sysctl.conf 在 Ubuntu 20.04+、RHEL8+/CentOS Stream 等系统中可能被覆盖:
- 新建独立配置:
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-ipforward.conf - 加载全部 sysctl 配置:
sudo sysctl --system(比sysctl -p更可靠) - CentOS 6/7 用户建议额外在
/etc/sysconfig/network中添加:FORWARD_IPV4=yes
开了 ip_forward = 1 还不通?检查三个关键点
IP 转发只是必要条件,不是充分条件:
-
路由表缺失:比如 eth0 接 192.168.10.0/24、eth1 接 192.168.20.0/24,需手动加路由:
ip route add 192.168.20.0/24 via 192.168.10.1 dev eth0 -
iptables FORWARD 链拦截:默认策略常为 DROP,测试可先放行:
sudo iptables -A FORWARD -j ACCEPT(生产环境必须细化规则) -
ARP 响应被抑制:Linux 默认不响应跨网段 ARP 请求,单臂路由等场景需调
arp_ignore和arp_announce


















