accept_ra
和 accept_ra_defrtr
和 ra_defrtr_metric
笔记250405
以下是 Linux 系统中与 IPv6 路由通告(RA)相关的三个关键参数 accept_ra
、accept_ra_defrtr
和 ra_defrtr_metric
的详细说明及协作关系:
📜 参数定义与功能
参数 | 作用 | 默认值 | 依赖关系 |
---|---|---|---|
accept_ra | 控制接口是否处理路由通告(RA)消息。 | 1 (启用) | 所有 RA 相关功能的前提条件。 |
accept_ra_defrtr | 是否通过 RA 消息设置默认路由(网关)。 | 1 (启用) | 仅在 accept_ra=1 时生效。 |
ra_defrtr_metric | 设置 RA 生成的默认路由的度量值(优先级,metric 值越低优先级越高)。 | 1024 或 0 | 仅在 accept_ra_defrtr=1 时生效。 |
参数 | 作用 | 默认值 | 依赖关系 |
---|---|---|---|
accept_ra | 总开关:控制接口是否接受 RA 消息(影响所有 RA 相关功能)。 | 1 (启用) | 无 |
accept_ra_defrtr | 子功能:在 RA 接受的基础上,决定是否自动添加默认路由(默认网关)。 | 1 (启用) | 需 accept_ra=1 |
ra_defrtr_metric | 设置通过 RA 添加的默认路由的优先级(metric 值,数值越小优先级越高)。 | 1024 有的说是 0 | 需 accept_ra_defrtr=1 |
🌐 协作机制
-
基础流程:
- 若
accept_ra=1
→ 接口接收并处理 RA 消息。 - 若
accept_ra_defrtr=1
→ 根据 RA 中的默认路由信息生成路由条目。 - 若
ra_defrtr_metric=自定义值
→ 设置该路由的优先级。
- 若
-
典型配置示例:
# 启用 RA 处理 sysctl net.ipv6.conf.eth0.accept_ra=1 # 允许通过 RA 设置默认路由 sysctl net.ipv6.conf.eth0.accept_ra_defrtr=1 # 设置默认路由的优先级为 100(低于默认的 1024) sysctl net.ipv6.conf.eth0.ra_defrtr_metric=100
-
路由表示例:
default via fe80::1 dev eth0 proto ra metric 100 # 优先级高于默认的 1024
🔧 典型场景
1. 多宿主网络(多默认路由)
- 需求:设备通过两个接口(
eth0
和eth1
)连接不同网络,需指定主备路由。 - 配置:
# eth0(主链路,高优先级) sysctl net.ipv6.conf.eth0.ra_defrtr_metric=100 # eth1(备用链路,低优先级) sysctl net.ipv6.conf.eth1.ra_defrtr_metric=200
- 效果:流量优先通过
eth0
,当其断开时自动切换到eth1
。
2. 禁用默认路由自动设置
- 需求:允许 RA 生成地址,但禁止设置默认路由。
- 配置:
sysctl net.ipv6.conf.eth0.accept_ra=1 sysctl net.ipv6.conf.eth0.accept_ra_defrtr=0
- 效果:接口通过 SLAAC 生成 IPv6 地址,但需手动添加默认路由。
3. 调整路由优先级
- 需求:确保静态路由优先于 RA 生成的默认路由。
- 配置:
sysctl -w net.ipv6.conf.eth0.accept_ra=1 sysctl -w net.ipv6.conf.eth0.accept_ra_defrtr=1 # 设置 RA 默认路由的优先级为 500(高于静态路由的默认值 100) sysctl net.ipv6.conf.eth0.ra_defrtr_metric=500 # 添加静态路由(优先级 100) ip -6 route add default via 2001:db8::1 metric 100
- 效果:静态路由(metric=100)优先级高于 RA 路由(metric=500)。
4. 持久化配置
- 通过
/etc/sysctl.conf
或/etc/sysctl.d/
目录保存配置:# 创建自定义配置文件 echo "net.ipv6.conf.eth0.accept_ra = 1" >> /etc/sysctl.d/99-ipv6.conf echo "net.ipv6.conf.eth0.accept_ra_defrtr = 1" >> /etc/sysctl.d/99-ipv6.conf echo "net.ipv6.conf.eth0.ra_defrtr_metric = 500" >> /etc/sysctl.d/99-ipv6.conf # 加载配置 sysctl -p /etc/sysctl.d/99-ipv6.conf
🔍 验证与调试
-
查看参数值:
sysctl net.ipv6.conf.eth0.{accept_ra,accept_ra_defrtr,ra_defrtr_metric}
sudo sysctl -a | grep -E 'accept_ra|accept_ra_defrtr|ra_defrtr_metric'
-
检查路由表:
ip -6 route show | grep "default"
-
抓包分析 RA:
tcpdump -i eth0 -vvv icmp6 and "router advertisement"
⚠️ 注意事项
-
参数优先级:
- 接口级配置(如
eth0
)优先级高于全局配置(all
或default
)。
- 接口级配置(如
-
与
forwarding
的冲突:- 若启用 IPv6 转发(
net.ipv6.conf.eth0.forwarding=1
),内核默认禁用 RA 处理(需手动设置accept_ra=2
)。
- 若启用 IPv6 转发(
-
持久化配置:
# 将配置写入文件(如 /etc/sysctl.d/99-ipv6.conf) echo "net.ipv6.conf.eth0.ra_defrtr_metric = 100" >> /etc/sysctl.d/99-ipv6.conf sysctl -p
accept_ra
、accept_ra_defrtr
、ra_defrtr_metric
详解与协同配置
这三个参数共同控制 IPv6 路由器广播(RA)的接收与默认路由的自动配置行为,适用于主机或路由器的网络优化与安全管理。
1. 参数功能对比
参数 | 作用 | 默认值 | 依赖关系 |
---|---|---|---|
accept_ra | 总开关:控制接口是否接受 RA 消息(影响所有 RA 相关功能)。 | 1 (启用) | 无 |
accept_ra_defrtr | 子功能:在 RA 接受的基础上,决定是否自动添加默认路由(默认网关)。 | 1 (启用) | 需 accept_ra=1 |
ra_defrtr_metric | 设置通过 RA 添加的默认路由的优先级(metric 值,数值越小优先级越高)。 | 1024 | 需 accept_ra_defrtr=1 |
2. 参数关系与工作流程
+-----------------+
| accept_ra=1 | ← 必须启用
+--------+--------+
|
↓
+-----------------+
| accept_ra_defrtr | ← 是否自动添加默认路由
+--------+--------+
|
↓
+-----------------+
| ra_defrtr_metric | ← 调整默认路由优先级
+-----------------+
3. 典型场景与配置示例
场景 1:普通主机(自动配置地址和默认路由)
# 启用 RA 接受并自动添加默认路由(默认配置)
sysctl -w net.ipv6.conf.eth0.accept_ra=1
sysctl -w net.ipv6.conf.eth0.accept_ra_defrtr=1
验证:
ip -6 route show | grep "default"
# 输出示例:default via fe80::1 dev eth0 proto ra metric 1024 pref medium
场景 2:多网关环境(手动管理路由优先级)
# 接受 RA 但调整默认路由优先级
sysctl -w net.ipv6.conf.eth0.accept_ra=1
sysctl -w net.ipv6.conf.eth0.accept_ra_defrtr=1
sysctl -w net.ipv6.conf.eth0.ra_defrtr_metric=500 # 降低 metric 值提高优先级
# 添加另一条默认路由(如通过 DHCPv6)
ip -6 route add default via 2001:db8::1 metric 600
效果:
系统优先选择通过 RA 添加的默认路由(metric=500),而非 DHCPv6 的 metric=600 路由。
场景 3:安全加固(禁用默认路由自动添加)
# 允许通过 RA 自动配置地址,但禁用默认路由
sysctl -w net.ipv6.conf.eth0.accept_ra=1
sysctl -w net.ipv6.conf.eth0.accept_ra_defrtr=0
# 手动添加默认路由
ip -6 route add default via 2001:db8::fffe
4. 安全注意事项
-
防御恶意 RA:
在不可信网络(如公共 Wi-Fi)中,RA 可能伪造默认路由,建议:# 完全禁用 RA 接受(最严格防护) sysctl -w net.ipv6.conf.eth0.accept_ra=0 # 或仅禁用默认路由自动添加(允许 SLAAC) sysctl -w net.ipv6.conf.eth0.accept_ra_defrtr=0
-
RA Guard:
在网络交换机启用 RA Guard 过滤非法 RA,增强二层防护。
5. 持久化配置
通过 /etc/sysctl.conf
或 /etc/sysctl.d/
目录保存配置:
# 创建自定义配置文件
echo "net.ipv6.conf.eth0.accept_ra = 1" >> /etc/sysctl.d/99-ipv6.conf
echo "net.ipv6.conf.eth0.accept_ra_defrtr = 1" >> /etc/sysctl.d/99-ipv6.conf
echo "net.ipv6.conf.eth0.ra_defrtr_metric = 500" >> /etc/sysctl.d/99-ipv6.conf
# 加载配置
sysctl -p /etc/sysctl.d/99-ipv6.conf
6. 调试与验证
查看当前参数值
sysctl net.ipv6.conf.eth0.accept_ra \
net.ipv6.conf.eth0.accept_ra_defrtr \
net.ipv6.conf.eth0.ra_defrtr_metric
抓包分析 RA 消息
tcpdump -i eth0 -nn "icmp6 && ip6[40] == 134" # 捕获 RA 消息(类型 134)
监控路由表变化
watch -n 1 'ip -6 route show | grep "default"'
总结
accept_ra
是总开关:控制是否处理 RA 消息,影响所有子功能。accept_ra_defrtr
控制默认路由:需在accept_ra=1
时生效。ra_defrtr_metric
优化路由选择:调整默认路由优先级,适用于多网关环境。- 安全建议:在开放网络中限制 RA 的默认路由接受,结合防火墙和 RA Guard 防御攻击。
accept_ra
、accept_ra_defrtr
和 ra_defrtr_metric
是 Linux IPv6 网络配置中的三个关键参数,分别控制是否接受路由通告(RA)消息、是否接受 RA 中的默认路由信息以及默认路由的度量值。以下是它们的详细对比和配置指南:
1. accept_ra
参数
- 作用:控制是否接受路由器通告(RA)消息。
- 取值范围:
0
:拒绝 所有 RA 消息(包括路由、前缀等信息)。1
:接受 RA 消息(默认值,但仅在forwarding
关闭时生效)。2
:强制接受 RA 消息(无论forwarding
是否关闭)。
- 默认值:
1
。
2. accept_ra_defrtr
参数
- 作用:控制是否接受 RA 消息中的默认路由信息。
- 取值范围:
0
:拒绝 RA 中的默认路由(需手动配置路由)。1
:接受 RA 中的默认路由(默认值)。
- 默认值:
1
。
3. ra_defrtr_metric
参数
- 作用:设置 RA 消息中默认路由的度量值(优先级)。
- 取值范围:通常为
0
到255
,具体范围可能因系统或内核版本而异。 - 默认值:通常为
0
,表示使用默认值。
4. 区别与联系
- 独立性:三者独立控制不同行为,但需协同配置。
accept_ra=0
:直接禁用 RA,accept_ra_defrtr
和ra_defrtr_metric
失效。accept_ra=1/2
:需结合accept_ra_defrtr
决定默认路由策略。accept_ra_defrtr=1
:需通过ra_defrtr_metric
设置默认路由的度量值。
- 典型场景:
- 主机模式:
accept_ra=1
,accept_ra_defrtr=1
,ra_defrtr_metric=100
(自动获取路由并设置度量值)。 - 路由器模式:
accept_ra=2
,accept_ra_defrtr=1
,ra_defrtr_metric=0
(强制接收 RA 并学习路由,使用默认度量值)。 - 安全加固:
accept_ra=0
(禁用 RA,防止路由劫持)。
- 主机模式:
5. 配置方法
临时生效(重启失效)
# 全局设置(影响所有接口)
echo 1 > /proc/sys/net/ipv6/conf/all/accept_ra
echo 1 > /proc/sys/net/ipv6/conf/all/accept_ra_defrtr
echo 100 > /proc/sys/net/ipv6/conf/all/ra_defrtr_metric
# 针对特定接口(如 eth0)
echo 1 > /proc/sys/net/ipv6/conf/eth0/accept_ra
echo 1 > /proc/sys/net/ipv6/conf/eth0/accept_ra_defrtr
echo 100 > /proc/sys/net/ipv6/conf/eth0/ra_defrtr_metric
永久生效
编辑 /etc/sysctl.conf
,添加:
# 全局配置
net.ipv6.conf.all.accept_ra = 1
net.ipv6.conf.all.accept_ra_defrtr = 1
net.ipv6.conf.all.ra_defrtr_metric = 100
# 针对特定接口(如 eth0)
net.ipv6.conf.eth0.accept_ra = 1
net.ipv6.conf.eth0.accept_ra_defrtr = 1
net.ipv6.conf.eth0.ra_defrtr_metric = 100
执行 sysctl -p
应用配置。
6. 验证与诊断
-
查看当前值:
sysctl net.ipv6.conf.all.accept_ra net.ipv6.conf.all.accept_ra_defrtr net.ipv6.conf.all.ra_defrtr_metric
-
监控 RA 消息:
radvdump # 抓取 RA 报文,观察路由信息
-
检查路由表:
ip -6 route show # 确认默认路由是否存在及其度量值
7. 注意事项
- 优先级:接口级配置(如
eth0
)会覆盖全局(all
)和默认(default
)设置。 - 安全性:在复杂网络环境中,盲目接受 RA 可能导致路由劫持攻击,建议结合防火墙规则。
- 度量值选择:
ra_defrtr_metric
的取值需根据网络环境和路由策略调整,通常0
为默认值,100
为中等优先级。
通过合理配置这三个参数,您可以精准控制 IPv6 网络的行为,适配主机、路由器或安全加固等场景需求。
以下是 accept_ra
、accept_ra_defrtr
和 ra_defrtr_metric
的详细解释,结合知识库中的信息整理而成:
1. accept_ra
作用
控制是否接受并处理 IPv6 路由器公告(Router Advertisement, RA) 消息,并决定如何根据 RA 配置地址和路由。
取值范围
0
:完全拒绝 RA 消息。1
:在非路由模式(forwarding=0
)下接受 RA。2
:强制接受 RA,无论是否处于路由模式(forwarding=1
)。
默认值
- 默认值通常为
1
(允许非路由模式下接受 RA)。
关键功能
- 地址自动配置(SLAAC):允许通过 RA 自动获取 IPv6 地址(需
autoconf=1
)。 - 路由信息处理:若
accept_ra_defrtr=1
,则从 RA 中获取默认路由。 - 依赖关系:是
accept_ra_defrtr
和ra_defrtr_metric
的前提条件。
2. accept_ra_defrtr
作用
控制是否接受 RA 中的 默认路由信息(即路由器的默认网关)。
取值范围
0
:拒绝从 RA 中获取默认路由。1
:接受默认路由(默认值)。
默认值
- 默认值为
1
(允许接受默认路由)。
关键功能
- 路由表管理:若启用,系统会根据 RA 中的默认路由信息自动添加默认路由到路由表。
- 依赖
accept_ra
:只有当accept_ra
允许接收 RA(如accept_ra=1
或2
)时,accept_ra_defrtr
才能生效。
典型场景
- 小米 MIUI 问题修复:MIUI 默认可能禁用此参数,导致无法通过 RA 获取默认路由,需手动设置为
1
(如知识库[2][4]所述)。
3. ra_defrtr_metric
作用
设置通过 RA 接收的默认路由的 度量值(Metric),用于控制路由表中该路由的优先级。
取值范围
- 整数:如
100
、200
等,默认值为0
。 - 值越小,路由优先级越高。
默认值
- 默认值为
0
(最高优先级)。
关键功能
- 路由优先级控制:
- 若系统存在多条默认路由(如同时配置 IPv4 和 IPv6),可通过
ra_defrtr_metric
调整 IPv6 路由的优先级。 - 例如,设置
ra_defrtr_metric=100
会降低该路由的优先级,使其在其他路由不可用时才被使用。
- 若系统存在多条默认路由(如同时配置 IPv4 和 IPv6),可通过
示例配置
# 设置 RA 默认路由的度量值为 100
sysctl -w net.ipv6.conf.all.ra_defrtr_metric=100
三者关系与协作
参数 | 作用范围 | 依赖关系 | 典型用途 |
---|---|---|---|
accept_ra | 是否接受 RA 消息及整体信息 | 无(独立控制 RA 接收) | 启用或禁用 IPv6 自动配置 |
accept_ra_defrtr | 是否接受 RA 中的默认路由 | 依赖 accept_ra ≥ 1 | 控制是否添加默认路由到路由表 |
ra_defrtr_metric | 设置默认路由的度量值 | 依赖 accept_ra_defrtr=1 | 控制默认路由的优先级 |
配置示例
场景 1:启用 IPv6 自动配置并调整路由优先级
# 允许接收 RA 并接受默认路由
sysctl -w net.ipv6.conf.all.accept_ra=2
sysctl -w net.ipv6.conf.all.accept_ra_defrtr=1
# 设置默认路由的度量值为 100(降低优先级)
sysctl -w net.ipv6.conf.all.ra_defrtr_metric=100
场景 2:仅接受地址,不接受默认路由
# 接受 RA 但拒绝默认路由
sysctl -w net.ipv6.conf.all.accept_ra=1
sysctl -w net.ipv6.conf.all.accept_ra_defrtr=0
# 手动添加默认路由(需指定网关)
ip -6 route add default via <router_ipv6_address> metric 100
场景 3:修复小米 MIUI 的 IPv6 连接问题
# 临时修复(需 Root 权限)
sysctl -w net.ipv6.conf.all.accept_ra_defrtr=1
sysctl -w net.ipv6.conf.wlan0.accept_ra_defrtr=1
# 永久修复(写入配置文件)
echo "net.ipv6.conf.all.accept_ra_defrtr = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.wlan0.accept_ra_defrtr = 1" >> /etc/sysctl.conf
sysctl -p
验证配置
检查参数值
# 查看全局设置
cat /proc/sys/net/ipv6/conf/all/accept_ra
cat /proc/sys/net/ipv6/conf/all/accept_ra_defrtr
cat /proc/sys/net/ipv6/conf/all/ra_defrtr_metric
# 查看特定接口(如 wlan0)
cat /proc/sys/net/ipv6/conf/wlan0/accept_ra
cat /proc/sys/net/ipv6/conf/wlan0/accept_ra_defrtr
cat /proc/sys/net/ipv6/conf/wlan0/ra_defrtr_metric
检查路由表
ip -6 route show
# 输出示例:
# default via fe80::1 dev wlan0 proto ra metric 100
注意事项
-
优先级逻辑:
accept_ra
是基础,若accept_ra=0
,则accept_ra_defrtr
和ra_defrtr_metric
均无效。ra_defrtr_metric
仅在accept_ra_defrtr=1
时生效。
-
安全风险:
- 在公共网络中,设置
accept_ra=2
可能存在风险(接受所有 RA),需确保网络环境可信。 - 若仅需地址自动配置,可设置
accept_ra_defrtr=0
并手动配置路由。
- 在公共网络中,设置
-
与
autoconf
的关联:autoconf=1
(默认)时,accept_ra
允许 RA 后,系统会自动通过 RA 配置 IPv6 地址。
知识库关联
- 小米 MIUI 问题:知识库[2][4]提到 MIUI 默认禁用
accept_ra_defrtr
,需手动修改为1
。 - 路由度量值:知识库[6]指出
ra_defrtr_metric
用于控制默认路由的优先级。 - RA 处理流程:知识库[5]解释了内核如何根据 RA 配置地址和路由。
通过合理配置这三个参数,可以灵活控制 IPv6 的自动配置行为,适用于服务器、客户端或移动设备(如修复小米手机的 IPv6 连接问题)。
accept_ra
、accept_ra_defrtr
和 ra_defrtr_metric
都是与 Linux 系统中 IPv6 网络配置相关的参数,下面为你详细介绍它们的功能、取值含义、配置方式以及它们之间的关系。
accept_ra
功能
accept_ra
用于控制设备是否接收路由器通告(Router Advertisement,RA)消息。在 IPv6 网络里,路由器会定期发送 RA 消息,其中包含网络前缀、跳数限制、默认网关等重要信息,设备接收这些消息后可实现无状态地址自动配置(SLAAC),自动获取 IPv6 地址和相关网络配置。
取值含义
1
:设备接受 RA 消息。设备会监听网络中的 RA 消息,并依据消息内容进行配置,如自动生成 IPv6 地址、设置默认网关等。0
:设备拒绝接受 RA 消息。此时设备无法通过 SLAAC 自动获取 IPv6 地址和配置信息,需手动配置地址或依赖 DHCPv6 服务器获取相关信息。
配置方式
- 临时配置(重启后失效):使用
sysctl
命令修改,例如全局禁用 RA 接收:
sysctl -w net.ipv6.conf.all.accept_ra=0
针对特定接口(如 ens33
)禁用:
sysctl -w net.ipv6.conf.ens33.accept_ra=0
- 永久配置:编辑
/etc/sysctl.conf
文件,添加或修改相应配置项,如全局禁用:
net.ipv6.conf.all.accept_ra = 0
特定接口(如 ens33
)禁用:
net.ipv6.conf.ens33.accept_ra = 0
修改后执行 sysctl -p
使配置立即生效。
accept_ra_defrtr
功能
accept_ra_defrtr
控制设备是否接受 RA 消息中指定的默认路由器。即便设备接受了 RA 消息(accept_ra = 1
),也能选择是否将 RA 中指定的路由器作为默认网关。
取值含义
1
:接受 RA 消息中指定的默认路由器。设备会把 RA 中指定的路由器设为默认网关,后续发往外部网络的 IPv6 数据包将通过该路由器转发。0
:拒绝接受 RA 消息中指定的默认路由器。设备不会使用 RA 中指定的路由器作为默认网关,需通过其他方式(如手动配置、DHCPv6)指定默认网关。
配置方式
与 accept_ra
类似,可通过 sysctl
命令进行临时配置,通过编辑 /etc/sysctl.conf
文件进行永久配置。例如,全局禁用接受 RA 中的默认路由器:
sysctl -w net.ipv6.conf.all.accept_ra_defrtr=0
永久配置则在 /etc/sysctl.conf
中添加:
net.ipv6.conf.all.accept_ra_defrtr = 0
然后执行 sysctl -p
使配置生效。
ra_defrtr_metric
功能
ra_defrtr_metric
用于指定 RA 消息中默认路由器的度量值。当网络中存在多个默认路由器时,设备会根据度量值来选择最优的默认路由器,度量值越小,代表该路由器越优。
取值含义
该参数通常为一个整数值,不同的值代表不同的优先级。例如,值为 100
的默认路由器会比值为 200
的默认路由器更优先被设备选择。
配置方式
- 临时配置:使用
sysctl
命令,例如设置全局默认路由器度量值为100
:
sysctl -w net.ipv6.conf.all.ra_defrtr_metric=100
针对特定接口(如 ens33
)设置:
sysctl -w net.ipv6.conf.ens33.ra_defrtr_metric=100
- 永久配置:在
/etc/sysctl.conf
文件中添加或修改相应配置项,如全局设置:
net.ipv6.conf.all.ra_defrtr_metric = 100
特定接口(如 ens33
)设置:
net.ipv6.conf.ens33.ra_defrtr_metric = 100
修改后执行 sysctl -p
使配置生效。
三者关系
accept_ra
是accept_ra_defrtr
和ra_defrtr_metric
生效的前提条件。若accept_ra
设置为0
,设备不接收 RA 消息,那么accept_ra_defrtr
和ra_defrtr_metric
无论设置为何值都无实际意义,因为设备根本不会收到包含默认路由器信息及度量值的 RA 消息。- 当
accept_ra
设置为1
且accept_ra_defrtr
设置为1
时,ra_defrtr_metric
才会发挥作用。设备会根据不同默认路由器的ra_defrtr_metric
值来选择最优的默认路由器。
accept_ra
、accept_ra_defrtr
和 ra_defrtr_metric
的关系与作用
1. accept_ra
- 作用:控制设备是否接受 IPv6 路由器通告(RA)消息。
- 取值:
0
:不接受 RA 消息。1
:接受 RA 消息(默认值)。2
:仅在没有默认路由器时接受 RA 消息。
- 影响:如果
accept_ra
设置为0
,设备将完全忽略所有 RA 消息,不会根据 RA 消息进行任何自动配置,包括默认网关和其他网络信息。
2. accept_ra_defrtr
- 作用:控制设备是否接受 RA 消息中的默认路由器信息。
- 取值:
0
:不接受默认路由器信息。1
:接受默认路由器信息(默认值)。
- 影响:如果
accept_ra_defrtr
设置为0
,设备将忽略 RA 消息中的默认路由器信息,不会自动配置默认网关,但仍然可以接受其他 RA 消息中的信息(如前缀信息)。
3. ra_defrtr_metric
- 作用:设置默认路由器的度量值。
- 取值:整数。
- 影响:度量值用于决定默认路由器的优先级。较低的度量值表示更高的优先级。如果存在多个默认路由器,设备会优先选择度量值较低的路由器。
关系与影响
-
accept_ra
和accept_ra_defrtr
的关系:accept_ra
是总开关,决定是否接收 RA 消息。accept_ra_defrtr
是子开关,仅在accept_ra
设置为1
或2
时生效,决定是否接受 RA 消息中的默认路由器信息。- 如果
accept_ra
设置为0
,accept_ra_defrtr
的设置将无效。
-
ra_defrtr_metric
的作用:ra_defrtr_metric
仅在accept_ra
和accept_ra_defrtr
都允许接收默认路由器信息时生效。- 它用于设置默认路由器的度量值,影响路由选择的优先级。
配置方法
查看当前值
# 查看 accept_ra 的值
cat /proc/sys/net/ipv6/conf/ens33/accept_ra
# 查看 accept_ra_defrtr 的值
cat /proc/sys/net/ipv6/conf/ens33/accept_ra_defrtr
# 查看 ra_defrtr_metric 的值
cat /proc/sys/net/ipv6/conf/ens33/ra_defrtr_metric
修改值
通过直接写入值到文件:
# 禁用 ens33 接口的 RA 接受
echo 0 > /proc/sys/net/ipv6/conf/ens33/accept_ra
# 启用 ens33 接口的 RA 接受
echo 1 > /proc/sys/net/ipv6/conf/ens33/accept_ra
# 启用 ens33 接口的默认路由器信息接受
echo 1 > /proc/sys/net/ipv6/conf/ens33/accept_ra_defrtr
# 禁用 ens33 接口的默认路由器信息接受
echo 0 > /proc/sys/net/ipv6/conf/ens33/accept_ra_defrtr
# 设置默认路由器的度量值
echo 100 > /proc/sys/net/ipv6/conf/ens33/ra_defrtr_metric
使用 sysctl
命令
# 查看当前值
sysctl net.ipv6.conf.ens33.accept_ra
sysctl net.ipv6.conf.ens33.accept_ra_defrtr
sysctl net.ipv6.conf.ens33.ra_defrtr_metric
# 修改值
sysctl -w net.ipv6.conf.ens33.accept_ra=0
sysctl -w net.ipv6.conf.ens33.accept_ra_defrtr=0
sysctl -w net.ipv6.conf.ens33.ra_defrtr_metric=100
# 永久修改(编辑 /etc/sysctl.conf)
echo "net.ipv6.conf.ens33.accept_ra = 0" >> /etc/sysctl.conf
echo "net.ipv6.conf.ens33.accept_ra_defrtr = 0" >> /etc/sysctl.conf
echo "net.ipv6.conf.ens33.ra_defrtr_metric = 100" >> /etc/sysctl.conf
sysctl -p
注意事项
- 优先级:接口特定设置的优先级最高,全局设置次之,默认设置优先级最低。
- 影响:禁用
accept_ra
会阻止设备接受任何 RA 消息,而禁用accept_ra_defrtr
仅阻止设备接受默认路由器信息。 - 应用场景:在需要手动配置网络或禁用自动配置的场景中,可以将
accept_ra
设置为0
。如果需要接受 RA 消息但手动配置默认网关,可以将accept_ra
设置为1
并将accept_ra_defrtr
设置为0
。通过设置ra_defrtr_metric
,可以优化路由选择的优先级。
在 Linux 系统的 IPv6 网络配置中,accept_ra
、accept_ra_defrtr
和 ra_defrtr_metric
是三个与 路由器通告 (Router Advertisement, RA) 相关的内核参数,主要用于控制 IPv6 的默认路由和地址自动配置行为。
1. accept_ra
(接受路由器通告)
- 作用:控制是否接受 IPv6 路由器通告(RA)。
- RA 是 IPv6 中路由器向本地链路发送的报文,用于通告网络前缀、默认路由等信息。
- 取值:
0
:禁止接受 RA(需手动配置 IPv6 地址和路由)。1
:允许接受 RA(默认值,支持无状态地址自动配置 SLAAC)。2
:即使 IP 转发已启用,仍接受 RA(用于特殊场景)。
- 典型场景:
- 若禁用(设为
0
),系统不会自动配置 IPv6 地址或默认路由。 - 服务器环境可能禁用此参数以增强安全性。
- 若禁用(设为
2. accept_ra_defrtr
(接受默认路由)
- 作用:控制是否通过 RA 报文中的信息设置默认路由。
- 依赖
accept_ra=1
生效。
- 依赖
- 取值:
0
:忽略 RA 中的默认路由信息。1
:根据 RA 报文添加默认路由(默认值)。
- 典型场景:
- 在多网络接口设备中,禁用某个接口的默认路由,避免路由冲突。
- 例如:仅允许
eth0
添加默认路由,其他接口设为accept_ra_defrtr=0
。
3. ra_defrtr_metric
(默认路由的度量值)
- 作用:设置通过 RA 添加的默认路由的 度量值(metric)。
- 路由度量值决定优先级,数值越小优先级越高。
- 默认值:
1024
(取决于内核版本)。 - 典型场景:
- 多接口环境下,调整默认路由优先级。
- 例如:有线网络(
eth0
)设为metric=100
,无线网络(wlan0
)设为metric=200
,优先使用有线网络。
参数关系总结
参数 | 依赖条件 | 功能 |
---|---|---|
accept_ra | 无 | 总开关,决定是否处理 RA |
accept_ra_defrtr | accept_ra=1 | 控制是否添加默认路由 |
ra_defrtr_metric | accept_ra_defrtr=1 | 调整默认路由的优先级(metric 值) |
配置示例
临时修改(重启失效):
# 启用 eth0 的 RA 接受
sysctl -w net.ipv6.conf.eth0.accept_ra=1
# 允许通过 RA 添加默认路由
sysctl -w net.ipv6.conf.eth0.accept_ra_defrtr=1
# 设置默认路由的 metric 为 100
sysctl -w net.ipv6.conf.eth0.ra_defrtr_metric=100
永久修改:
编辑 /etc/sysctl.conf
,添加:
net.ipv6.conf.eth0.accept_ra = 1
net.ipv6.conf.eth0.accept_ra_defrtr = 1
net.ipv6.conf.eth0.ra_defrtr_metric = 100
执行 sysctl -p
生效。
注意事项
- 权限需求:修改需
root
权限。 - 接口差异:每个网络接口(如
eth0
、wlan0
)需单独配置。 - 安全风险:不当配置可能导致网络中断或安全漏洞(如 RA 欺骗攻击)。
- IPv6 转发冲突:若启用 IP 转发(
net.ipv6.conf.all.forwarding=1
),默认会禁用 RA 接受,需显式设置accept_ra=2
。
建议通过 sysctl -a | grep accept_ra
查看当前配置。
accept_ra
、accept_ra_defrtr
与 ra_defrtr_metric
的详细解析
这三个参数共同控制 Linux 系统中 IPv6 路由器通告(RA)的接收与路由配置行为。以下是它们的功能、关系及典型用例:
一、参数功能说明
参数 | 功能 | 默认值 | 依赖关系 |
---|---|---|---|
accept_ra | 控制接口是否接收和处理 IPv6 路由器通告(RA)。 | 1 | 需接口未启用转发(forwarding=0 )或显式设 2 。 |
accept_ra_defrtr | 控制是否通过 RA 设置 默认路由(Default Route)。 | 1 | 仅在 accept_ra≥1 时生效。 |
ra_defrtr_metric | 设置从 RA 学习的默认路由的 度量值(Metric)(用于路由优先级)。 | 0 | 仅当 accept_ra_defrtr=1 时生效。 |
二、参数间关系与优先级
-
accept_ra
是基础开关
• 若accept_ra=0
,接口完全忽略 RA,accept_ra_defrtr
和ra_defrtr_metric
均无效。
• 若accept_ra≥1
,会接收 RA,并根据accept_ra_defrtr
决定是否设置默认路由。 -
accept_ra_defrtr
控制默认路由
• 即使accept_ra=1
,若accept_ra_defrtr=0
,接口仍接收 RA(如生成地址),但不会自动添加默认路由。 -
ra_defrtr_metric
影响路由优先级
• 仅当accept_ra_defrtr=1
时,通过 RA 获取的默认路由将使用该接口的ra_defrtr_metric
值作为路由优先级(Metric)。
三、行为场景与配置示例
1. 普通主机模式(自动配置默认路由)
sysctl -w net.ipv6.conf.eth0.accept_ra=1 # 启用 RA 接收
sysctl -w net.ipv6.conf.eth0.accept_ra_defrtr=1 # 允许 RA 设置默认路由
sysctl -w net.ipv6.conf.eth0.ra_defrtr_metric=100 # 默认路由 Metric 设为 100
• 效果:接口根据 RA 生成地址,并通过 RA 的默认路由配置添加 IPv6 默认路由,优先级为 100
。
• 验证:
ip -6 route show | grep "default via"
# 输出示例:default via fe80::1 dev eth0 proto ra metric 100 pref medium
2. 路由器模式(禁用自动路由,优先级调整)
sysctl -w net.ipv6.conf.eth0.forwarding=1 # 启用 IPv6 转发
sysctl -w net.ipv6.conf.eth0.accept_ra=2 # 强制接收 RA(即使转发启用)
sysctl -w net.ipv6.conf.eth0.accept_ra_defrtr=0 # 禁止 RA 设置默认路由
• 效果**:接口仍可通过 RA 获取地址前缀(例如广域网接口),但默认网关由手动配置,避免 RA 干扰。
3. 多接口路由优化(按 Metric 优先选择链路)
sysctl -w net.ipv6.conf.eth0.ra_defrtr_metric=100 # 主链路(如光纤)高优先级
sysctl -w net.ipv6.conf.eth1.ra_defrtr_metric=200 # 备用链路(如4G)低优先级
• 效果:当双网卡均接收 RA 提供默认路由时,系统优先使用 eth0
(Metric 更小)。
四、安全与调试建议
-
安全风险
• RA 可能被恶意伪造(如虚假默认路由)。建议在不可信网络中设置accept_ra=0
或结合ip6tables
过滤非法 RA。 -
调试工具
• 查看路由表:ip -6 route show
• 抓包验证 RA:
tcpdump -i eth0 icmp6 and "ip6[40] == 134" # 过滤 ICMPv6 RA 报文
• 检查参数生效情况:
sysctl net.ipv6.conf.eth0.accept_ra net.ipv6.conf.eth0.accept_ra_defrtr
-
内核版本兼容性
•accept_ra=2
:仅在内核 ≥2.6.37 时支持,若旧内核需手动设置forwarding=0
以接收 RA。
•ra_defrtr_metric
:需要较新内核支持(≥3.14),旧版本可能无此参数。
五、总结
• accept_ra
:总开关,控制是否允许 RA 处理。
• accept_ra_defrtr
:次级开关,决定是否添加 RA 提供的默认路由。
• ra_defrtr_metric
:精细控制,调整通过 RA 获得的默认路由优先级。
通过合理配置这些参数,既可实现灵活的网络自动配置(如家庭主机),也能支持复杂路由策略(如企业级网关),同时兼顾安全性与性能优化。
accept_ra
、accept_ra_defrtr
和 ra_defrtr_metric
参数详解
1. 参数概述
-
accept_ra
路径:/proc/sys/net/ipv6/conf/<interface>/accept_ra
功能:控制是否接收和处理 IPv6 路由器通告(RA)消息。
默认值:1
(启用)。
可选值:0
:完全禁用 RA 接收。1
:启用 RA 接收,并自动配置默认路由和 SLAAC 地址。2
:仅接收 RA 消息,但不自动配置地址或路由。
-
accept_ra_defrtr
路径:/proc/sys/net/ipv6/conf/<interface>/accept_ra_defrtr
功能:控制是否将 RA 中的默认路由器信息添加到路由表。
默认值:1
(启用)。
可选值:0
:禁用默认路由自动添加。1
:启用默认路由自动添加。
-
ra_defrtr_metric
路径:/proc/sys/net/ipv6/conf/<interface>/ra_defrtr_metric
功能:设置 RA 中默认路由器的路由度量值(影响路由选择的优先级)。
默认值:0
(使用默认度量值)。
可选值:0-255
:自定义度量值,数值越低优先级越高。
2. 核心区别与协作关系
参数 | 作用范围 | 是否影响地址生成 | 是否影响默认路由 | 是否影响路由优先级 |
---|---|---|---|---|
accept_ra | 全局控制 RA 的接收和处理 | 是 | 是 | 否 |
accept_ra_defrtr | 仅控制默认路由的添加 | 否 | 是 | 否 |
ra_defrtr_metric | 控制默认路由的度量值 | 否 | 否 | 是 |
- 协作关系:
accept_ra
是全局开关,必须启用后(1
或2
),accept_ra_defrtr
和ra_defrtr_metric
的设置才生效。ra_defrtr_metric
仅在accept_ra_defrtr=1
时生效,用于调整默认路由的优先级。
3. 典型配置场景
场景 1:完全自动配置(默认行为)
# 启用 RA 接收并自动配置地址和默认路由
echo 1 > /proc/sys/net/ipv6/conf/all/accept_ra
echo 1 > /proc/sys/net/ipv6/conf/all/accept_ra_defrtr
echo 10 > /proc/sys/net/ipv6/conf/all/ra_defrtr_metric
- 效果:
- 根据 RA 生成 SLAAC 地址(需
autoconf=1
)。 - 将 RA 中的默认路由器添加到路由表,度量值设为
10
(优先级较高)。
- 根据 RA 生成 SLAAC 地址(需
场景 2:仅接收 RA 但不配置路由
# 接收 RA 消息,但不自动添加默认路由
echo 2 > /proc/sys/net/ipv6/conf/all/accept_ra
echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra_defrtr
- 效果:
- 不生成 SLAAC 地址(
autoconf
默认为0
)。 - 需手动解析 RA 中的其他信息(如 DNS 服务器)。
- 不生成 SLAAC 地址(
场景 3:配置默认路由度量值
# 启用默认路由自动添加,并设置较低的度量值(优先级更高)
echo 1 > /proc/sys/net/ipv6/conf/all/accept_ra
echo 1 > /proc/sys/net/ipv6/conf/all/accept_ra_defrtr
echo 5 > /proc/sys/net/ipv6/conf/all/ra_defrtr_metric
- 效果:
- 默认路由将被添加,并具有较高的优先级(度量值
5
)。
- 默认路由将被添加,并具有较高的优先级(度量值
4. 验证配置
# 查看参数值
sysctl net.ipv6.conf.all.accept_ra
sysctl net.ipv6.conf.all.accept_ra_defrtr
sysctl net.ipv6.conf.all.ra_defrtr_metric
# 查看默认路由
ip -6 route show default
5. 注意事项
-
安全考量:
- 在可信网络中(如家庭网络),默认配置(
accept_ra=1
)是安全的。 - 在公共或不信任网络中,建议禁用
accept_ra
或accept_ra_defrtr
,防止恶意路由劫持。
- 在可信网络中(如家庭网络),默认配置(
-
路由优先级:
ra_defrtr_metric
的值越低,路由的优先级越高。需根据网络架构合理设置。
-
依赖关系:
accept_ra_defrtr
和ra_defrtr_metric
仅在accept_ra=1
或2
时生效。
-
兼容性:
- 部分网络环境可能强制要求禁用自动路由添加,需手动配置路由。
6. 持久化配置示例
# 编辑 /etc/sysctl.conf 或创建 /etc/sysctl.d/99-ipv6.conf:
net.ipv6.conf.all.accept_ra = 1
net.ipv6.conf.all.accept_ra_defrtr = 1
net.ipv6.conf.all.ra_defrtr_metric = 10
# 应用配置
sysctl -p
总结
accept_ra
是全局控制 RA 的开关,决定是否接收和处理 RA 消息。accept_ra_defrtr
是细粒度开关,专门控制默认路由的自动添加。ra_defrtr_metric
用于调整默认路由的优先级。- 三者结合使用可灵活管理 IPv6 的自动配置行为,适用于从普通终端到复杂网络环境的多种场景。在安全或路由策略严格的环境中,建议禁用自动配置并手动管理网络参数。