`accept_ra` 和 `accept_ra_defrtr` 和 `ra_defrtr_metric` 笔记250405

accept_raaccept_ra_defrtrra_defrtr_metric 笔记250405


以下是 Linux 系统中与 IPv6 路由通告(RA)相关的三个关键参数 accept_raaccept_ra_defrtrra_defrtr_metric 的详细说明及协作关系:


📜 参数定义与功能

参数作用默认值依赖关系
accept_ra控制接口是否处理路由通告(RA)消息。1(启用)所有 RA 相关功能的前提条件。
accept_ra_defrtr是否通过 RA 消息设置默认路由(网关)。1(启用)仅在 accept_ra=1 时生效。
ra_defrtr_metric设置 RA 生成的默认路由的度量值(优先级,metric 值越低优先级越高)。10240仅在 accept_ra_defrtr=1 时生效。
参数作用默认值依赖关系
accept_ra总开关:控制接口是否接受 RA 消息(影响所有 RA 相关功能)。1(启用)
accept_ra_defrtr子功能:在 RA 接受的基础上,决定是否自动添加默认路由(默认网关)。1(启用)accept_ra=1
ra_defrtr_metric设置通过 RA 添加的默认路由的优先级(metric 值,数值越小优先级越高)。1024 有的说是 0accept_ra_defrtr=1

🌐 协作机制

  1. 基础流程

    • accept_ra=1 → 接口接收并处理 RA 消息。
    • accept_ra_defrtr=1 → 根据 RA 中的默认路由信息生成路由条目。
    • ra_defrtr_metric=自定义值 → 设置该路由的优先级。
  2. 典型配置示例

    # 启用 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
    
  3. 路由表示例

    default via fe80::1 dev eth0 proto ra metric 100  # 优先级高于默认的 1024
    

🔧 典型场景

1. 多宿主网络(多默认路由)
  • 需求:设备通过两个接口(eth0eth1)连接不同网络,需指定主备路由。
  • 配置
    # 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
    

🔍 验证与调试

  1. 查看参数值

    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'
    
  2. 检查路由表

    ip -6 route show | grep "default"
    
  3. 抓包分析 RA

    tcpdump -i eth0 -vvv icmp6 and "router advertisement"
    

⚠️ 注意事项

  1. 参数优先级

    • 接口级配置(如 eth0)优先级高于全局配置(alldefault)。
  2. forwarding 的冲突

    • 若启用 IPv6 转发(net.ipv6.conf.eth0.forwarding=1),内核默认禁用 RA 处理(需手动设置 accept_ra=2)。
  3. 持久化配置

    # 将配置写入文件(如 /etc/sysctl.d/99-ipv6.conf)
    echo "net.ipv6.conf.eth0.ra_defrtr_metric = 100" >> /etc/sysctl.d/99-ipv6.conf
    sysctl -p
    











accept_raaccept_ra_defrtrra_defrtr_metric 详解与协同配置

这三个参数共同控制 IPv6 路由器广播(RA)的接收与默认路由的自动配置行为,适用于主机或路由器的网络优化与安全管理。


1. 参数功能对比

参数作用默认值依赖关系
accept_ra总开关:控制接口是否接受 RA 消息(影响所有 RA 相关功能)。1(启用)
accept_ra_defrtr子功能:在 RA 接受的基础上,决定是否自动添加默认路由(默认网关)。1(启用)accept_ra=1
ra_defrtr_metric设置通过 RA 添加的默认路由的优先级(metric 值,数值越小优先级越高)。1024accept_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. 安全注意事项

  1. 防御恶意 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
    
  2. 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_raaccept_ra_defrtrra_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 消息中默认路由的度量值(优先级)。
  • 取值范围:通常为 0255,具体范围可能因系统或内核版本而异。
  • 默认值:通常为 0,表示使用默认值。

4. 区别与联系

  • 独立性:三者独立控制不同行为,但需协同配置。
    • accept_ra=0:直接禁用 RA,accept_ra_defrtrra_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. 验证与诊断

  1. 查看当前值

    sysctl net.ipv6.conf.all.accept_ra net.ipv6.conf.all.accept_ra_defrtr net.ipv6.conf.all.ra_defrtr_metric
    
  2. 监控 RA 消息

    radvdump  # 抓取 RA 报文,观察路由信息
    
  3. 检查路由表

    ip -6 route show  # 确认默认路由是否存在及其度量值
    

7. 注意事项

  • 优先级:接口级配置(如 eth0)会覆盖全局(all)和默认(default)设置。
  • 安全性:在复杂网络环境中,盲目接受 RA 可能导致路由劫持攻击,建议结合防火墙规则。
  • 度量值选择ra_defrtr_metric 的取值需根据网络环境和路由策略调整,通常 0 为默认值,100 为中等优先级。

通过合理配置这三个参数,您可以精准控制 IPv6 网络的行为,适配主机、路由器或安全加固等场景需求。










以下是 accept_raaccept_ra_defrtrra_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_defrtrra_defrtr_metric 的前提条件。

2. accept_ra_defrtr

作用

控制是否接受 RA 中的 默认路由信息(即路由器的默认网关)。

取值范围
  • 0:拒绝从 RA 中获取默认路由。
  • 1:接受默认路由(默认值)。
默认值
  • 默认值为 1(允许接受默认路由)。
