linux默认关闭ip转发,必须显式启用:临时用echo 1 > /proc/sys/net/ipv4/ip_forward或sysctl -w net.ipv4.ip_forward=1,永久推荐新建/etc/sysctl.d/99-ipforward.conf并执行sysctl --system,且务必验证cat /proc/sys/net/ipv4/ip_forward输出为严格纯数字1。

Linux 默认关闭 IP 路由转发,必须显式启用才能让系统转发非本机目的的数据包。只改配置文件不生效,关键要看内核运行时值是否为严格意义上的 1。
确认当前状态
别查配置文件,直接读内核实时值:
-
cat /proc/sys/net/ipv4/ip_forward—— 输出必须是纯数字 1(不能带空格、换行、引号) -
sysctl net.ipv4.ip_forward—— 返回net.ipv4.ip_forward = 0就说明没开
临时开启(重启失效)
适合调试或快速验证,5 秒内生效:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
echo 1 > /proc/sys/net/ipv4/ip_forward(需 root) - 等价命令:
sysctl -w net.ipv4.ip_forward=1
永久开启(推荐现代做法)
旧式修改 /etc/sysctl.conf 在 Ubuntu 20.04+、RHEL8+ 等系统中可能被忽略:
- 新建独立配置:
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-ipforward.conf - 加载全部配置:
sudo sysctl --system(比sysctl -p更可靠) - CentOS 6/7 用户建议额外在
/etc/sysconfig/network中添加FORWARD_IPV4=yes
开了 ip_forward 还不通?检查这三个地方
ip_forward = 1 只是必要条件,不是充分条件:
-
路由表缺失:比如 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,测试可先放行:
iptables -A FORWARD -j ACCEPT -
ARP 响应被抑制:Linux 默认不响应跨网段 ARP 请求,单臂路由场景下需调
arp_ignore和arp_announce










