跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

linux怎么开启路由转发_linux配置内核网络转发【实操】

Linux转发功能默认关闭,需确认/proc/sys/net/ipv4/ip_forward值为1;临时开启用echo 1 > /proc/sys/net/ipv4/ip_forward或sysctl -w,永久生效需在/etc/sysctl.d/下配置并运行sysctl --system。 怎么确认转发功能当前没开 Linux 默认是关着
ip_forward
的,哪怕你配了双网卡、加了路由表,只要这个开关是 0,所有非本机目的的包都会被静默丢弃——连日志都不打,所以 ping 不通时第一反应不该是查网线,而是先看它。
cat /proc/sys/net/ipv4/ip_forward
输出
0
就说明没开
sysctl net.ipv4.ip_forward
更直观,直接告诉你当前值 别只信配置文件:
/etc/sysctl.conf
里写了
net.ipv4.ip_forward = 1
,但没执行
sysctl -p
,照样不生效 临时开启:5 秒搞定,重启就丢 调试或临时搭个测试网关时,直接写内核参数最省事,改完立刻生效,不用 reload 任何服务。 用
echo 1 > /proc/sys/net/ipv4/ip_forward
(需 root) 等价命令:
sysctl -w net.ipv4.ip_forward=1
验证:
cat /proc/sys/net/ipv4/ip_forward
必须返回
1
,不是空行、不是报错、也不是 “1\n” 后面带空格 永久开启:别只改
sysctl.conf
很多人改完
/etc/sysctl.conf
就以为万事大吉,结果重启后又变回 0——因为现代发行版(如 RHEL8+/Ubuntu 20.04+)优先读
/etc/sysctl.d/*.conf
,而某些安装包会自带覆盖项。 先检查有没有冲突文件:
ls /etc/sysctl.d/* | xargs grep -l ip_forward 2>/dev/null
推荐做法:新建
/etc/sysctl.d/99-ipforward.conf
,内容只有一行:
net.ipv4.ip_forward = 1
然后运行
sysctl --system
(比
sysctl -p
更全面,会加载所有目录) 注意:CentOS 6/7 的
/etc/sysconfig/network
里还有个
FORWARD_IPV4=yes
,虽已过时,但某些旧脚本仍会读它,建议一并设上 开了转发还不通?防火墙和路由表在拖后腿
ip_forward = 1
只是必要条件,不是充分条件。常见断点有三个:ARP 回应、iptables FORWARD 链拦截、路由表缺失下一跳。 如果两端主机不在同一子网,且中间 Linux 主机没配对应路由(比如缺
ip route add 192.168.40.0/24 via 192.168.30.1 dev eth0
),包根本进不了转发逻辑 iptables 默认把
FORWARD
链设为
DROP
,得加规则:
iptables -A FORWARD -j ACCEPT
(测试可用,生产必须细化) 更隐蔽的是 ARP:Linux 默认不响应跨网段的 ARP 请求(
arp_ignore
和
arp_announce
),尤其在“单臂路由”或策略路由场景下,得额外调参 真正跑通一次端到端通信,往往要同时盯住三处:内核参数、路由表、防火墙链。少一个,都是“看起来配好了,其实没转发”。

相关文章