Linux accept_ra 与网关转发场景
背景 accept_ra 是 Linux 内核里控制「是否接受路由器通告(Router Advertisement, RA)」的 sysctl。常见路径: /proc/sys/net/ipv6/conf/<interface>/accept_ra 取值含义(简化): 值 行为 0 忽略 RA,不自动配置地址/默认路由 1 接受 RA(主机模式) 2 接受 RA,即使接口已开启 forwarding(网关/路由器模式) 默认情况下,一旦接口 net.ipv6.conf.<iface>.forwarding=1,内核会把 accept_ra 视为 0,不再接受 RA。这是 RFC 4861 的意图:路由器不应把 RA 当主机来用。 解决什么问题 典型场景:一台 Linux 机器同时做网关转发,又需要从上游路由器拿 IPv6 前缀和默认路由。 例如 homelab 里的 VPN 客户端 192.168.50.61: 上游 OpenWrt 通过 RA 向 LAN 下发 ISP 委派的 /60 GUA 前缀和 ::/0 默认路由。 50.61 运行 tproxy,需要 ip_forward=1 转发 LAN / WireGuard 流量。 若 accept_ra=0 且 没有 userspace 网络栈(如 systemd-networkd)代为处理 RA,本机 IPv6 直连(VPN direct 出站)可能 Network is unreachable。 accept_ra=2 的作用:在开启 IP 转发的同时,仍接受上游 RA,让网关主机也能获得 GUA 和默认路由。 ...