关键功能
  • 路由表管理:若启用,系统会根据 RA 中的默认路由信息自动添加默认路由到路由表。
  • 依赖 accept_ra:只有当 accept_ra 允许接收 RA(如 accept_ra=12)时,accept_ra_defrtr 才能生效。
典型场景
  • 小米 MIUI 问题修复:MIUI 默认可能禁用此参数,导致无法通过 RA 获取默认路由,需手动设置为 1(如知识库[2][4]所述)。

3. ra_defrtr_metric

作用

设置通过 RA 接收的默认路由的 度量值(Metric),用于控制路由表中该路由的优先级。

取值范围
  • 整数:如 100200 等,默认值为 0
  • 值越小,路由优先级越高。
默认值
  • 默认值为 0(最高优先级)。
关键功能
  • 路由优先级控制
    • 若系统存在多条默认路由(如同时配置 IPv4 和 IPv6),可通过 ra_defrtr_metric 调整 IPv6 路由的优先级。
    • 例如,设置 ra_defrtr_metric=100 会降低该路由的优先级,使其在其他路由不可用时才被使用。
示例配置
# 设置 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

注意事项

  1. 优先级逻辑

    • accept_ra 是基础,若 accept_ra=0,则 accept_ra_defrtrra_defrtr_metric 均无效。
    • ra_defrtr_metric 仅在 accept_ra_defrtr=1 时生效。
  2. 安全风险

    • 在公共网络中,设置 accept_ra=2 可能存在风险(接受所有 RA),需确保网络环境可信。
    • 若仅需地址自动配置,可设置 accept_ra_defrtr=0 并手动配置路由。
  3. 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_raaccept_ra_defrtrra_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_raaccept_ra_defrtrra_defrtr_metric 生效的前提条件。若 accept_ra 设置为 0,设备不接收 RA 消息,那么 accept_ra_defrtrra_defrtr_metric 无论设置为何值都无实际意义,因为设备根本不会收到包含默认路由器信息及度量值的 RA 消息。
  • accept_ra 设置为 1accept_ra_defrtr 设置为 1 时,ra_defrtr_metric 才会发挥作用。设备会根据不同默认路由器的 ra_defrtr_metric 值来选择最优的默认路由器。










accept_raaccept_ra_defrtrra_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_raaccept_ra_defrtr 的关系

    • accept_ra 是总开关,决定是否接收 RA 消息。
    • accept_ra_defrtr 是子开关,仅在 accept_ra 设置为 12 时生效,决定是否接受 RA 消息中的默认路由器信息。
    • 如果 accept_ra 设置为 0accept_ra_defrtr 的设置将无效。
  • ra_defrtr_metric 的作用

    • ra_defrtr_metric 仅在 accept_raaccept_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_raaccept_ra_defrtrra_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_defrtraccept_ra=1控制是否添加默认路由
ra_defrtr_metricaccept_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 生效。


注意事项

  1. 权限需求:修改需 root 权限。
  2. 接口差异:每个网络接口(如 eth0wlan0)需单独配置。
  3. 安全风险:不当配置可能导致网络中断或安全漏洞(如 RA 欺骗攻击)。
  4. IPv6 转发冲突:若启用 IP 转发(net.ipv6.conf.all.forwarding=1),默认会禁用 RA 接受,需显式设置 accept_ra=2

建议通过 sysctl -a | grep accept_ra 查看当前配置。










accept_raaccept_ra_defrtrra_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 时生效。

二、参数间关系与优先级
  1. accept_ra 是基础开关
    • 若 accept_ra=0,接口完全忽略 RA,accept_ra_defrtrra_defrtr_metric 均无效。
    • 若 accept_ra≥1,会接收 RA,并根据 accept_ra_defrtr 决定是否设置默认路由。

  2. accept_ra_defrtr 控制默认路由
    • 即使 accept_ra=1,若 accept_ra_defrtr=0,接口仍接收 RA(如生成地址),但不会自动添加默认路由。

  3. 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 更小)。


四、安全与调试建议
  1. 安全风险
    • RA 可能被恶意伪造(如虚假默认路由)。建议在不可信网络中设置 accept_ra=0 或结合 ip6tables 过滤非法 RA。

  2. 调试工具
    查看路由表

    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
    
  3. 内核版本兼容性
    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_raaccept_ra_defrtrra_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 是全局开关,必须启用后(12),accept_ra_defrtrra_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(优先级较高)。
场景 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 服务器)。
场景 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. 注意事项
  1. 安全考量

    • 在可信网络中(如家庭网络),默认配置(accept_ra=1)是安全的。
    • 在公共或不信任网络中,建议禁用 accept_raaccept_ra_defrtr,防止恶意路由劫持。
  2. 路由优先级

    • ra_defrtr_metric 的值越低,路由的优先级越高。需根据网络架构合理设置。
  3. 依赖关系

    • accept_ra_defrtrra_defrtr_metric 仅在 accept_ra=12 时生效。
  4. 兼容性

    • 部分网络环境可能强制要求禁用自动路由添加,需手动配置路由。

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 的自动配置行为,适用于从普通终端到复杂网络环境的多种场景。在安全或路由策略严格的环境中,建议禁用自动配置并手动管理网络参数。



















Linux的: /proc/sys/net/ipv6/conf/ 笔记250404



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kfepiza

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值