首页/系统/Linux 内核与性能调优速查/net.ipv4.ip_forward IPv4 转发开关
sysctl 内核参数72 条

net.ipv4.ip_forward IPv4 转发开关

控制内核是否转发非本机地址的数据包;容器网络、NAT 网关、VPN、软路由都需要开启它。

IPv4 转发开关是什么

net.ipv4.ip_forward 控制内核是否把收到的、目的地址不是本机的数据包转发出去。它为 0 时内核只处理发往本机的流量,为 1 时按路由表把包从另一块网卡送出。容器网络、Kubernetes 节点、NAT 网关、VPN 服务端与软路由都需要它开启;开启后还必须配合路由表与地址转换规则,下游设备才能正常出网。

基本信息

参数net.ipv4.ip_forward(0 不转发 / 1 转发)
默认值多数发行版为 0;装了容器运行时或虚拟化的机器常被改为 1
IPv6 对应项net.ipv6.conf.all.forwarding
按接口层级conf/<接口>/forwarding 可单独设置,排查时与全局值一起看
配套依赖路由表、iptables/nftables 的转发与地址转换规则
持久化/etc/sysctl.d/*.conf,重启后自动生效

典型使用场景

  • 容器与 Kubernetes 节点:容器出网与跨节点 Pod 通信依赖内核转发与转发规则
  • NAT 网关与出口代理:作为内外网之间的中转,开启转发并配置地址转换
  • VPN 服务端:客户端流量需要经服务端转发到内网或公网
  • 软路由与多网卡主机:把不同网段连通,作为内网互通的通道
  • 排障:容器能解析但访问外网失败时,先确认转发开关与规则链是否都正确

开启与核对

开启与核对
sysctl net.ipv4.ip_forward                  # 读当前开关
cat /proc/sys/net/ipv4/conf/eth0/forwarding  # 按接口层级确认
sysctl -w net.ipv4.ip_forward=1             # 临时开启
iptables -L FORWARD -n --line-numbers | head   # 检查转发规则是否放行
nft list ruleset 2>/dev/null | head         # 使用 nftables 时查规则集
sysctl net.ipv6.conf.all.forwarding         # IPv6 场景需另行开启

落盘与回读

落盘与回读
# /etc/sysctl.d/99-forward.conf
net.ipv4.ip_forward = 1               # 开启 IPv4 转发
net.ipv6.conf.all.forwarding = 1       # 需要 IPv6 转发时同步开启
# 回读命令:sysctl net.ipv4.ip_forward

不生效时的排查顺序

层次检查内容常见问题
内核开关ip_forward 与按接口的 forwarding 值只改了临时值未落盘,重启后回退
本机路由目标网段的路由与下一跳缺少回程路由,单向通
转发规则FORWARD 链是否放行默认策略为丢弃导致包被拦
云平台源地址与目的地址检查、安全组虚拟网络层面丢弃,本机看不到记录
开启转发与做地址转换是两件独立的事:转发只负责把包送出去,私网地址要被公网回包,还需要 SNAT 一类的规则。容器或下游能发出包但收不到回包,通常就是地址转换或回程路由缺失。
多网卡主机开启转发会立刻把不同网段连通,等于扩大了可达范围。开启前明确哪些网段需要互通,并在转发链上收紧策略,避免把管理网与业务网意外打通。

易错点

  • 只开开关不加规则:包被转发链的默认策略丢弃,表现为配置都对但依旧不通
  • 忽略云平台的源地址检查:虚拟网络层面拦截,本机日志与计数器都不会有记录
  • 多网卡主机无脑开启转发:不同安全等级的网段被连通,暴露面意外扩大
  • 只改临时值不落盘:重启后容器网络或 VPN 失效,故障与变更记录对不上
  • 混用 IPv4 与 IPv6 预期:IPv6 有独立开关,只开 IPv4 时双栈环境仍有一半不通

数据来源与参考

  • Linux 内核 Documentation/networking/ip-sysctl.rst
  • man 8 sysctl
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