Linux的: /proc/sys/net/ipv6/conf/
/proc/sys/net/ipv6/conf/
是 Linux 系统中用于 动态配置 IPv6 网络接口参数 的核心目录。它允许针对不同网络接口(如 eth0
、wlan0
)或全局设置(all
)调整 IPv6 协议栈的行为。
它通过虚拟文件系统(procfs
)(不在磁盘在内存), 动态暴露内核参数,允许用户或管理员实时调整 IPv6 的网络行为。通过 /proc/sys/net/ipv6/conf/
,管理员可精细控制 IPv6 网络的方方面面,从地址分配到安全策略,成为网络调优和故障排查的利器。
🌟 核心功能
- 接口级精细控制
- 每个接口(如
eth0
)的配置独立管理,支持差异化策略。
- 每个接口(如
- 动态生效
- 修改参数后立即生效,无需重启服务或系统。
- 临时与持久化配置
- 直接修改
/proc
下的文件为临时生效,持久化需通过sysctl
配置文件。
- 直接修改
以下是详细的讲解:
📂 目录结构
/proc/sys/net/ipv6/conf/
├── all/ # 全局配置(覆盖所有接口)
├── default/ # 新增接口的默认配置模板
├── eth0/ # 针对 eth0 的配置
├── lo/ # 环回接口配置
└── wlan0/ # 针对 wlan0 的配置
子目录说明
子目录 | 作用 |
---|---|
all/ | 修改此目录下的参数会应用到所有网络接口(优先级高于单个接口的配置)。 |
default/ | 定义新创建的网络接口的默认参数(例如新增的虚拟接口或动态加载的网卡)。 |
<接口名>/ | 如 eth0/ 、wlan0/ ,用于配置特定接口的独立参数。 |
🔧 常见参数分类
基础配置
参数文件 | 功能与取值 |
---|---|
disable_ipv6 | - 0 :启用 IPv6(默认)- 1 :禁用 IPv6(接口不再处理 IPv6 流量)。 |
accept_ra | 控制是否接受路由器广播(Router Advertisements, RA): - 0 :拒绝 RA(禁用 SLAAC 自动配置)- 1 :接受 RA(默认)- 2 :接受 RA 但不设置默认路由。 |
accept_ra_defrtr | 在接受路由器广播(Router Advertisements, RA)(accept_ra=1 )后:是否将RA中的路由信息用于默认路由 - 0 :拒绝 RA 中的默认路由(需手动配置路由)。- 1 :接受 RA 中的默认路由(默认值,自动配置路由)。 |
ra_defrtr_metric | 设置通过 RA 添加的默认路由的优先级(metric)。需accept_ra_defrtr=1 是否将RA中的路由信息用于默认路由 默认 1024 ,可调整以优化路由选择。 |
autoconf | - 1 :启用 SLAAC(需 accept_ra=1 )- 0 :禁用自动配置(需手动配置 IPv6 地址)。 |
forwarding | 启用 IPv6 数据包转发(路由器模式,默认 0 ,禁用)。 |
hop_limit | 默认跳数限制(类似 IPv4 的 TTL,默认 64 )。 |
mtu | 接口的 MTU 值(如 1500 )。 |
use_tempaddr | 是否生成临时隐私地址:0 =禁用,1 =启用,但优先使用稳定地址, 2 =优先使用临时地址 |
查看
sudo sysctl -a | grep -E 'disable_ipv6|autoconf|accept_ra|accept_ra_defrtr|ra_defrtr_metric|forwarding|hop_limit|mtu|use_tempaddr'
配置分类
1. 地址自动配置
参数名 | 作用 |
---|---|
autoconf | 是否通过 SLAAC 自动生成 IPv6 地址(默认 1 ,启用)。 |
use_tempaddr | 是否生成临时隐私地址:0 =禁用,1 =启用,但优先使用稳定地址,2 =优先使用临时地址。 |
2. 路由通告(RA)
参数名 | 作用 |
---|---|
accept_ra | 是否接受路由通告(RA)消息(默认 1 ,启用)。 |
accept_ra_defrtr | 是否通过 RA 设置默认路由(默认 1 ,启用)。 |
accept_ra_rt_info_max_plen | 接受 RA 路由信息的最大前缀长度。 |
ra_defrtr_metric | 设置通过 RA 添加的默认路由的优先级(metric)。需accept_ra_defrtr=1 是否将RA中的路由信息用于默认路由 默认 1024 ,可调整以优化路由选择。 |
3. 邻居发现(NDP)
参数名 | 作用 |
---|---|
ndisc_notify | 是否发送邻居发现通知(默认 1 ,启用)。 |
proxy_ndp | 是否启用 NDP 代理(默认 0 ,禁用)。 |
4. 安全与策略
参数名 | 作用 |
---|---|
disable_ipv6 | 完全禁用接口的 IPv6 协议栈(默认 0 ,启用)。 |
disable_policy | 禁用 IPv6 安全策略(如 IPsec,默认 0 ,启用策略)。 |
suppress_frag_ndisc | 抑制分片的邻居发现报文(防攻击,默认 1 ,启用)。 |
5. 转发与路由
参数名 | 作用 |
---|---|
forwarding | 启用 IPv6 数据包转发(路由器模式,默认 0 ,禁用)。 |
hop_limit | 默认跳数限制(类似 IPv4 的 TTL,默认 64 )。 |
mtu | 接口的 MTU 值(如 1500 )。 |
sudo sysctl -a | grep -E 'forwarding|hop_limit|mtu'
6. 启用临时地址
参数 | 功能 | 默认值 | 依赖关系 |
---|---|---|---|
use_tempaddr | 控制是否生成临时 IPv6 地址,并决定其优先级: • 0 :禁用• 1 :启用,但优先使用稳定地址• 2 :启用且优先使用临时地址 | 0 (禁用) | 需接口启用 SLAAC(autoconf=1 ) |
temp_valid_lft | 定义临时地址的 总有效期(从生成到失效的时间) | 604800 秒(7 天) | 需 use_tempaddr≥1 生效 |
temp_prefered_lft | 定义临时地址的 优先使用期(在此期间地址为首选,之后生成新地址) | 86400 秒(1 天) | 需 use_tempaddr≥1 生效 |
sudo sysctl -a | grep -E 'use_tempaddr|temp_valid_lft|temp_prefered_lft'
🛠️ 配置方法,操作示例 及 🌐 典型场景
** 临时修改的写法用例**
直接向 /proc
写入值(重启失效):
禁用 eth0 的 IPv6
# 禁用 eth0 的 IPv6
echo 1 | sudo tee /proc/sys/net/ipv6/conf/eth0/disable_ipv6
或
sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=1
为所有接口启用隐私扩展
# 为所有接口启用隐私扩展
echo 2 | sudo tee /proc/sys/net/ipv6/conf/all/use_tempaddr
或
sudo sysctl -w net.ipv6.conf.all.use_tempaddr=2
** 永久生效, 持久化配置,的写法用例**
# 永久生效:编辑 /etc/sysctl.conf 或 /etc/sysctl.d/*.conf
echo "net.ipv6.conf.eth0.accept_ra = 0" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p # 重新加载配置
# 将配置写入文件(如 /etc/sysctl.d/99-ipv6.conf)
echo "net.ipv6.conf.eth0.forwarding = 0" >> /etc/sysctl.d/99-ipv6.conf
echo "net.ipv6.conf.eth0.autoconf = 1" >> /etc/sysctl.d/99-ipv6.conf# 加载配置
sudo sysctl -p /etc/sysctl.d/99-ipv6.conf
查看接口的配置
# 查看 eth0 的 IPv6 转发状态
cat /proc/sys/net/ipv6/conf/eth0/forwarding
sysctl net.ipv6.conf.eth0.forwarding# 查看全局的 RA 接受状态
cat /proc/sys/net/ipv6/conf/all/accept_ra
sysctl net.ipv6.conf.all.accept_ra# 查看default的 RA 接受状态
cat /proc/sys/net/ipv6/conf/default/accept_ra
sysctl net.ipv6.conf.default.accept_ra
禁用某个接口的 IPv6
# 临时禁用 eth1 的 IPv6
echo 1 > /proc/sys/net/ipv6/conf/eth1/disable_ipv6# 临时禁用 eth0 的 IPv6 方法2
echo 1 | sudo tee /proc/sys/net/ipv6/conf/eth0/disable_ipv6# 临时禁用 eth0 的 IPv6 方法3
sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6# 永久禁用(需重启或 sysctl -p)
echo "net.ipv6.conf.eth0.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
sysctl -p# 永久禁用 (需重启或 sysctl -p)写法2
echo "net.ipv6.conf.eth1.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p/etc/sysctl.d/99-ipv6.conf
# 永久禁用 (需重启或 sysctl -p)推荐写到 /etc/sysctl.d/99-ipv6.conf
echo "net.ipv6.conf.eth1.disable_ipv6 = 1" >> /etc/sysctl.d/99-ipv6.conf
sysctl -p
配置 IPv6 路由器
# 启用 eth0 的 IPv6 转发
echo 1 > /proc/sys/net/ipv6/conf/eth0/forwarding# 允许接收 RA(需手动覆盖默认行为)
echo 2 > /proc/sys/net/ipv6/conf/eth0/accept_ra
# 启用 IPv6 转发
echo 1 | sudo tee /proc/sys/net/ipv6/conf/all/forwarding# 允许接受 RA(某些路由场景需要)
echo 1 | sudo tee /proc/sys/net/ipv6/conf/eth0/accept_ra
使用临时地址,优化隐私地址
# 优先使用临时地址
echo 2 > /proc/sys/net/ipv6/conf/eth0/use_tempaddr# 永久设置临时地址生命周期
echo "net.ipv6.conf.eth0.temp_valid_lft = 604800" >> /etc/sysctl.conf
sysctl -p
⚠️ 注意事项
-
参数优先级
- 接口级配置(如
eth0
)优先级高于全局配置(all
)。 default/
目录中的配置仅对新创建的网络接口生效。
- 接口级配置(如
-
优先级规则:
all/
的配置会覆盖单个接口的设置。default/
仅影响新创建的接口。
-
安全建议:
- 禁用
accept_redirects
(可能引发路由欺骗)。 - 限制
accept_ra
仅在需要自动配置时开启。
- 禁用
-
网络重启影响:
- 修改
/proc
的参数会立即生效,但重启网络服务可能重置某些配置。
- 修改
-
内核兼容性:
- 不同内核版本可能支持不同的参数,建议通过
man proc
或内核文档查询。
- 不同内核版本可能支持不同的参数,建议通过
-
与
sysctl
的关系/proc/sys/net/ipv6/conf/
中的参数名需转换为sysctl
格式:# /proc/sys/net/ipv6/conf/eth0/forwarding → sysctl net.ipv6.conf.eth0.forwarding
2️⃣ sysctl -a | grep ipv6
可以列出所有 IPv6 相关内核参数
sudo sysctl -a | grep ipv6
sudo sysctl -a | grep accept_ra
sudo sysctl -a | grep -E 'accept_ra|accept_ra_defrtr|ra_defrtr_metric'
sudo sysctl -a | grep -E 'accept_ra|accept_ra_defrtr|ra_defrtr_metric|autoconf|forwarding|hop_limit|mtu'
sudo sysctl -a | grep -E 'accept_ra|accept_ra_defrtr|ra_defrtr_metric|autoconf|forwarding|hop_limit|mtu|use_tempaddr'
sudo sysctl -a | grep -E 'accept_ra|accept_ra_defrtr|ra_defrtr_metric|autoconf|forwarding|hop_limit|mtu'
sudo sysctl -a | grep -E 'disable_ipv6|autoconf|accept_ra|accept_ra_defrtr|ra_defrtr_metric|forwarding|hop_limit|mtu|use_tempaddr'
sudo sysctl -a | grep -E 'disable_ipv6|autoconf|accept_ra|accept_ra_defrtr|ra_defrtr_metric|forwarding|hop_limit|mtu|use_tempaddr|temp_valid_lft|temp_prefered_lft'
2️⃣ /proc/sys/net/ipv6/conf/all/accept_ra
和 /proc/sys/net/ipv6/conf/default/accept_ra
和 /proc/sys/net/ipv6/conf/ens33/accept_ra
-
/proc/sys/net/ipv6/conf/all/accept_ra
-
/proc/sys/net/ipv6/conf/default/accept_ra
-
/proc/sys/net/ipv6/conf/ens33/accept_ra
以下是三个 IPv6 相关参数的区别与作用的详细对比:
关于 /proc/sys/net/ipv6/conf/
中不同位置 accept_ra
参数的详细讲解
1. accept_ra
参数的作用
accept_ra
(Accept Router Advertisements)用于控制网络接口是否接受 IPv6 路由器通告(Router Advertisement, RA)。路由器通告包含网络配置信息(如 IPv6 前缀、DNS 服务器地址等),接受 RA 可使设备自动配置 IPv6 地址和路由。
- 取值含义:
0
:不接受路由器通告。1
:当 IPv6 转发(forwarding)禁用时接受路由器通告。2
(部分内核支持):无论转发是否启用,均接受路由器通告。
2. 不同位置 accept_ra
的区别与配置方法
(1)/proc/sys/net/ipv6/conf/all/accept_ra
- 作用:全局配置,影响所有网络接口。
- 配置示例:
# 临时启用(重启后失效) echo "1" > /proc/sys/net/ipv6/conf/all/accept_ra# 永久生效(需重启或执行 sysctl -p) echo "net.ipv6.conf.all.accept_ra=1" >> /etc/sysctl.conf sysctl -p
(2)/proc/sys/net/ipv6/conf/default/accept_ra
- 作用:默认配置模板,新创建的网络接口自动继承此设置。
- 配置示例:
# 临时设置(重启后失效) echo "1" > /proc/sys/net/ipv6/conf/default/accept_ra# 永久设置(需重启或执行 sysctl -p) echo "net.ipv6.conf.default.accept_ra=1" >> /etc/sysctl.conf sysctl -p
(3)/proc/sys/net/ipv6/conf/ens33/accept_ra
- 作用:针对特定接口(如
ens33
)的个性化配置,覆盖全局和默认设置。 - 配置示例:
# 临时设置(重启后失效) echo "1" > /proc/sys/net/ipv6/conf/ens33/accept_ra# 永久设置(需重启或执行 sysctl -p) echo "net.ipv6.conf.ens33.accept_ra=1" >> /etc/sysctl.conf sysctl -p
3. 配置优先级
- 特定接口 >
all
>default
。
例如,若ens33
接口单独设置了accept_ra=1
,则优先使用该值,忽略all
和default
的配置。
有道dpsk说: 特定接口 > all > default。
元宝dpsk说: 接口级参数 > all/ > default/
参数 | eth0/ 设置 | all/ 设置 | default/ 设置 | 实际生效值 |
---|---|---|---|---|
disable_ipv6 | 0 | 1 | 1 | 0(接口级优先) |
accept_ra | 未设置 | 0 | 1 | 0(all/ 覆盖 default/ ) |
use_tempaddr | 未设置 | 2 | 1 | 2(all/ 生效) |
元宝Hunyuan说: 特定接口** > all
> **default
配置层级 | 作用范围 | 覆盖规则 |
---|---|---|
接口特定配置 | 单个网络接口(如 eth0/ ) | 最高优先级,仅影响该接口 |
全局配置 (all/ ) | 所有网络接口 | 覆盖所有接口,但低于接口特定配置 |
默认配置 (default/ ) | 新创建的接口 | 仅影响新增接口,不影响已有接口 |
豆包说: 配置参数的优先级为:具体网络接口目录的配置 > all 目录的配置 > default 目录的配置。也就是说,如果在具体网络接口目录下对某个参数进行了设置,该设置会覆盖 all 和 default 目录中的相同参数设置。
Kimi说: 优先级:接口特定设置的优先级最高,全局设置次之,默认设置优先级最低。
C知道dpsk说: 优先级规则:具体接口的配置 > all > default。
dpsk说all
优先级最高
参数路径 | 作用范围 | 优先级 | 持久性影响 | 典型用途 |
---|---|---|---|---|
/proc/sys/net/ipv6/conf/all/accept_ra | 所有接口(包括现有接口和未来新接口) | 最高 | 修改后立即影响所有接口 | 全局强制设置(如安全策略要求所有接口禁用 RA)。 |
/proc/sys/net/ipv6/conf/default/accept_ra | 新创建的接口(已存在的接口不受影响) | 最低 | 仅对新接口生效 | 定义新接口的默认行为(如新虚拟接口默认不自动配置地址)。 |
/proc/sys/net/ipv6/conf/ens33/accept_ra | 仅 ens33 接口(特定物理/虚拟接口) | 中等 | 仅影响该接口 | 针对单个接口的精细控制(如允许 ens33 接受 RA,但其他接口拒绝)。 |
文心X1说: all/
> interfaceName/
> default/
目录 | 作用范围 | 优先级 | 典型用途 |
---|---|---|---|
all/ | 覆盖所有接口(包括已存在和新创建的) | 最高 | 强制执行全局策略(如禁用所有接口的路由器通告) |
default/ | 仅影响新创建的接口 | 中等 | 设置新建接口的默认配置(如默认拒绝路由器通告) |
interfaceName/ | 仅控制特定接口(如eth0) | 最低 | 对特定接口进行个性化配置(如允许eth0接受路由器通告) |
文心4.5说: 最高优先级:具体网络接口配置(interfaceName)。中等优先级:默认配置(default),适用于未单独配置的接口。最低优先级:全局配置(all),通常用于全局性设置,但可能被具体接口设置覆盖。
文心dpsk说: 具体接口配置 > all 全局配置 > default 默认配置
debian10 下亲测 具体接口名的 优先级大于 all
4. 应用场景
- 全局禁用 RA:在
/proc/sys/net/ipv6/conf/all/accept_ra
设为0
,禁止所有接口接受 RA,适用于需要静态配置 IPv6 的环境。 - 接口级控制:为特定接口(如
ens33
)启用 RA,其他接口保持默认,适用于多接口设备需差异化配置的场景。 - 新接口默认配置:修改
/proc/sys/net/ipv6/conf/default/accept_ra
,确保新创建的接口自动接受 RA,简化网络管理。
5. 注意事项
- 内核版本:部分旧内核可能不支持
accept_ra=2
,需确认内核文档或升级内核。 - 持久化配置:修改
/etc/sysctl.conf
后执行sysctl -p
,确保重启后配置生效。 - 依赖关系:
accept_ra
与autoconf
(自动配置 IPv6 地址)参数通常配合使用,需根据需求同步调整。
6. 故障排查
-
检查 RA 接受状态:
cat /proc/sys/net/ipv6/conf/all/accept_ra # 全局状态 cat /proc/sys/net/ipv6/conf/default/accept_ra # 默认模板 cat /proc/sys/net/ipv6/conf/ens33/accept_ra # 特定接口状态
sudo sysctl -a | grep ipv6
sudo sysctl -a | grep -E 'accept_ra|accept_ra_defrtr|ra_defrtr_metric'
-
验证 IPv6 配置:
ip -6 addr show dev ens33 # 查看接口 IPv6 地址 ip -6 route show # 检查默认路由
🧠🌐 Linux的/proc/sys/net/ipv6/conf/(all,default,interfaceName具体网络接口名称)/ 笔记250405
2️⃣ SLAAC 是什么?
SLAAC(Stateless Address Autoconfiguration,无状态地址自动配置)是 IPv6 协议的核心特性之一,它允许设备无需依赖 DHCP 服务器(如 IPv4 中的 DHCP),直接通过本地网络的路由器通告(Router Advertisement, RA)自动生成全球唯一的 IPv6 地址。
🔍 核心原理
-
路由器通告(RA)
网络中的 IPv6 路由器会周期性广播 RA 消息,包含以下关键信息:- 网络前缀(如
2001:db8::/64
) - 默认路由(网关)
- 地址有效期(生存时间)
- 是否支持 DHCPv6(补充配置其他参数,如 DNS)。
- 网络前缀(如
-
地址生成
设备收到 RA 后,结合以下两部分生成 IPv6 地址:- 网络前缀(来自 RA)
- 接口标识符(通常基于 MAC 地址或随机生成)。
示例:
网络前缀: 2001:db8::/64 MAC地址: 00:1a:2b:3c:4d:5e 接口标识符: 021a:2bff:fe3c:4d5e (通过 EUI-64 算法生成) IPv6地址: 2001:db8::021a:2bff:fe3c:4d5e
✅ 特点
特性 | 说明 |
---|---|
无状态 | 无需服务器记录地址分配状态,降低网络复杂度。 |
即插即用 | 设备接入网络后自动完成地址配置。 |
隐私保护 | 支持生成临时随机地址(如 fd12:3456::1a2b:3c4d ),防止设备追踪。 |
依赖 RA 消息 | 需路由器启用 RA 广播(对应 /proc/sys/net/ipv6/conf/eth0/accept_ra=1 )。 |
🆚 与 DHCPv6 的区别
SLAAC | DHCPv6 | |
---|---|---|
地址分配 | 设备自主生成 | 服务器分配 |
状态管理 | 无状态(无需服务器) | 有状态(服务器记录) |
配置内容 | 仅地址 + 网关 + 前缀 | 地址 + DNS + 其他参数 |
适用场景 | 简单网络(家庭/小型办公) | 需集中管理(企业/数据中心) |
🔧 相关配置(Linux)
在 /proc/sys/net/ipv6/conf/
中,以下参数控制 SLAAC 行为:
accept_ra
- 设置为
1
时,允许设备接收 RA 消息(启用 SLAAC 的前提)。
- 设置为
autoconf
- 设置为
1
时,允许设备根据 RA 生成地址(需同时启用accept_ra=1
)。
- 设置为
use_tempaddr
- 控制是否生成临时隐私地址(如
2
表示优先使用临时地址)。
- 控制是否生成临时隐私地址(如
示例命令:
# 查看 eth0 是否启用 SLAAC
sysctl net.ipv6.conf.eth0.autoconf# 临时禁用 SLAAC
echo 0 > /proc/sys/net/ipv6/conf/eth0/autoconf
🌐 实际应用
- 家庭网络
路由器广播 RA,手机/电脑自动获取 IPv6 地址(如2408:8207:1234:5678::1a2b
)。 - 服务器网络
可能禁用 SLAAC(autoconf=0
),手动配置静态 IPv6 地址以保证稳定性。 - 隐私保护
启用use_tempaddr=2
,避免设备 IPv6 地址暴露 MAC 信息。
💡 扩展知识
- EUI-64 算法:将 48 位 MAC 地址转换为 64 位接口标识符(插入
FFFE
并反转 U/L 位)。 - 临时地址:格式为
随机数::临时后缀
,周期性变化(可通过ip -6 addr show
查看)。 - DHCPv6:DHCPv6(Dynamic Host Configuration Protocol for IPv6)是 IPv6 网络中用于 动态分配地址和配置网络参数 的协议,相较于 IPv4 的 DHCP,它在设计上更适应 IPv6 的特性(如无状态地址自动配置 SLAAC)。
- DHCPv6 笔记250405
- 无状态版的DHCPv6是不是SLAAC? 笔记250405
🧠🌐 SLAAC 是什么? 笔记250404
2️⃣ SLAAC 与 DHCPv6
SLAAC(无状态地址自动配置)和 DHCPv6 是 IPv6 网络中两种主要的地址配置机制,分别适用于不同的场景和需求。以下是它们的核心区别、协作方式及实际应用指南:
📜 核心区别对比
特性 | SLAAC | DHCPv6(有状态) | DHCPv6(无状态) |
---|---|---|---|
地址生成方式 | 客户端基于 RA 前缀自行生成地址 | 服务器分配完整地址 | 地址由 SLAAC 生成,服务器提供参数 |
依赖服务器 | 无需服务器(仅需路由器 RA) | 必须部署 DHCPv6 服务器 | 需要 DHCPv6 服务器 |
配置参数 | 地址 + 默认路由(通过 RA) | 地址 + DNS/NTP/域名等完整配置 | DNS/NTP/域名等(不分配地址) |
管理复杂度 | 低 | 高 | 中 |
适用场景 | 简单网络、物联网设备 | 企业网络、需集中管理地址的环境 | 需额外参数但无需地址管理的环境 |
🌐 协作机制
IPv6 网络可结合 SLAAC 和 DHCPv6 实现灵活配置,具体通过 RA(路由通告)的标志位 控制:
- M标志(Managed Address Configuration):
M=1
:客户端必须使用 有状态 DHCPv6 获取地址。M=0
:客户端使用 SLAAC 或无状态 DHCPv6。
- O标志(Other Configuration):
O=1
:客户端通过 无状态 DHCPv6 获取 DNS 等参数。O=0
:仅使用 SLAAC 配置。
🛠️ 配置示例
1. 纯 SLAAC 网络
- 路由器配置(Linux,使用
radvd
):# /etc/radvd.conf interface eth0 {AdvSendAdvert on;prefix 2001:db8:abcd::/64 {AdvOnLink on;AdvAutonomous on; # 启用 SLAAC}; };
- 客户端行为:
根据 RA 前缀生成地址,不获取 DNS 等参数。
2. SLAAC + 无状态 DHCPv6
- 路由器 RA 配置:
interface eth0 {AdvSendAdvert on;AdvManagedFlag off; # M=0AdvOtherConfigFlag on; # O=1prefix 2001:db8:abcd::/64 {AdvAutonomous on;}; };
- DHCPv6 服务器配置(ISC DHCPv6):
# /etc/dhcp/dhcpd6.conf option dhcp6.name-servers 2001:db8::53; option dhcp6.domain-search "example.com";
- 客户端行为:
通过 SLAAC 生成地址,通过 DHCPv6 获取 DNS。
3. 有状态 DHCPv6
- 路由器 RA 配置:
interface eth0 {AdvSendAdvert on;AdvManagedFlag on; # M=1AdvOtherConfigFlag off; };
- DHCPv6 服务器配置:
subnet6 2001:db8:abcd::/64 {range6 2001:db8:abcd::100 2001:db8:abcd::200;option dhcp6.name-servers 2001:db8::53; };
- 客户端行为:
完全依赖 DHCPv6 获取地址和参数。
🔍 协议选择指南
1. 何时使用 SLAAC?
- 场景:家庭网络、物联网设备、临时网络(如会议 Wi-Fi)。
- 优势:无需服务器,部署简单,适合设备自主生成地址。
2. 何时使用无状态 DHCPv6?
- 场景:需要分发 DNS、NTP 等参数,但地址管理无严格要求。
- 示例:学校网络、咖啡馆 Wi-Fi(用户设备自行生成地址,但需统一 DNS)。
3. 何时使用有状态 DHCPv6?
- 场景:企业网络、数据中心、需精确控制地址分配的环境。
- 示例:虚拟机集群、需审计 IP 使用记录的网络。
⚠️ 安全与优化
1. SLAAC 安全风险
- RA 欺骗攻击:伪造路由器通告错误前缀。
防护:部署 RA Guard(交换机配置过滤非法 RA)。
2. DHCPv6 安全风险
- 伪造服务器攻击:恶意 DHCPv6 服务器分配错误参数。
防护:启用 DHCPv6 Snooping(交换机记录合法服务器)。
3. 隐私优化
- 临时地址:在 SLAAC 中启用
use_tempaddr=2
,避免 EUI-64 地址暴露 MAC 地址。sysctl -w net.ipv6.conf.eth0.use_tempaddr=2
📊 协议工作流程对比
步骤 | SLAAC | 有状态 DHCPv6 |
---|---|---|
1. 地址/参数来源 | 客户端自行生成地址(基于 RA 前缀) | 服务器分配地址和参数 |
2. 服务器依赖 | 无需服务器 | 必须部署 DHCPv6 服务器 |
3. 配置灵活性 | 仅地址 + 路由 | 地址 + 路由 + DNS/NTP/域名等 |
4. 适用规模 | 小到中型网络 | 中到大型企业网络 |
🧠🌐 SLAAC 与 DHCPv6 笔记250405
2️⃣ accept_ra
accept_ra
是 Linux 系统中控制 IPv6 路由通告(Router Advertisement, RA)接收行为 的核心参数,位于 /proc/sys/net/ipv6/conf/<接口名>/
目录下。它直接影响设备是否通过 SLAAC(无状态地址自动配置)获取 IPv6 地址和网络信息。
📜 参数取值及含义
值 | 行为描述 |
---|---|
0 | 禁用 RA 接收:不处理任何路由通告,需手动配置 IPv6 地址和网关。 |
1 | 启用 RA 接收(默认):根据 RA 自动配置地址、网关和网络参数。 |
2 | 接受 RA 但忽略跃点数:接收 RA 但不更新默认路由的优先级(特殊场景)。 |
某些系统可能支持扩展值(如 3
),用于兼容性场景(需参考内核文档)。
🔧 配置方法
临时修改(重启失效)
# 禁用 eth0 的 RA 接收
echo 0 > /proc/sys/net/ipv6/conf/eth0/accept_ra# 或使用 sysctl
sysctl -w net.ipv6.conf.eth0.accept_ra=0
永久生效
修改配置文件(如 /etc/sysctl.d/99-ipv6.conf
):
# 全局禁用所有接口的 RA 接收
net.ipv6.conf.all.accept_ra = 0# 仅对 eth0 生效
net.ipv6.conf.eth0.accept_ra = 1
执行 sysctl -p
加载配置。
🌐 典型场景
1. 服务器环境
- 禁用 RA(
accept_ra=0
):防止自动分配地址,确保手动配置静态 IPv6。 - 示例:
sysctl net.ipv6.conf.eth0.accept_ra=0 sysctl net.ipv6.conf.eth0.autoconf=0 # 同时关闭自动配置
2. 客户端设备
- 启用 RA(
accept_ra=1
):自动获取地址(如家庭网络中的手机/电脑)。 - 依赖条件:
- 路由器需发送 RA(通过
radvd
或dnsmasq
等工具)。 autoconf=1
(默认启用)。
- 路由器需发送 RA(通过
3. 网络调试
- 临时关闭 RA:排查地址冲突或异常自动配置问题。
- 命令:
ip -6 addr flush dev eth0 # 清空现有地址 echo 0 > /proc/sys/net/ipv6/conf/eth0/accept_ra
⚠️ 注意事项
-
与
forwarding
的冲突
若启用 IPv6 转发(net.ipv6.conf.all.forwarding=1
),内核默认会自动禁用 RA 接收(accept_ra=0
),需手动覆盖此行为。 -
接口优先级
- 具体接口(如
eth0
)的配置优先级高于all
和default
。 - 示例:
net.ipv6.conf.all.accept_ra=0 # 全局禁用 net.ipv6.conf.eth0.accept_ra=1 # eth0 例外启用
- 具体接口(如
-
RA 内容依赖
RA 中需包含A
标志(Autonomous Address Configuration
)才会触发 SLAAC 地址生成。可通过tcpdump
验证:tcpdump -i eth0 -vn ip6 and icmp6 and "router advertisement"
🔍 扩展知识
- RA 消息内容:
包含前缀、MTU、默认路由、DNS 服务器(RDNSS)等(需路由器支持 ND 扩展)。 - 隐私地址:
若启用use_tempaddr=2
,即使通过 RA 获取地址,也会生成临时随机后缀。 - DHCPv6 共存:
RA 中的M
标志(Managed)和O
标志(Other)决定是否使用 DHCPv6 补充配置。
通过合理配置 accept_ra
,可以灵活平衡网络自动化与可控性,适应不同场景需求。
🌐 accept_ra详解 笔记 250404
2️⃣ autoconf
autoconf
是 Linux 系统中控制 IPv6 无状态地址自动配置(SLAAC) 的关键参数,位于 /proc/sys/net/ipv6/conf/<接口>/
目录下。它决定接口是否根据接收到的 路由通告(Router Advertisement, RA) 自动生成 IPv6 地址。
📜 参数取值及含义
值 | 行为描述 |
---|---|
0 | 禁用自动配置:不通过 RA 生成 IPv6 地址(需手动或 DHCPv6 配置)。 |
1 | 启用自动配置(默认):根据 RA 中的前缀和接口标识符生成 IPv6 地址。 |
🔧 配置方法
临时修改(重启失效)
# 禁用 eth0 的自动配置
echo 0 > /proc/sys/net/ipv6/conf/eth0/autoconf# 或使用 sysctl
sysctl -w net.ipv6.conf.eth0.autoconf=0
永久生效
在配置文件(如 /etc/sysctl.d/99-ipv6.conf
)中添加:
# 全局禁用所有接口的自动配置
net.ipv6.conf.all.autoconf = 0# 仅对 eth0 生效
net.ipv6.conf.eth0.autoconf = 1
执行 sysctl -p
加载配置。
🌐 核心机制
-
依赖 RA 消息
autoconf=1
需配合accept_ra=1
(允许接收 RA)。- RA 中必须包含
A
标志(Autonomous Address Configuration)。
-
地址生成规则
- 组合 RA 提供的 网络前缀(如
2001:db8::/64
)和 接口标识符(基于 MAC 地址或随机生成)。 - 若启用
use_tempaddr=2
,优先生成临时隐私地址(如2001:db8::d3ad:b33f
)。
- 组合 RA 提供的 网络前缀(如
-
典型地址类型
# 永久地址(基于 EUI-64) 2001:db8::1a2b:3cff:fe4d:5e6f# 临时隐私地址(随机后缀) 2001:db8::d3ad:b33f
⚠️ 注意事项
-
与
accept_ra
的关联- 若
accept_ra=0
,即使autoconf=1
也不会触发自动配置。 - 调试命令:
# 检查是否收到 RA tcpdump -i eth0 -vn ip6 and icmp6 and "router advertisement"
- 若
-
与
forwarding
的冲突
启用 IPv6 转发(net.ipv6.conf.all.forwarding=1
)时,内核默认禁用autoconf
,需手动覆盖:sysctl -w net.ipv6.conf.eth0.autoconf=1
-
接口优先级
- 具体接口(如
eth0
)的配置优先级高于all
和default
。 - 示例:
net.ipv6.conf.all.autoconf=0 # 全局禁用 net.ipv6.conf.eth0.autoconf=1 # eth0 例外启用
- 具体接口(如
🛠️ 典型场景
1. 服务器静态地址配置
# 禁用自动配置,手动设置 IPv6
sysctl net.ipv6.conf.eth0.autoconf=0
ip addr add 2001:db8::1/64 dev eth0
2. 客户端自动获取地址
# 启用自动配置(默认)
sysctl net.ipv6.conf.eth0.autoconf=1
ip -6 addr show dev eth0 # 查看生成的地址
3. 隐私保护
# 启用临时地址(需内核支持)
sysctl net.ipv6.conf.eth0.use_tempaddr=2
🔍 验证工具
- 查看地址:
ip -6 addr show dev eth0
- 检查内核参数:
sysctl net.ipv6.conf.eth0.autoconf
- 抓包分析 RA:
tcpdump -i eth0 -vvv icmp6
🌐 autoconf 笔记250404
2️⃣ forwarding
forwarding
是 Linux 系统中控制 IPv6 数据包转发功能 的核心参数,位于 /proc/sys/net/ipv6/conf/<接口>/
目录下。它决定了系统是否充当路由器角色,将接收到的 IPv6 数据包转发到其他网络接口。
是 Linux 系统中控制网络接口是否启用 路由转发功能 的参数。
决定内核是否允许本机作为路由器,转发不同接口之间的数据包。
启用此参数后,系统可充当路由器,在不同接口间转发 IPv6 流量。
forwarding 参数决定了系统是否会对收到的 IPv6 数据包进行转发操作。当系统充当路由器或者网关的角色时,就需要开启数据包转发功能,使得不同网络之间的设备能够相互通信;若系统只是普通的主机,通常不需要开启此功能。
forwarding 参数决定了设备是否将收到的 IPv6 数据包转发到其他网络接口。启用转发功能后,设备可以作为路由器,将数据包从一个接口转发到另一个接口。
forwarding 参数用于启用或禁用 IP 数据包的转发功能。当启用时,设备可以作为路由器,将接收到的数据包从一个接口转发到另一个接口。
forwarding 是 Linux 系统中控制是否允许设备在不同网络接口之间转发 IP 数据包的内核参数。
若启用(forwarding=1),设备可作为路由器,在不同接口间转发流量。
若禁用(forwarding=0),设备仅处理目标为本机的流量(默认行为)。
控制是否允许系统作为路由器转发 IPv6 数据包。
0(默认):禁用转发,系统仅处理本机流量(主机模式)。
1:启用转发,允许在不同网络接口间转发数据包(路由器模式)。
forwarding 的作用: 启用或禁用 IPv6 转发:
当 forwarding 启用(值为 1)时,系统可以作为路由器,转发来自不同网络接口的 IPv6 数据包。
当禁用(值为 0)时,系统仅处理本机的网络流量,不会转发数据包到其他网络。
与 IPv4 的区别:
IPv4 的转发控制在 /proc/sys/net/ipv4/ip_forward。
IPv6 的转发控制在 /proc/sys/net/ipv6/conf/all/forwarding(全局设置)。
📜 参数取值及含义
值 | 行为描述 |
---|---|
0 | 禁用转发(默认):系统作为终端主机,仅处理目标为本机的数据包。 |
1 | 启用转发:系统作为路由器,转发目标非本机的 IPv6 数据包。 |
IPv6 是 forwarding
; IPv4 是 ip_forward
与 IPv4 的区别:
- IPv4 的转发控制在
/proc/sys/net/ipv4/ip_forward
。 - IPv6 的转发控制在
/proc/sys/net/ipv6/conf/all/forwarding
(全局设置)。
** 检查 IPv4 转发状态**
cat /proc/sys/net/ipv4/ip_forward # 输出 1 表示启用
sysctl net.ipv4.ip_forward # 输出 net.ipv4.ip_forward = 1
** 检查 IPv6 转发状态**
cat /proc/sys/net/ipv6/conf/all/forwarding # 输出 1 表示启用
sysctl net.ipv6.conf.all.forwarding # 输出 net.ipv6.conf.all.forwarding = 1
🔧 配置方法
临时修改(重启失效)
# 启用 eth0 的 IPv6 转发
echo 1 > /proc/sys/net/ipv6/conf/eth0/forwarding# 或使用 sysctl 命令
sysctl -w net.ipv6.conf.eth0.forwarding=1
永久生效
修改配置文件(如 /etc/sysctl.d/99-ipv6.conf
):
# 全局启用所有接口的 IPv6 转发
net.ipv6.conf.all.forwarding = 1# 仅对 eth0 生效
net.ipv6.conf.eth0.forwarding = 0
执行 sysctl -p
加载配置。
🌐 典型场景
1. IPv6 路由器部署
# 启用转发并配置防火墙(示例)
sysctl net.ipv6.conf.all.forwarding=1
ip6tables -A FORWARD -i eth0 -o eth1 -j ACCEPT
ip6tables -A FORWARD -i eth1 -o eth0 -j ACCEPT
2. 容器/虚拟化网络
# 为 Docker 虚拟网桥启用转发
sysctl net.ipv6.conf.docker0.forwarding=1
3. 禁用转发提升安全性
# 服务器环境下关闭转发
sysctl net.ipv6.conf.all.forwarding=0
⚠️ 注意事项
-
与 RA 的冲突
启用转发时(forwarding=1
),内核默认会 禁用 RA 接收(accept_ra=0
)。若需同时使用转发和 SLAAC,需手动覆盖:sysctl -w net.ipv6.conf.eth0.accept_ra=2 # 特殊模式允许 RA
-
防火墙配置
启用转发后,需配置ip6tables
允许流量通过:# 允许 NAT 转换(如需) ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-
接口优先级
- 具体接口(如
eth0
)的配置优先级高于all
和default
。 - 示例:
net.ipv6.conf.all.forwarding=0 # 全局禁用 net.ipv6.conf.eth0.forwarding=1 # eth0 例外启用
- 具体接口(如
🔍 验证与调试
-
检查转发状态
sysctl net.ipv6.conf.all.forwarding
-
测试连通性
# 从客户端 ping 另一网络段的 IPv6 地址 ping6 2001:db8:cafe::1
-
抓包分析
tcpdump -i eth0 ip6 -vvv
📊 IPv4 vs IPv6 转发对比
IPv4 | IPv6 | |
---|---|---|
参数路径 | /proc/sys/net/ipv4/conf/*/forwarding | /proc/sys/net/ipv6/conf/*/forwarding |
默认值 | 0 | 0 |
NAT 依赖 | 高(IPv4 地址稀缺) | 低(地址空间充足) |
🌐 forwarding 笔记250404
2️⃣ accept_ra
和 autoconf
和 forwarding
的关系
在 Linux 的 IPv6 网络配置中,accept_ra
、autoconf
和 forwarding
是三个密切相关的核心参数,它们的组合直接影响设备在网络中的角色(主机或路由器)和地址配置行为。以下是它们的关系详解:
📊 核心关系总结
参数 | 作用 | 依赖关系 |
---|---|---|
accept_ra | 控制是否接收路由通告(RA)消息。 | 是 autoconf 生效的前提条件(需 accept_ra=1 )。 |
autoconf | 控制是否根据 RA 自动生成 IPv6 地址(SLAAC)。 | 依赖 accept_ra=1 ,且 RA 中需包含 A 标志。 |
forwarding | 控制是否启用 IPv6 数据包转发(路由器模式)。 | 启用后(=1 ),内核默认禁用 accept_ra (需手动覆盖)。 |
🌐 典型场景分析
1. 普通主机模式(默认)
- 目标:自动获取 IPv6 地址,不转发数据包。
- 配置:
forwarding=0 # 禁用转发 accept_ra=1 # 接收 RA autoconf=1 # 自动配置地址
- 行为:
- 根据 RA 生成 SLAAC 地址(如
2001:db8::1a2b:3c4d
)。 - 仅处理目标为本机的数据包。
- 根据 RA 生成 SLAAC 地址(如
2. 纯路由器模式
- 目标:转发数据包,手动配置静态地址。
- 配置:
forwarding=1 # 启用转发 accept_ra=0 # 禁用 RA 接收 autoconf=0 # 禁用自动配置
- 行为:
- 不接收 RA,需手动设置 IPv6 地址和路由。
- 转发跨网段的数据包(需配合
ip6tables
规则)。
3. 混合模式(路由器 + SLAAC)
- 目标:作为路由器,但同时通过 RA 获取地址。
- 配置:
forwarding=1 # 启用转发 accept_ra=2 # 特殊模式接受 RA(忽略默认路由优先级) autoconf=1 # 启用自动配置
- 行为:
- 允许接收 RA 并生成地址,但转发数据包。
- 需手动解决冲突(如确保防火墙允许 RA 消息)。
⚠️ 关键冲突与解决
1. forwarding=1
自动禁用 accept_ra
- 问题:启用转发后,内核默认设置
accept_ra=0
,导致无法接收 RA。 - 解决方案:手动覆盖配置:
sysctl -w net.ipv6.conf.eth0.forwarding=1 sysctl -w net.ipv6.conf.eth0.accept_ra=2 # 特殊模式允许 RA
2. RA 与防火墙冲突
- 问题:启用转发后,防火墙可能阻止 RA 消息。
- 解决方案:添加
ip6tables
规则:ip6tables -A INPUT -i eth0 -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT ip6tables -A FORWARD -i eth0 -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
🔧 配置验证方法
-
检查参数值:
sysctl net.ipv6.conf.eth0.{accept_ra,autoconf,forwarding}
-
查看生成的 IPv6 地址:
ip -6 addr show dev eth0
-
测试转发功能:
# 在客户端 ping 另一网段的地址 ping6 2001:db8:cafe::1
-
抓包分析 RA:
tcpdump -i eth0 -vn icmp6 and "router advertisement"
📝 总结
accept_ra
是入口:决定是否处理 RA 消息,直接影响自动配置的可能性。autoconf
是执行者:在 RA 有效的前提下,触发地址生成。forwarding
是角色开关:启用后需谨慎协调前两者,避免功能冲突。
通过合理配置这三个参数,可以灵活实现从智能家居设备到企业级路由器的全场景 IPv6 网络架构。
🌐 accept_ra
和 autoconf
和 forwarding
的关系 笔记250404
2️⃣ accept_ra_defrtr
accept_ra_defrtr
是 Linux 系统中控制 是否通过 IPv6 路由通告(RA)自动设置默认路由 的关键参数。以下是其详细说明:
📜 参数定义
- 路径:
/proc/sys/net/ipv6/conf/<接口>/accept_ra_defrtr
- 默认值:
1
(启用,大多数系统的默认行为)。 - 作用:
当接口接收到包含默认路由信息的 RA 消息时,决定是否自动将 RA 中的默认路由添加到内核路由表。
🌐 工作原理
- 启用状态(
=1
):- 如果接收到的 RA 消息中包含默认路由(即
Router Lifetime
字段非零),系统会自动添加一条默认 IPv6 路由。 - 示例路由表项:
default via fe80::1 dev eth0 proto ra # RA 生成的默认路由
- 如果接收到的 RA 消息中包含默认路由(即
- 禁用状态(
=0
):- 忽略 RA 中的默认路由信息,即使收到 RA 也不更新默认路由。
🛠️ 配置方法
临时修改(重启失效)
# 禁用 eth0 的默认路由自动设置
sysctl -w net.ipv6.conf.eth0.accept_ra_defrtr=0# 启用(恢复默认)
sysctl -w net.ipv6.conf.eth0.accept_ra_defrtr=1
永久生效
在配置文件(如 /etc/sysctl.d/99-ipv6.conf
)中添加:
# 禁用 eth0 的默认路由自动设置
net.ipv6.conf.eth0.accept_ra_defrtr = 0
执行 sysctl -p
加载配置。
🔍 验证操作
- 查看当前参数值:
sysctl net.ipv6.conf.eth0.accept_ra_defrtr
- 检查路由表:
ip -6 route show | grep "default" # 输出示例(启用时): # default via fe80::1 dev eth0 proto ra metric 1024 expires 1800sec
⚠️ 依赖与冲突
accept_ra
必须启用:
只有net.ipv6.conf.eth0.accept_ra=1
时,accept_ra_defrtr
才会生效。- 与
forwarding
的冲突:
若启用 IPv6 转发(net.ipv6.conf.eth0.forwarding=1
),内核默认禁用 RA 处理(需手动设置accept_ra=2
)。
🌟 典型场景
1. 家庭/办公网络
- 默认行为:保持
accept_ra_defrtr=1
,设备自动通过 RA 获取默认网关(如家用路由器)。
2. 服务器/数据中心
- 禁用场景:若需手动配置静态默认路由(避免不可控的 RA 干扰),设置
accept_ra_defrtr=0
。# 手动添加默认路由 ip -6 route add default via 2001:db8::1 dev eth0
3. 多宿主主机(多默认路由)
- 选择性启用:为特定接口启用/禁用,控制不同网络的默认路由优先级。
sysctl net.ipv6.conf.eth0.accept_ra_defrtr=1 # 主接口启用 sysctl net.ipv6.conf.eth1.accept_ra_defrtr=0 # 备用接口禁用
📊 参数关系图
通过合理配置 accept_ra_defrtr
,可以灵活控制 IPv6 默认路由的自动化与手动管理平衡。
accept_ra_defrtr 笔记250404
2️⃣ accept_ra
和 accept_ra_defrtr
accept_ra
和 accept_ra_defrtr
是 Linux 系统中与 IPv6 路由通告(Router Advertisement, RA)密切相关的两个参数,它们在功能上既有关联又有分工。以下是它们的核心区别与协作关系:
📜 参数对比
参数 | 作用 | 默认值 | 依赖关系 |
---|---|---|---|
accept_ra | 控制接口是否处理路由通告(RA)消息。 | 1 (启用) | 所有 RA 相关功能的前提条件。 |
accept_ra_defrtr | 控制是否通过 RA 消息设置默认路由(即网关)。 | 1 (启用) | 仅在 accept_ra=1 时生效。 |
参数 | 作用 | 默认值 |
---|---|---|
accept_ra | 总开关:控制接口是否接受 RA 消息(影响所有 RA 相关功能)。 | 1 (启用) |
accept_ra_defrtr | 子功能:在 RA 接受的基础上,决定是否通过 RA 自动添加默认路由(默认网关)。 | 1 (启用) |
🌐 协作机制
-
accept_ra=1
时:- 接口会接收并处理 RA 消息,但具体行为由子参数(如
accept_ra_defrtr
)进一步控制。 - 若
accept_ra_defrtr=1
:- 根据 RA 中的
Router Lifetime
字段添加默认路由。 - 示例路由表:
default via fe80::1 dev eth0 proto ra # RA 生成的默认路由
- 根据 RA 中的
- 若
accept_ra_defrtr=0
:- 忽略 RA 中的默认路由信息,但其他 RA 功能(如地址自动配置)仍生效。
- 接口会接收并处理 RA 消息,但具体行为由子参数(如
-
accept_ra=0
时:- 接口完全忽略 RA 消息,所有 RA 子参数(包括
accept_ra_defrtr
)失效。 - 此时需手动配置 IPv6 地址和路由。
- 接口完全忽略 RA 消息,所有 RA 子参数(包括
🛠️ 典型场景
1. 家用网络(自动配置)
# 启用 RA 处理,并自动设置默认路由
sysctl net.ipv6.conf.eth0.accept_ra=1
sysctl net.ipv6.conf.eth0.accept_ra_defrtr=1
- 效果:设备自动获取 IPv6 地址和默认网关。
2. 服务器环境(手动路由)
# 接收 RA 生成地址,但禁用默认路由自动设置
sysctl net.ipv6.conf.eth0.accept_ra=1
sysctl net.ipv6.conf.eth0.accept_ra_defrtr=0
- 效果:通过 SLAAC 生成地址,但手动指定默认路由:
ip -6 route add default via 2001:db8::1
3. 路由器设备(禁用 RA 处理)
# 完全禁用 RA 处理
sysctl net.ipv6.conf.eth0.accept_ra=0
- 效果:需手动配置所有 IPv6 参数。
🔍 验证方法
-
检查参数值:
sysctl net.ipv6.conf.eth0.{accept_ra,accept_ra_defrtr}
-
查看默认路由:
ip -6 route show | grep "default"
-
抓包分析 RA:
tcpdump -i eth0 -vvv icmp6 and "router advertisement"
⚠️ 注意事项
-
与
forwarding
的冲突:
若启用 IPv6 转发(net.ipv6.conf.eth0.forwarding=1
),内核默认设置accept_ra=0
,需手动覆盖:sysctl -w net.ipv6.conf.eth0.accept_ra=2 # 允许接收 RA
-
多接口优先级:
在多网卡设备中,可为不同接口设置不同策略:# eth0 作为 WAN 口,自动获取默认路由 sysctl net.ipv6.conf.eth0.accept_ra_defrtr=1# eth1 作为 LAN 口,不设置默认路由 sysctl net.ipv6.conf.eth1.accept_ra_defrtr=0
🌐 accept_ra
和 accept_ra_defrtr
笔记250404
2️⃣ Linux的 sysctl
命令
sysctl
是 Linux 系统中用于 动态查看和修改内核运行时参数 的核心工具。它通过 /proc/sys/
目录的虚拟文件系统接口,允许用户在不重启系统的前提下调整内核行为,涵盖网络、内存、文件系统等关键功能。
📜 核心功能
- 实时查看内核参数
- 临时修改内核配置
- 永久保存配置变更
🔧 基本语法
sysctl [选项] [参数=值]
常用选项 | 说明 |
---|---|
-a | 显示所有可用参数 |
-w | 临时修改参数(如 sysctl -w param=value ) |
-p | 从配置文件加载参数 |
-e | 忽略未知参数的错误 |
🌰 典型用法
查看参数
# 查看所有参数(按分类展开)
sysctl -a# 查看特定参数(如 IPv6 转发)
sysctl net.ipv6.conf.all.forwarding
临时修改参数
# 启用 IPv4 转发
sysctl -w net.ipv4.ip_forward=1# 禁用 IPv6 RA 接收(针对 eth0)
sysctl -w net.ipv6.conf.eth0.accept_ra=0
永久修改参数
- 编辑配置文件(通常为
/etc/sysctl.conf
或/etc/sysctl.d/*.conf
):# 示例:优化 TCP 拥塞控制 net.core.rmem_max = 16777216 net.ipv4.tcp_congestion_control = bbr
- 加载配置:
sysctl -p /etc/sysctl.conf # 加载指定文件 sysctl -p # 加载所有配置文件(包括 /etc/sysctl.d/)
功能 | 命令示例 | 说明 |
---|---|---|
查看单个参数 | sysctl kernel.hostname | 显示当前主机名。 |
查看所有参数 | sysctl -a | 列出所有可调整的内核参数。 |
临时修改参数 | sysctl -w net.ipv4.ip_forward=1 | 立即生效,但重启后失效。 |
从文件加载配置 | sysctl -p /etc/sysctl.conf | 加载配置文件中的参数。 |
隐藏敏感信息 | sysctl -q kernel.randomize_va_space | 静默模式(不显示错误)。 |
网络优化
参数 | 作用 | 推荐值 |
---|---|---|
net.ipv4.tcp_syncookies | 防御 SYN 洪水攻击 | 1 |
net.ipv4.tcp_tw_reuse | 允许复用 TIME-WAIT 状态的端口 | 1 |
net.core.somaxconn | 调整最大连接队列长度 | 4096 |
net.ipv6.conf.all.accept_ra | 控制 IPv6 路由器广播接受(见前文) | 1 或 0 |
内存与文件系统
参数 | 作用 | 推荐值 |
---|---|---|
vm.swappiness | 控制交换分区使用倾向(0-100) | 10 |
vm.overcommit_memory | 内存分配策略(0=保守,1=总是允许,2=拒绝超限) | 0 或 2 |
fs.file-max | 系统最大文件句柄数 | 2097152 |
安全加固
参数 | 作用 | 推荐值 |
---|---|---|
kernel.exec-shield | 防御缓冲区溢出攻击(仅 x86) | 1 |
kernel.randomize_va_space | 启用地址空间随机化(ASLR) | 2 |
net.ipv4.conf.all.accept_redirects | 禁止接受 ICMP 重定向(防攻击) | 0 |
📂 配置文件优先级 (多种说法待验证)
/etc/sysctl.conf
- 传统主配置文件(建议仅用于全局基础设置)。
/etc/sysctl.d/*.conf
- 模块化配置文件(优先级高于
sysctl.conf
,按文件名排序加载)。
- 模块化配置文件(优先级高于
/run/sysctl.d/*.conf
- 临时运行时配置(重启后失效)。
系统按以下顺序加载配置(后加载的覆盖前者的冲突项):
/etc/sysctl.d/*.conf
(按文件名升序)/run/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
/etc/sysctl.conf
⚠️ 注意事项
-
参数路径转换
sysctl
参数名与/proc/sys/
路径的对应关系:# 例如: sysctl net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward sysctl kernel.hostname → /proc/sys/kernel/hostname
-
参数作用范围
- 全局参数(如
net.ipv4.ip_forward
)影响整个系统。 - 接口级参数(如
net.ipv6.conf.eth0.accept_ra
)仅针对特定接口。
- 全局参数(如
-
安全操作
- 测试变更:生产环境中建议先临时修改 (
sysctl -w
),验证后再持久化。 - 备份配置:修改前备份文件:
cp /etc/sysctl.conf /etc/sysctl.conf.bak
- 测试变更:生产环境中建议先临时修改 (
🛠️ 实际场景示例
1. 优化网络性能
# 临时增大 TCP 接收缓冲区
sysctl -w net.core.rmem_max=16777216# 永久启用 TCP BBR 拥塞控制
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.d/99-network.conf
sysctl -p
2. 增强系统安全
# 禁用 ICMP 重定向
sysctl -w net.ipv4.conf.all.accept_redirects=0# 阻止 SYN 洪水攻击
sysctl -w net.ipv4.tcp_syncookies=1
3. 调试内核行为
# 启用内核 panic 后自动重启(60 秒后)
sysctl -w kernel.panic=60# 查看当前 PID 最大值
sysctl kernel.pid_max
🔍 扩展知识
- 内核参数文档:可通过
man sysctl
和man sysctl.d
查看手册。 - 动态参数:部分参数为只读(如
kernel.osrelease
),无法修改。 - 系统限制:某些参数受硬件或内核版本限制(如
vm.max_map_count
)。
通过 sysctl
,管理员可以精细调控 Linux 系统的行为,从网络优化到安全加固,成为系统调优不可或缺的工具。
🌐 Linux的 sysctl
命令 笔记250404
2️⃣ accept_ra
和 accept_ra_defrtr
和 ra_defrtr_metric
以下是 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
笔记250405
2️⃣ ra_defrtr_metric
ra_defrtr_metric
是 Linux 系统中用于控制 通过 IPv6 路由通告(RA)生成的默认路由的优先级(Metric) 的关键参数。以下是其详细说明:
📜 参数定义
- 路径:
/proc/sys/net/ipv6/conf/<接口>/ra_defrtr_metric
- 默认值:
1024
(大多数系统的默认值)。 - 作用:
设置通过 RA 消息生成的默认路由的 度量值(Metric),值越低优先级越高。
🌐 工作原理
-
Metric 的作用:
- Metric 表示路由的优先级,范围通常为
0
(最高优先级)到4294967295
(最低优先级)。 - 系统会选择 Metric 值最小的路由作为首选路由。
- Metric 表示路由的优先级,范围通常为
-
与 RA 的关系:
- 仅当以下条件满足时,
ra_defrtr_metric
才会生效:accept_ra=1
(启用 RA 处理)。accept_ra_defrtr=1
(允许通过 RA 设置默认路由)。
- 仅当以下条件满足时,
🛠️ 配置方法
临时修改(重启失效)
# 设置 eth0 的 RA 默认路由优先级为 100(比默认的 1024 更高优先级)
sysctl -w net.ipv6.conf.eth0.ra_defrtr_metric=100
永久生效
在配置文件(如 /etc/sysctl.d/99-ipv6.conf
)中添加:
net.ipv6.conf.eth0.ra_defrtr_metric = 100
执行 sysctl -p
加载配置。
🔍 验证操作
-
查看参数值:
sysctl net.ipv6.conf.eth0.ra_defrtr_metric
-
检查路由表:
ip -6 route show | grep "default" # 输出示例: # default via fe80::1 dev eth0 proto ra metric 100
🌟 典型场景
1. 多宿主网络(主备链路)
- 需求:设备通过
eth0
(主链路)和eth1
(备用链路)连接不同网络。 - 配置:
# 主链路(高优先级) sysctl net.ipv6.conf.eth0.ra_defrtr_metric=100# 备用链路(低优先级) sysctl net.ipv6.conf.eth1.ra_defrtr_metric=200
- 效果:流量优先通过
eth0
,当eth0
断开时自动切换到eth1
。
2. 优先静态路由
- 需求:确保手动配置的静态路由优先级高于 RA 生成的默认路由。
- 配置:
# 设置 RA 默认路由的优先级为 500 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)。
⚠️ 注意事项
-
依赖参数:
ra_defrtr_metric
仅在accept_ra=1
且accept_ra_defrtr=1
时生效。 -
与
forwarding
的冲突:
若启用 IPv6 转发(forwarding=1
),需手动设置accept_ra=2
以允许接收 RA。 -
接口优先级:
不同接口的ra_defrtr_metric
可独立设置,实现灵活的路由策略。
🧠🌐 ra_defrtr_metric 笔记250405
2️⃣ Metric 的作用:
Metric(度量值) 是网络路由中用于 判断路由路径优先级的核心指标。其作用可概括为以下三点:
1. 路由优先级决策
- 定义:Metric 值表示到达目标网络的路径“成本”,值越低表示路径越优。
- 选择逻辑:当存在多条通往同一目标网络的路由时,系统优先选择 Metric 值最小 的路由。
- 示例:
# 路由表中有两条默认路由: default via 2001:db8::1 dev eth0 metric 100 # 优先级高(Metric=100) default via 2001:db8::2 dev eth1 metric 200 # 优先级低(Metric=200)
- 系统会优先通过
eth0
发送流量。
- 系统会优先通过
2. 路由协议差异化
不同路由协议使用不同的 Metric 计算方式,反映路径的“成本”维度:
路由协议 | Metric 计算依据 | 适用场景 |
---|---|---|
RIP | 跳数(经过的路由器数量) | 小型网络,简单优先级判断 |
OSPF | 带宽、延迟、链路成本 | 企业级网络,动态路径优化 |
BGP | AS 路径长度、策略规则 | 互联网骨干网,跨自治系统路由 |
静态路由 | 手动指定(如 ra_defrtr_metric ) | 精准控制特定接口或路径优先级 |
3. 网络容灾与负载均衡
-
主备链路切换:
通过为不同接口设置差异化的 Metric 值,实现自动故障转移。
示例:# 主链路(eth0)优先级更高 net.ipv6.conf.eth0.ra_defrtr_metric = 100# 备用链路(eth1)优先级更低 net.ipv6.conf.eth1.ra_defrtr_metric = 200
- 当
eth0
断开时,流量自动切换到eth1
。
- 当
-
负载均衡:
为多条路径设置相同 Metric 值,系统将均衡分配流量(需协议支持)。
🔧 Metric 的实际调整场景
场景 1:优先有线网络
# 有线接口(eth0)高优先级
net.ipv6.conf.eth0.ra_defrtr_metric = 100# 无线接口(wlan0)低优先级
net.ipv6.conf.wlan0.ra_defrtr_metric = 200
场景 2:静态路由优先于动态路由
# 动态路由(RA 生成)的优先级较低
net.ipv6.conf.eth0.ra_defrtr_metric = 500# 添加静态路由(更高优先级)
ip -6 route add default via 2001:db8::1 metric 100
📊 Metric 值范围
系统/协议 | 典型 Metric 范围 |
---|---|
Linux 静态路由 | 0-4294967295(默认 1024) |
Windows | 0-9999 |
Cisco 路由器 | 0-255(依协议不同) |
⚠️ 注意事项
- 协议兼容性:不同设备或系统对 Metric 的解释可能不同,需确保跨设备一致性。
- 动态路由协议:OSPF/BGP 等协议会自动计算 Metric,手动干预需谨慎。
- IPv6 特殊性:IPv6 的
ra_defrtr_metric
仅影响 RA 生成的默认路由,不影响其他路由条目。
通过合理配置 Metric,可实现网络流量的智能调度,提升性能与可靠性。
🧠🌐 metric 笔记250405
2️⃣ use_tempaddr 使用临时地址
use_tempaddr
是 Linux 系统中用于控制 IPv6 临时隐私地址生成策略 的关键参数。以下是其详细说明:
📜 参数定义
- 路径:
/proc/sys/net/ipv6/conf/<接口>/use_tempaddr
- 默认值:
1
(大多数系统的默认行为)。 - 作用:
决定是否为接口生成 IPv6 临时隐私地址,以增强网络通信的匿名性。
🌐 参数取值与行为
值 | 行为 |
---|---|
0 | 禁用临时地址:仅生成基于 EUI-64 的稳定 IPv6 地址。 |
1 | 启用临时地址:生成临时地址,但优先使用稳定地址进行通信。 |
2 | 优先使用临时地址:生成临时地址,并优先使用临时地址进行通信(隐私最优)。 |
🛠️ 配置方法
1. 临时修改
# 为 eth0 启用临时地址并优先使用(值=2)
sysctl -w net.ipv6.conf.eth0.use_tempaddr=2# 或直接写入 /proc
echo 2 > /proc/sys/net/ipv6/conf/eth0/use_tempaddr
2. 永久生效
在配置文件(如 /etc/sysctl.d/99-ipv6.conf
)中添加:
net.ipv6.conf.eth0.use_tempaddr = 2
执行以下命令加载配置:
sysctl -p /etc/sysctl.d/99-ipv6.conf
🔍 验证操作
-
查看参数值:
sysctl net.ipv6.conf.eth0.use_tempaddr
-
检查临时地址:
ip -6 addr show dev eth0 # 输出示例: # inet6 2001:db8::1234:5678:9012:3456/64 scope global temporary dynamic # valid_lft 604800sec preferred_lft 86400sec
🌟 典型场景
1. 移动设备(高隐私需求)
# 优先使用临时地址
sysctl net.ipv6.conf.wlan0.use_tempaddr=2# 缩短生命周期以加快轮换
sysctl net.ipv6.conf.wlan0.temp_valid_lft=86400 # 有效期为 1 天
sysctl net.ipv6.conf.wlan0.temp_prefered_lft=43200 # 首选周期为 12 小时
2. 服务器(兼容性优先)
# 禁用临时地址
sysctl net.ipv6.conf.eth0.use_tempaddr=0
3. 家庭网络(平衡隐私与便利)
# 启用临时地址但不优先使用
sysctl net.ipv6.conf.eth0.use_tempaddr=1
⚠️ 注意事项
-
依赖参数:
- 需启用
autoconf=1
(通过 SLAAC 自动配置地址)。 - 临时地址的生命周期由
temp_valid_lft
和temp_prefered_lft
控制。
- 需启用
-
兼容性问题:
- 某些服务(如 IP 白名单)依赖固定地址,需谨慎启用
use_tempaddr=2
。
- 某些服务(如 IP 白名单)依赖固定地址,需谨慎启用
-
日志与监控:
- 临时地址频繁变更会增加网络日志分析的复杂度。
📊 临时地址 vs 稳定地址
特性 | 临时地址 | 稳定地址(EUI-64) |
---|---|---|
隐私性 | 高(随机后缀) | 低(基于 MAC 地址) |
可追溯性 | 难 | 易 |
适用场景 | 终端设备(如手机、笔记本) | 服务器、网络设备 |
🧠🌐 use_tempaddr 笔记250405
2️⃣ use_tempaddr
和 temp_valid_lft
和 temp_prefered_lft
以下是 Linux 系统中与 IPv6 临时隐私地址相关的三个关键参数 use_tempaddr
、temp_valid_lft
和 temp_prefered_lft
的详细说明及协作关系:
📜 参数定义与功能
参数 | 作用 | 默认值 | 依赖关系 |
---|---|---|---|
use_tempaddr | 控制是否生成 IPv6 临时隐私地址,并指定其使用优先级。 | 1 (启用) | 需 autoconf=1 (启用地址自动配置)。 |
temp_valid_lft | 定义临时地址的 总有效时间(从生成到失效)。 | 604800 (7天) | 仅在 use_tempaddr=1 或 2 时生效。 |
temp_prefered_lft | 定义临时地址的 首选时间(在此期间地址处于“首选”状态,之后进入“废弃”状态)。 | 86400 (1天) | 必须 ≤ temp_valid_lft 。 |
🌐 协作机制
-
地址生成流程:
- 步骤 1:
use_tempaddr=1
或2
→ 系统生成临时地址。 - 步骤 2:
temp_prefered_lft
定义地址的“首选有效期”(在此期间地址优先用于新连接)。 - 步骤 3:
temp_valid_lft
定义地址的“总有效期”(超时后地址被删除)。
- 步骤 1:
-
生命周期示例:
# 假设配置: use_tempaddr=2 temp_prefered_lft=43200 # 12 小时 temp_valid_lft=86400 # 24 小时
- 前 12 小时:地址为首选状态,用于所有新连接。
- 12-24 小时:地址为废弃状态,仅处理现有连接,不用于新连接。
- 24 小时后:地址被移除。
🛠️ 配置方法
1. 临时地址全配置示例
# 启用临时地址并优先使用
sysctl -w net.ipv6.conf.eth0.use_tempaddr=2# 设置总有效期为 2 天(172800 秒)
sysctl -w net.ipv6.conf.eth0.temp_valid_lft=172800# 设置首选时间为 6 小时(21600 秒)
sysctl -w net.ipv6.conf.eth0.temp_prefered_lft=21600
2. 永久生效
在配置文件(如 /etc/sysctl.d/99-ipv6.conf
)中添加:
net.ipv6.conf.eth0.use_tempaddr = 2
net.ipv6.conf.eth0.temp_valid_lft = 172800
net.ipv6.conf.eth0.temp_prefered_lft = 21600
执行 sysctl -p
加载配置。
🔍 验证操作
-
查看参数值:
sysctl net.ipv6.conf.eth0.{use_tempaddr,temp_valid_lft,temp_prefered_lft}
-
检查地址状态:
ip -6 addr show dev eth0 # 输出示例: # inet6 2001:db8::1234:5678:9012:3456/64 scope global temporary dynamic # valid_lft 172800sec preferred_lft 21600sec
🌟 典型场景
1. 移动设备(高隐私保护)
# 优先使用临时地址,快速轮换
sysctl net.ipv6.conf.wlan0.use_tempaddr=2
sysctl net.ipv6.conf.wlan0.temp_prefered_lft=21600 # 6 小时
sysctl net.ipv6.conf.wlan0.temp_valid_lft=86400 # 24 小时
2. 服务器(禁用临时地址)
# 完全禁用临时地址
sysctl net.ipv6.conf.eth0.use_tempaddr=0
3. 平衡隐私与稳定性
# 启用临时地址但不优先使用
sysctl net.ipv6.conf.eth0.use_tempaddr=1
sysctl net.ipv6.conf.eth0.temp_prefered_lft=604800 # 7 天
sysctl net.ipv6.conf.eth0.temp_valid_lft=1209600 # 14 天
⚠️ 注意事项
-
参数逻辑约束:
temp_prefered_lft
必须 ≤temp_valid_lft
,否则地址可能提前失效。
-
依赖服务:
- 临时地址的生成需满足以下条件:
autoconf=1
(启用 SLAAC 地址自动配置)。accept_ra=1
(接受路由通告)。
- 临时地址的生成需满足以下条件:
-
网络转发冲突:
- 若启用 IPv6 转发(
forwarding=1
),需设置accept_ra=2
以允许接收 RA。
- 若启用 IPv6 转发(
📊 生命周期状态图
🧠🌐 use_tempaddr
和 temp_valid_lft
和 temp_prefered_lft
笔记250405
2️⃣ Linux的 /proc
目录
/proc
是 Linux 系统中一个特殊的 虚拟文件系统 (procfs),它并非存储在磁盘上,而是由内核动态生成,用于提供 内核与进程的实时运行时信息。它像一条纽带连接着用户空间与内核空间,提供系统运行时内核和进程的实时信息。
虚拟性:不占用磁盘空间,所有文件仅存于内存中。
动态性:文件内容实时生成,反映系统当前状态。
📂 核心目录结构
/proc/
├── <PID>/ # 每个进程的详细信息(如 `/proc/1/` 对应 init 进程)
├── sys/ # 内核参数动态控制接口(对应 `sysctl` 命令)
├── net/ # 网络协议栈状态(如 ARP 表、连接统计)
├── cpuinfo # CPU 硬件规格(型号、核心数、频率)
├── meminfo # 内存使用详情(总量、空闲、缓存)
├── interrupts # 硬件中断分配情况
├── modules # 已加载内核模块列表
├── version # 内核版本信息
└── ...
/proc/
├── [PID]/ # 每个进程的独立目录(PID 为进程号)
│ ├── cmdline # 进程启动命令
│ ├── status # 进程状态(内存、用户、线程等)
│ ├── fd/ # 进程打开的文件描述符
│ └── ...
├── cpuinfo # CPU 型号、核心数、频率等
├── meminfo # 内存总量、使用情况
├── modules # 已加载的内核模块
├── mounts # 已挂载的文件系统
├── partitions # 磁盘分区信息
├── version # 内核版本和编译信息
├── sys/ # 内核参数配置
└── ...
🔍 核心功能
-
内核与进程监控
- 查看进程资源:通过
/proc/<PID>/
目录中的文件(如status
、io
、smaps
)可获取进程的 CPU、内存、文件 I/O 等使用情况。 - 示例命令:
cat /proc/1/status # 查看 init 进程状态
- 查看进程资源:通过
-
硬件信息查询
- CPU 详情:
cat /proc/cpuinfo | grep "model name"
- 内存统计:
grep -i "MemTotal\|MemFree" /proc/meminfo
- CPU 详情:
-
动态内核调优
- 网络参数(如 IPv6 配置):
# 查看 eth0 的 IPv6 转发状态 cat /proc/sys/net/ipv6/conf/eth0/forwarding
- 系统级限制(如最大文件打开数):
cat /proc/sys/fs/file-max
- 网络参数(如 IPv6 配置):
🛠️ 典型应用场景
1. 调试进程行为
# 查看进程 1234 打开的文件句柄
ls -l /proc/1234/fd# 分析进程内存映射
cat /proc/1234/maps
2. 网络性能优化
# 调整 TCP 缓冲区大小(临时生效)
echo 16777216 > /proc/sys/net/core/rmem_max
3. 硬件中断均衡
# 查看 IRQ 分配情况
cat /proc/interrupts | grep eth0
4. 内核模块管理
# 确认模块是否加载
grep nvidia /proc/modules
⚠️ 注意事项
-
文件读写性质
- 只读文件(如
/proc/cpuinfo
):仅用于信息展示。 - 可写文件(如
/proc/sys/
下的参数):可直接修改(需 root 权限),但重启后失效。
- 只读文件(如
-
持久化配置
- 通过
sysctl -w
或修改/etc/sysctl.conf
永久保存内核参数变更,而非直接写入/proc/sys/
。
- 通过
-
实时性
/proc
中的内容 动态生成,每次读取均反映系统最新状态(如/proc/meminfo
)。
📊 与 sysctl
的关系
/proc/sys/
目录是sysctl
命令的底层实现。# 以下命令等效 sysctl net.ipv4.ip_forward cat /proc/sys/net/ipv4/ip_forward
通过 /proc
,Linux 将内核与用户空间的交互透明化,成为系统管理员和开发者进行性能分析、故障排查及实时调优的必备工具。
🧠🌐 Linux的 /proc
目录 笔记250404
2️⃣ Linux的 /etc/sysctl.conf
/etc/sysctl.conf
是 Linux 系统中用于 永久修改内核运行时参数 的核心配置文件。它通过 sysctl
工具实现参数的持久化存储,确保系统重启后配置依然生效。以下是其详细说明:
📂 备份/etc/sysctl.conf
tempPathUriA1=/etc/sysctl.conf ; sudo cp -a ${tempPathUriA1} ${tempPathUriA1}.$(date +%0y%0m%0d_%0H%0M%0S_ns%0N).bak
📂 文件作用与位置
- 路径:
/etc/sysctl.conf
- 功能:定义需持久化的内核参数键值对(如网络、内存、文件系统等配置)。
- 扩展配置:现代系统通常推荐将自定义配置放在
/etc/sysctl.d/*.conf
文件中,以模块化管理。
📜 配置文件语法
-
基本格式:
# 注释行(以 # 开头) 参数名 = 值
- 示例:
# 启用 IPv4 转发 net.ipv4.ip_forward = 1 # 禁用 IPv6 RA 接收(针对 eth0) net.ipv6.conf.eth0.accept_ra = 0
- 示例:
-
参数路径规则:
- 参数名对应
/proc/sys/
的路径,将点(.
)替换为斜杠(/
)。# sysctl.conf 中的参数: net.ipv4.ip_forward = 1 # 对应路径: /proc/sys/net/ipv4/ip_forward
- 参数名对应
🔄 配置加载顺序
系统启动时按以下顺序加载配置(后加载的配置覆盖前者的冲突项):
/etc/sysctl.conf
/etc/sysctl.d/*.conf
(按文件名字母顺序加载)。
🛠️ 操作指南
1. 修改配置文件
# 编辑主配置文件
sudo nano /etc/sysctl.conf# 或创建自定义配置文件(推荐)
sudo nano /etc/sysctl.d/99-custom.conf
2. 手动加载配置
# 加载所有配置文件(包括 /etc/sysctl.d/)
sudo sysctl --system# 加载所有配置文件(包括 sysctl.d/)
sudo sysctl -p# 加载指定文件
sudo sysctl -p /etc/sysctl.d/99-custom.conf
3. 验证参数
# 检查参数是否生效
sysctl 参数名
# 示例:
sysctl net.ipv4.ip_forward
🌟 典型配置示例
1. 网络优化
# 启用 IPv4/IPv6 转发
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1# 增大 TCP 缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
2. 安全加固
# 禁用 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0# 阻止 SYN 洪水攻击
net.ipv4.tcp_syncookies = 1
3. IPv6 配置
# 禁用 eth0 的 RA 接收
net.ipv6.conf.eth0.accept_ra = 0# 启用临时隐私地址
net.ipv6.conf.all.use_tempaddr = 2
4. 网络优化
参数 | 作用 | 推荐值 | 适用场景 |
---|---|---|---|
net.ipv4.ip_forward | 启用 IPv4 数据包转发 | 0 | 主机设为 0 ,路由器设为 1 |
net.core.somaxconn | 最大连接队列长度(预防 SYN 洪水攻击) | 4096 | 高并发服务器 |
net.ipv4.tcp_tw_reuse | 允许复用 TIME-WAIT 状态的端口 | 1 | Web 服务器 |
net.ipv6.conf.all.accept_ra | 控制 IPv6 路由器广播接受(见前文) | 1 或 0 | 根据网络安全策略调整 |
5. 内存与交换分区
参数 | 作用 | 推荐值 | 说明 |
---|---|---|---|
vm.swappiness | 控制交换分区使用倾向(0-100) | 10 | 物理内存充足时降低此值 |
vm.overcommit_memory | 内存分配策略(0=保守,1=总是允许,2=拒绝超限) | 0 或 2 | 数据库服务器建议设为 2 |
vm.dirty_ratio | 内存脏数据达到总内存的百分比时强制写盘 | 20 | 减少 I/O 突增 |
6. 安全加固
参数 | 作用 | 推荐值 | 说明 |
---|---|---|---|
kernel.exec-shield | 防御缓冲区溢出攻击(仅 x86) | 1 | 需内核支持 |
net.ipv4.conf.all.accept_redirects | 禁止接受 ICMP 重定向(防中间人攻击) | 0 | 所有接口生效 |
fs.protected_hardlinks | 禁止普通用户修改系统硬链接 | 1 | 提升文件系统安全 |
网络优化
- 连接队列:
net.core.somaxconn = 65535 # 全连接队列最大值 net.ipv4.tcp_max_syn_backlog = 65535 # 半连接队列长度
- TIME-WAIT 回收:
net.ipv4.tcp_tw_reuse = 1 # 允许重用 TIME-WAIT 套接字 net.ipv4.tcp_fin_timeout = 30 # FIN 超时时间(秒)
- 端口与拥塞控制:
net.ipv4.ip_local_port_range = 1024 65535 # 端口范围 net.ipv4.tcp_congestion_control = bbr # 拥塞算法
内存管理
- 交换分区:
vm.swappiness = 10 # 值越低越倾向物理内存(0-100) vm.vfs_cache_pressure = 50 # inode 缓存回收倾向
- 脏页策略:
vm.dirty_background_ratio = 5 # 后台刷脏页阈值(百分比) vm.dirty_ratio = 10 # 同步刷脏页阈值(百分比)
文件系统
- 文件句柄限制:
fs.file-max = 2097152 # 系统最大打开文件数 fs.inotify.max_user_watches = 1048576 # inotify 监控数上限
内核与安全
- 进程与崩溃:
kernel.pid_max = 4194304 # 最大 PID 数量 kernel.panic = 10 # 崩溃后重启时间(秒)
- 网络防护:
net.ipv4.conf.all.rp_filter = 1 # 反向路径过滤(防 IP 欺骗) net.ipv4.icmp_echo_ignore_all = 1 # 忽略所有 ICMP 请求(防探测)
⚠️ 注意事项
-
语法检查:
使用sysctl -p
时,若配置文件有语法错误,加载会失败并提示具体行号。 -
接口级参数:
若需针对特定接口(如eth0
)配置,需明确指定接口名:net.ipv6.conf.eth0.accept_ra = 0
-
生产环境测试:
修改关键参数(如vm.swappiness
或网络转发)前,建议在非生产环境验证。 -
备份与回滚:
# 备份原配置 sudo cp /etc/sysctl.conf /etc/sysctl.conf.bak
通过 /etc/sysctl.conf
及其扩展配置目录,管理员可以高效管理系统内核行为,从网络性能调优到安全策略加固,均能实现灵活控制。
🧠🌐 Linux的 /etc/sysctl.conf 笔记250404
2️⃣ /proc/sys/net/ipv6/conf/(all,default,interfaceName)/ 下更多的参数文件
以下是这些参数的简要说明:
1. accept_dad
- 作用:控制是否启用重复地址检测(DAD)。
- 取值:
0
:禁用 DAD。1
:启用 DAD(默认值)。
2. accept_ra
- 作用:控制是否接受 IPv6 路由器通告(RA)。
- 取值:
0
:不接受 RA 消息。1
:接受 RA 消息。2
:仅在没有默认路由器时接受 RA 消息。
3. accept_ra_defrtr
- 作用:控制是否接受 RA 中的默认路由器信息。
- 取值:
0
:不接受默认路由器信息。1
:接受默认路由器信息(默认值)。
4. accept_ra_from_local
- 作用:控制是否接受来自本地接口的 RA 消息。
- 取值:
0
:不接受本地 RA 消息。1
:接受本地 RA 消息(默认值)。
5. accept_ra_min_hop_limit
- 作用:设置接受的最小跳数限制。
- 取值:正整数。
6. accept_ra_min_lft
- 作用:设置接受的最小生命周期。
- 取值:正整数。
7. accept_ra_mtu
- 作用:控制是否接受 RA 中的 MTU 信息。
- 取值:
0
:不接受 MTU 信息。1
:接受 MTU 信息(默认值)。
8. accept_ra_pinfo
- 作用:控制是否接受 RA 中的前缀信息。
- 取值:
0
:不接受前缀信息。1
:接受前缀信息(默认值)。
9. accept_ra_rt_info_max_plen
- 作用:设置接受的路由信息的最大前缀长度。
- 取值:0 到 128 之间的整数。
10. accept_ra_rt_info_min_plen
- 作用:设置接受的路由信息的最小前缀长度。
- 取值:0 到 128 之间的整数。
11. accept_ra_rtr_pref
- 作用:控制是否接受 RA 中的路由器优先级信息。
- 取值:
0
:不接受路由器优先级信息。1
:接受路由器优先级信息(默认值)。
12. accept_redirects
- 作用:控制是否接受 ICMPv6 重定向消息。
- 取值:
0
:不接受重定向消息。1
:接受重定向消息(默认值)。
13. accept_source_route
- 作用:控制是否接受源路由选项。
- 取值:
0
:不接受源路由选项。1
:接受源路由选项(默认值)。
14. accept_untracked_na
- 作用:控制是否接受未跟踪的邻居通告(NA)。
- 取值:
0
:不接受。1
:接受。
15. addr_gen_mode
- 作用:控制地址生成模式。
- 取值:
0
:使用 EUI64 地址。1
:使用隐私扩展地址。2
:使用稳定隐私地址。
16. autoconf
- 作用:控制是否启用 SLAAC。
- 取值:
0
:禁用 SLAAC。1
:启用 SLAAC(默认值)。
17. dad_transmits
- 作用:设置 DAD 传输次数。
- 取值:正整数。
18. disable_ipv6
- 作用:控制是否禁用 IPv6。
- 取值:
0
:启用 IPv6(默认值)。1
:禁用 IPv6。
19. disable_policy
- 作用:控制是否禁用策略路由。
- 取值:
0
:启用策略路由。1
:禁用策略路由。
20. drop_unicast_in_l2_multicast
- 作用:控制是否丢弃在 L2 多播中的单播数据包。
- 取值:
0
:不丢弃。1
:丢弃。
21. drop_unsolicited_na
- 作用:控制是否丢弃未请求的邻居通告(NA)。
- 取值:
0
:不丢弃。1
:丢弃。
22. enhanced_dad
- 作用:控制是否启用增强型 DAD。
- 取值:
0
:禁用。1
:启用。
23. force_mld_version
- 作用:强制使用特定的 MLD 版本。
- 取值:1 或 2。
24. force_tllao
- 作用:控制是否强制使用目标链路层地址选项。
- 取值:
0
:不强制。1
:强制。
25. forwarding
- 作用:控制是否启用 IPv6 数据包转发。
- 取值:
0
:禁用转发。1
:启用转发。
26. hop_limit
- 作用:设置默认的跳数限制。
- 取值:正整数。
27. ignore_routes_with_linkdown
- 作用:控制是否忽略链路状态为 down 的路由。
- 取值:
0
:不忽略。1
:忽略。
28. ioam6_enabled
- 作用:控制是否启用 IPv6 IOAM(In-situ Operations, Administration, and Maintenance)。
- 取值:
0
:禁用。1
:启用。
29. ioam6_id
- 作用:设置 IOAM 节点 ID。
- 取值:整数。
30. ioam6_id_wide
- 作用:设置 IOAM 节点 ID 的宽度。
- 取值:整数。
31. keep_addr_on_down
- 作用:控制是否在接口 down 时保留地址。
- 取值:
0
:不保留。1
:保留。
32. max_addresses
- 作用:设置每个接口的最大地址数量。
- 取值:正整数。
33. max_desync_factor
- 作用:设置隐私扩展地址的最大去同步因子。
- 取值:正整数。
34. mc_forwarding
- 作用:控制是否启用多播转发。
- 取值:
0
:禁用。1
:启用。
35. mldv1_unsolicited_report_interval
- 作用:设置 MLDv1 未请求报告间隔。
- 取值:毫秒数。
36. mldv2_unsolicited_report_interval
- 作用:设置 MLDv2 未请求报告间隔。
- 取值:毫秒数。
37. mtu
- 作用:设置接口的 MTU。
- 取值:以字节为单位的 MTU 值。
38. ndisc_evict_nocarrier
- 作用:控制是否在无载波时驱逐邻居发现条目。
- 取值:
0
:不驱逐。1
:驱逐。
39. ndisc_notify
- 作用:控制是否发送邻居发现通知。
- 取值:
0
:不发送。1
:发送。
40. ndisc_tclass
- 作用:设置邻居发现的流量类别。
- 取值:整数。
41. optimistic_dad
- 作用:控制是否启用乐观 DAD。
- 取值:
0
:禁用。1
:启用。
42. proxy_ndp
- 作用:控制是否启用代理 NDP。
- 取值:
0
:禁用。1
:启用。
43. rpl_seg_enabled
- 作用:控制是否启用 RPL 分段。
- 取值:
0
:禁用。1
:启用。
44. ra_defrtr_metric
- 作用:设置默认路由器的度量值。
- 取值:整数。
45. ra_honor_pio_life
- 作用:控制是否尊重前缀信息选项中的生命周期。
- 取值:
0
:不尊重。1
:尊重。
46. regen_max_retry
- 作用:设置隐私扩展地址的最大重试次数。
- 取值:正整数。
47. router_probe_interval
- 作用:设置路由器探测间隔。
- 取值:秒数。
48. router_solicitation_delay
- 作用:设置路由器请求延迟。
- 取值:秒数。
49. router_solicitation_interval
- 作用:设置路由器请求间隔。
- 取值:秒数。
50. router_solicitation_max_interval
- 作用:设置路由器请求最大间隔。
- 取值:秒数。
51. router_solicitations
- 作用:设置路由器请求的最大次数。
- 取值:正整数。
52. seg6_enabled
- 作用:控制是否启用 Segment Routing IPv6(SRv6)。
- 取值:
0
:禁用。1
:启用。
53. seg6_require_hmac
- 作用:控制是否要求 SRv6 使用 HMAC 验证。
- 取值:
0
:不要求。1
:要求。
54. stable_secret
- 作用:设置稳定的隐私地址密钥。
- 取值:十六进制字符串。
55. suppress_frag_ndisc
- 作用:控制是否抑制分片的邻居发现。
- 取值:
0
:不抑制。1
:抑制。
56. temp_prefered_lft
- 作用:设置临时地址的首选生命周期。
- 取值:秒数。
57. temp_valid_lft
- 作用:设置临时地址的有效生命周期。
- 取值:秒数。
58. use_oif_addrs_only
- 作用:控制是否仅使用出接口地址。
- 取值:
0
:不使用。1
:使用。
59. use_tempaddr
- 作用:控制是否生成临时地址。
- 取值:
0
:不生成。1
:生成。2
:仅生成临时地址。
这些参数提供了对 IPv6 协议栈行为的细粒度控制,允许用户根据需求调整网络配置。通过合理配置这些参数,可以优化网络性能、增强安全性或满足特定的网络需求。
/proc/sys/net/ipv6/conf/(all,default,interfaceName)/ 下的参数文件, 五分类
这些参数都位于 /proc/sys/net/ipv6/conf
目录下,用于控制 IPv6 网络配置和行为。下面我为你详细解释这些参数:
地址配置与重复地址检测
accept_dad
:控制是否接受重复地址检测(DAD)的结果。设为1
表示接受 DAD 结果,若为0
则忽略 DAD 检测结果,可能导致地址冲突。addr_gen_mode
:指定 IPv6 地址的生成模式。例如,可选择使用 EUI - 64 格式基于 MAC 地址生成,或者采用随机生成方式,以增强隐私性。autoconf
:决定是否启用无状态地址自动配置(SLAAC)。当设置为1
时,设备会根据路由器通告(RA)自动配置 IPv6 地址;设为0
则禁用此功能。dad_transmits
:确定在 DAD 过程中发送邻居请求消息的次数。默认值通常为1
,增加该值可提高 DAD 检测的可靠性,但会延长地址配置时间。
路由器通告相关
accept_ra
:控制设备是否接受路由器通告(RA)消息。1
表示接受,0
表示拒绝。只有接受 RA 消息,设备才能进行 SLAAC 配置。accept_ra_defrtr
:决定是否接受 RA 消息中指定的默认路由器。若设为1
,设备会将 RA 中指定的路由器作为默认网关;设为0
则忽略该信息。accept_ra_from_local
:是否接受来自本地接口的 RA 消息。这在某些特殊网络场景中,如使用本地接口模拟路由器时可能会用到。accept_ra_min_hop_limit
:设置设备接受的 RA 消息中最小的跳数限制值。若 RA 中的跳数限制小于该值,设备可能会忽略该 RA 消息。accept_ra_min_lft
:指定接受的 RA 消息中前缀的最小有效生存期。accept_ra_mtu
:控制是否接受 RA 消息中指定的最大传输单元(MTU)值。若设为1
,设备会使用 RA 中的 MTU 值更新自身的配置。accept_ra_pinfo
:决定是否接受 RA 消息中的前缀信息,用于配置设备的 IPv6 地址前缀。accept_ra_rt_info_max_plen
和accept_ra_rt_info_min_plen
:分别设置接受的 RA 消息中路由信息的最大和最小前缀长度。accept_ra_rtr_pref
:是否接受 RA 消息中路由器的优先级信息,可用于在多个路由器之间选择更优的路由。ra_defrtr_metric
:默认路由器的度量值,可用于在存在多个默认路由器时进行路由选择。ra_honor_pio_life
:控制是否遵循 RA 消息中前缀信息选项(PIO)的生存期。
安全与策略相关
accept_redirects
:控制设备是否接受 IPv6 重定向消息。重定向消息可用于优化路由,但也可能被恶意利用,因此在安全要求较高的环境中可禁用。accept_source_route
:是否接受源路由选项的 IPv6 数据包。源路由允许发送方指定数据包的路由路径,可能存在安全风险,通常建议禁用。accept_untracked_na
:决定是否接受未跟踪的邻居通告(NA)消息。未跟踪的 NA 可能是非法的,设置为0
可增强安全性。disable_ipv6
:禁用整个系统的 IPv6 功能。1
表示禁用,0
表示启用。disable_policy
:是否禁用 IPv6 策略路由。策略路由可根据特定规则进行路由选择,禁用后将使用默认路由规则。drop_unicast_in_l2_multicast
:控制是否丢弃发往二层组播地址的单播 IPv6 数据包,可防止一些异常流量。drop_unsolicited_na
:是否丢弃未经请求的邻居通告(NA)消息,可减少潜在的地址欺骗攻击。enhanced_dad
:是否启用增强的 DAD 机制,增强机制可能提供更严格的地址唯一性检查。force_mld_version
:强制使用指定版本的多播侦听者发现(MLD)协议。force_tllao
:强制使用临时链路本地地址选项。
转发与路由相关
forwarding
:控制是否开启 IPv6 数据包转发功能。当设备作为路由器或网关时,需将此参数设置为1
;作为普通主机时,通常设置为0
。hop_limit
:设置 IPv6 数据包的默认跳数限制。数据包每经过一个路由器,跳数减1
,当跳数减为0
时,数据包将被丢弃。ignore_routes_with_linkdown
:是否忽略与处于关闭状态的链路相关的路由。若设为1
,当链路关闭时,相关路由将被自动忽略。mc_forwarding
:控制是否开启 IPv6 组播数据包转发功能。router_probe_interval
:对默认路由器进行探测的时间间隔。通过定期探测,可及时发现路由器故障并切换到备用路由器。router_solicitation_delay
:设备发送路由器请求(RS)消息前的延迟时间。router_solicitation_interval
:重复发送 RS 消息的时间间隔。router_solicitation_max_interval
:最大的 RS 消息发送间隔时间。router_solicitations
:发送 RS 消息的最大次数。若在规定次数内未收到 RA 消息,设备可能会采取其他配置方式。use_oif_addrs_only
:是否仅使用出接口的地址来进行路由选择。
其他参数
ioam6_enabled
:是否启用 IPv6 网络中的网络遥测(IOAM6)功能。ioam6_id
和ioam6_id_wide
:与 IOAM6 功能相关的标识符。keep_addr_on_down
:当网络接口关闭时,是否保留已分配的 IPv6 地址。设为1
可在接口重新开启时快速恢复网络连接。max_addresses
:限制每个网络接口可分配的 IPv6 地址的最大数量。max_desync_factor
:设置时钟同步的最大偏差因子。mldv1_unsolicited_report_interval
和mldv2_unsolicited_report_interval
:分别设置 MLDv1 和 MLDv2 协议中主动报告消息的发送间隔。mtu
:设置网络接口的最大传输单元大小。ndisc_evict_nocarrier
:控制在链路失去载波时,是否清除邻居发现(NDP)缓存中的条目。ndisc_notify
:控制是否在邻居发现(NDP)状态发生变化时通知用户空间。ndisc_tclass
:设置 NDP 消息的流量类别。proxy_ndp
:是否启用 IPv6 邻居发现代理功能。启用后,设备可代表其他设备响应邻居请求,可用于隐藏内部网络拓扑。regen_max_retry
:在生成地址时,若遇到冲突,最大的重试次数。rpl_seg_enabled
:是否启用 RPL(低功耗和有损网络路由协议)的段路由功能。seg6_enabled
:是否启用 IPv6 段路由(SRv6)功能。seg6_require_hmac
:是否要求 SRv6 数据包使用 HMAC(哈希消息认证码)进行验证,以增强安全性。stable_secret
:用于生成临时地址的稳定密钥。suppress_frag_ndisc
:是否抑制分片相关的 NDP 消息。temp_prefered_lft
:临时地址的首选生存期,即临时地址在该时间段内是首选使用的。temp_valid_lft
:临时地址的有效生存期,超过该时间后临时地址不再有效。use_tempaddr
:控制是否使用临时 IPv6 地址。临时地址可增强隐私性,1
启用,0
禁用。
/proc/sys/net/ipv6/conf/(all,default,interfaceName)/ 下的参数文件, 八分类
以下是 Linux /proc/sys/net/ipv6/conf/<接口>/
目录下 IPv6 参数的详细分类解析,涵盖地址配置、邻居发现、路由、安全等核心功能。部分参数需要高版本内核支持(如 ioam6_*
和 rpl_seg_enabled
),建议结合内核文档使用。
一、地址自动配置与 DAD(重复地址检测)
参数 | 作用 | 推荐值 | 依赖关系 |
---|---|---|---|
accept_dad | 重复地址检测(DAD)策略:0 =禁用1 =启用(默认)2 =启用并优化(快速失败)。 | 1 或 2 | 需内核支持 |
dad_transmits | DAD 探测包的发送次数(若 accept_dad=1/2 )。 | 1 | 无 |
enhanced_dad | 增强型 DAD(减少地址冲突概率)。 | 1 | 需 accept_dad=1 |
addr_gen_mode | IPv6 地址生成模式:0 =EUI-641 =稳定隐私地址2 =随机临时地址。 | 2 | 需内核 ≥ 4.1 |
use_tempaddr | 临时地址生成策略:0 =禁用1 =生成但优先公有地址2 =优先临时地址(增强隐私)。 | 2 | 需 autoconf=1 |
max_addresses | 接口允许的最大 IPv6 地址数量(含临时地址)。 | 16 | 无 |
二、路由器广播(RA)控制
参数 | 作用 | 推荐值 | 依赖关系 |
---|---|---|---|
accept_ra | 是否接受路由器广播(RA),决定是否触发 SLAAC。 | 1 | 需配合 autoconf=1 |
accept_ra_defrtr | 是否通过 RA 自动添加默认路由。 | 1 | 需 accept_ra=1 |
accept_ra_min_hop_limit | 接受 RA 的最小跳数限制(低于此值的 RA 被忽略)。 | 1 | 无 |
accept_ra_pinfo | 是否接受 RA 中的前缀信息(用于 SLAAC)。 | 1 | 需 accept_ra=1 |
accept_ra_rt_info_max_plen | 接受 RA 中路由信息选项的最大前缀长度。 | 64 | 无 |
accept_ra_rt_info_min_plen | 接受 RA 中路由信息选项的最小前缀长度。 | 0 | 无 |
accept_ra_rtr_pref | 是否接受 RA 中的路由器优先级信息。 | 1 | 需 accept_ra=1 |
三、路由与转发
参数 | 作用 | 推荐值 | 依赖关系 |
---|---|---|---|
forwarding | 启用 IPv6 数据包转发(路由器模式)。 | 0 | 需配合防火墙规则 |
ignore_routes_with_linkdown | 是否忽略链路状态为 down 的路由。 | 0 | 无 |
hop_limit | 设置 IPv6 数据包的默认跳数限制(类似 IPv4 TTL)。 | 64 | 无 |
ra_defrtr_metric | 通过 RA 添加的默认路由的优先级(metric)。 | 1024 | 需 accept_ra_defrtr=1 |
四、邻居发现与安全
参数 | 作用 | 推荐值 | 依赖关系 |
---|---|---|---|
drop_unsolicited_na | 是否丢弃未经请求的邻居通告(防止欺骗攻击)。 | 1 | 无 |
drop_unicast_in_l2_multicast | 是否丢弃链路层多播中的单播邻居通告(防攻击)。 | 1 | 无 |
proxy_ndp | 启用代理 NDP(为其他主机响应邻居请求)。 | 0 | 需手动配置代理条目 |
accept_redirects | 是否接受 ICMPv6 重定向消息(安全风险高)。 | 0 | 无 |
accept_source_route | 是否接受 IPv6 源路由(易引发路由欺骗)。 | 0 | 无 |
五、多播与链路层优化
参数 | 作用 | 推荐值 | 依赖关系 |
---|---|---|---|
force_mld_version | 强制 MLD(多播侦听发现协议)版本:1 =MLDv12 =MLDv2。 | 2 | 需多播支持 |
mc_forwarding | 启用 IPv6 多播数据包转发。 | 0 | 需多播路由守护进程 |
mldv1_unsolicited_report_interval | MLDv1 未经请求的报告间隔(秒)。 | 10 | 无 |
force_tllao | 强制在 NDP 消息中包含 Target Link-Layer Address Option(TLLAO)。 | 0 | 无 |
六、临时地址与隐私
参数 | 作用 | 推荐值 | 依赖关系 |
---|---|---|---|
temp_valid_lft | 临时地址的有效生存时间(秒)。 | 604800 | 需 use_tempaddr=1 或 2 |
temp_prefered_lft | 临时地址的首选生存时间(秒)。 | 86400 | 需 use_tempaddr=1 或 2 |
regen_max_retry | 临时地址生成失败时的最大重试次数。 | 3 | 需 use_tempaddr=1 或 2 |
七、高级调试与实验性功能
参数 | 作用 | 推荐值 | 依赖关系 |
---|---|---|---|
ioam6_enabled | 启用 IPv6 操作、管理与维护(IOAM)数据层跟踪(实验性)。 | 0 | 需内核 ≥ 5.10 |
rpl_seg_enabled | 启用 RPL(IPv6 路由协议)分段支持(物联网场景)。 | 0 | 需内核支持 RPL 协议 |
seg6_enabled | 启用 IPv6 分段路由(SRv6)支持。 | 0 | 需内核 ≥ 4.10 |
八、其他关键参数
参数 | 作用 | 推荐值 | 依赖关系 |
---|---|---|---|
disable_ipv6 | 完全禁用接口的 IPv6 功能。 | 0 | 无 |
mtu | 设置接口的 IPv6 MTU(最大传输单元)。 | 1500 | 需匹配物理链路 MTU |
ndisc_notify | 内核是否通过 Netlink 通知用户空间邻居发现事件。 | 0 | 需特定监控工具 |
/proc/sys/net/ipv6/conf/(all,default,interfaceName)/ 下的参数文件, 二分类
接受路由器通告 (RA) 相关参数
- accept_ra: 是否接受路由器通告。
- accept_ra_defrtr: 是否接受作为默认路由器的路由器通告。
- accept_ra_from_local: 是否接受来自本地链路的路由器通告。
- accept_ra_min_hop_limit: 接受的最小跳数限制的路由器通告。
- accept_ra_min_lft: 接受的生存时间最小的路由器通告。
- accept_ra_mtu: 接受包含MTU信息的路由器通告。
- accept_ra_pinfo: 是否接受包含前缀信息的路由器通告。
- accept_ra_rt_info_max_plen: 接受的最大路由信息前缀长度。
- accept_ra_rt_info_min_plen: 接受的最小路由信息前缀长度。
- accept_ra_rtr_pref: 是否接受路由器的优先级字段。
- accept_ra_rt_info_max_plen: 接受的最大路由信息选项长度。
- accept_ra_rt_info_min_plen: 接受的最小路由信息选项长度。
- accept_ra_solicitations: 是否接受路由器请求消息。
其他网络配置参数
- accept_dad: 是否接受重复地址检测 (DAD) 消息。
- accept_redirects: 是否接受重定向消息。
- accept_source_route: 是否接受源站选路。
- accept_untracked_na: 是否接受未经跟踪的邻居通告。
- drop_unsolicited_na: 是否丢弃未经请求的邻居通告。
- drop_unicast_in_l2_multicast: 是否丢弃在L2组播中的单播数据包。
- proxy_ndp: 是否代理邻居发现协议。
- enhanced_dad: 是否启用增强型重复地址检测。
- force_mld_version: 强制使用特定的MLD版本。
- force_tllao: 是否强制使用TLLAO(翻译的链路层地址选项)。
- ioam6_enabled: 是否启用IOAMv6(接口标识符分配模块)。
- ioam6_id: 设置IOAMv6 ID。
- ioam6_id_wide: 设置宽范围的IOAMv6 ID。
- keep_addr_on_down: 在接口关闭时是否保持地址。
- mc_forwarding: 是否启用多播转发。
- max_addresses: 允许的最大地址数。
- max_desync_factor: 最大去同步因子。
- mtu: 设置MTU大小。
- ndisc_evict_nocarrier: 在没有载体时是否执行邻居取消操作。
- ndisc_notify: 是否通知邻居变化。
- ndisc_tclass: 设置邻居发现的时间类。
- regen_max_retry: 最大重新生成地址尝试次数。
- router_probe_interval: 路由器探测间隔。
- router_solicitation_delay: 路由器请求延迟。
- router_solicitation_interval: 路由器请求间隔。
- router_solicitation_max_interval: 最大路由器请求间隔。
- router_solicitations: 发送的路由器请求数量。
- rpl_seg_enabled: 是否启用RPL(路由协议)段。
- seg6_enabled: 是否启用SeG6(分段路由头)。
- seg6_require_hmac: 是否需要对SeG6进行HMAC保护。
- suppress_frag_ndisc: 是否抑制碎片相关的邻居发现消息。
- temp_prefered_lft: 临时首选生存时间。
- temp_valid_lft: 临时有效生存时间。
- use_oif_addrs_only: 仅使用接口地址。
- use_tempaddr: 是否使用临时地址。
/proc/sys/net/ipv6/conf/(all,default,interfaceName)/ 下的参数文件, 七分类
以下是您列出的 IPv6 相关 sysctl
参数的详细讲解,按功能分类和重要性进行说明:
1. 路由器通告(RA)相关参数
-
accept_ra
- 作用:控制是否接受 IPv6 路由器通告(Router Advertisements, RA)。RA 用于 SLAAC(无状态地址自动配置)。
- 默认值:
1
(启用)。 - 禁用场景:若系统为纯主机且不依赖 RA(如静态配置),可设为
0
。
-
accept_ra_defrtr
- 作用:是否将 RA 中的默认路由器信息添加到路由表。
- 默认值:
1
(启用)。 - 禁用影响:需手动配置默认路由。
-
accept_ra_min_hop_limit
- 作用:设置接受 RA 的最小跳数(Hop Limit)。
- 默认值:
0
(接受任何值)。 - 安全建议:可设为
64
防止攻击者伪造低跳数的 RA。
-
accept_ra_mtu
- 作用:是否使用 RA 中通告的 MTU 值。
- 默认值:
1
(启用)。 - 禁用场景:若需手动控制 MTU,设为
0
。
-
accept_ra_pinfo
- 作用:是否处理 RA 中的前缀信息(Prefix Information)。
- 默认值:
1
(启用)。 - 依赖项:需
accept_ra=1
才能生效。
-
accept_ra_rt_info_max_plen
- 作用:接受 RA 中路由信息选项(Route Information)的最大前缀长度。
- 默认值:
64
(IPv6 子网典型值)。 - 调整场景:限制路由表中过长的前缀。
-
ra_defrtr_metric
- 作用:设置通过 RA 添加的默认路由的度量值(metric)。
- 默认值:
1024
。 - 优化场景:若需优先使用其他路由协议(如 BGP),可调高此值。
-
ra_honor_pio_life
- 作用:是否遵循 RA 中前缀信息(PIO)的生命周期(valid/preferred lifetime)。
- 默认值:
0
(不遵循,使用内核默认值)。 - 启用场景:需动态调整地址生命周期时设为
1
。
2. 邻居发现(ND)和地址配置
-
accept_dad
- 作用:是否启用重复地址检测(DAD)。
- 默认值:
1
(启用)。 - 禁用风险:可能导致地址冲突,仅在受控环境禁用。
-
enhanced_dad
- 作用:启用增强型 DAD(RFC 7527),在 DAD 失败后生成新地址。
- 默认值:
0
(禁用)。 - 启用场景:需避免地址冲突时设为
1
。
-
proxy_ndp
- 作用:允许代理 NDP 请求,使本机代为响应其他主机的邻居请求。
- 默认值:
0
(禁用)。 - 使用场景:用于 IPv6 负载均衡或透明代理。
-
drop_unsolicited_na
- 作用:是否丢弃未请求的邻居通告(Unsolicited NA)。
- 默认值:
0
(接受)。 - 安全建议:设为
1
防止 NA 欺骗攻击。
-
drop_unicast_in_l2_multicast
- 作用:丢弃通过 L2 组播地址发送的单播帧。
- 默认值:
0
(不丢弃)。 - 安全场景:防止某些二层攻击。
3. 地址生成与临时地址
-
addr_gen_mode
- 作用:控制 IPv6 地址生成模式:
0
:基于 EUI-64 的传统模式。1
:基于随机化的稳定隐私地址(RFC 7217)。2
:完全随机地址(临时地址)。
- 默认值:
0
或1
(取决于系统配置)。
- 作用:控制 IPv6 地址生成模式:
-
use_tempaddr
- 作用:是否生成临时隐私地址(RFC 4941)。
- 默认值:
0
(禁用)。 - 隐私建议:设为
2
(优先使用临时地址)。
-
temp_prefered_lft
- 作用:临时地址的优选生命周期(秒)。
- 默认值:
86400
(1 天)。 - 调整场景:缩短时间以加快地址轮换。
-
temp_valid_lft
- 作用:临时地址的有效生命周期(秒)。
- 默认值:
604800
(7 天)。
4. 转发与路由
-
forwarding
- 作用:启用 IPv6 数据包转发(路由功能)。
- 默认值:
0
(禁用)。 - 副作用:启用后会禁用 RA 接受(
accept_ra=0
)。
-
ignore_routes_with_linkdown
- 作用:忽略链路状态为 down 的路由。
- 默认值:
0
(不忽略)。 - 优化场景:设为
1
可自动清理无效路由。
-
hop_limit
- 作用:设置发送的 IPv6 数据包的默认跳数。
- 默认值:
64
。 - 调整场景:根据网络拓扑调整(如广域网设为
255
)。
5. 安全与过滤>
-
accept_redirects
- 作用:是否接受 ICMPv6 重定向报文。
- 默认值:
1
(启用)。 - 安全建议:设为
0
防止路由重定向攻击。
-
accept_source_route
- 作用:是否接受源路由(Source Routing)选项。
- 默认值:
0
(禁用)。 - 风险提示:始终禁用,避免绕过防火墙规则。
-
suppress_frag_ndisc
- 作用:禁止对 ND 报文进行分片。
- 默认值:
0
(允许分片)。 - 安全场景:设为
1
防止分片攻击。
6. 多播(Multicast)
-
mc_forwarding
- 作用:启用多播数据包转发。
- 默认值:
0
(禁用)。 - 使用场景:多播路由器或流媒体服务器启用。
-
force_mld_version
- 作用:强制 MLD 版本(1 或 2)。
- 默认值:
0
(自动协商)。 - 兼容性:若网络设备仅支持 MLDv1,设为
1
。
7. 高级功能
-
seg6_enabled
- 作用:启用 IPv6 分段路由(SRv6)。
- 默认值:
0
(禁用)。 - 使用场景:运营商或 SDN 网络。
-
ioam6_enabled
- 作用:启用 In-situ OAM(IOAM)数据采集。
- 默认值:
0
(禁用)。 - 用途:网络性能监控与故障排查。
/proc/sys/net/ipv6/conf/(all,default,interfaceName)/ 下的参数文件, 四分类
这些参数都与IPv6网络配置和邻居发现协议(NDP)有关。下面是对每个参数的简要解释:
接受相关参数
- accept_dad:是否接受重复地址检测(DAD)消息。
- accept_ra:是否接受路由器广告(RA)消息。
- accept_ra_defrtr:是否接受默认路由器。
- accept_ra_from_local:是否接受来自本地接口的RA消息。
- accept_ra_min_hop_limit:接受RA消息的最小跳数限制。
- accept_ra_mtu:接受RA消息时的MTU值。
- accept_ra_pinfo:是否接受RA消息中的前缀信息。
- accept_ra_rt_info_max_plen:接受RA消息中路由信息字段的最大长度。
- accept_ra_rt_info_min_plen:接受RA消息中路由信息字段的最小长度。
- accept_redirects:是否接受重定向消息。
路由器相关参数
- router_solicitation_max_interval:路由器请求的最大间隔时间。
- router_solicitation_delay:路由器请求的延迟时间。
- router_solicitation_interval:路由器请求的间隔时间。
- router_probe_interval:路由器探测的间隔时间。
地址配置相关参数
- autoconf:是否启用IPv6地址自动配置。
- addr_gen_mode:地址生成模式。
- keep_addr_on_down:接口关闭时是否保留地址。
- max_addresses:每个接口允许的最大地址数量。
- use_optimistic:是否使用乐观DAD。
- use_tempaddr:是否使用临时地址。
- temp_prefered_lft:临时地址的首选生命周期。
- temp_valid_lft:临时地址的有效生命周期。
其他参数
- disable_policy:是否禁用策略路由。
- disable_ipv6:是否禁用IPv6。
- drop_unicast_in_l2_multicast:是否丢弃二层多播中的单播数据包。
- drop_unsolicited_na:是否丢弃未经请求的邻居通告(NA)消息。
- enhanced_dad:是否启用增强的DAD。
- force_mld_version:强制使用的MLD版本。
- force_tllao:是否强制使用目标链路层地址选项(TLLAO)。
- hop_limit:默认的跳数限制。
- ignore_routes_with_linkdown:是否忽略链路关闭的路由。
- mc_forwarding:是否启用多播转发。
- mldv1_unsolicited_report_interval:MLDv1未经请求的报告间隔时间。
- mldv2_unsolicited_report_interval:MLDv2未经请求的报告间隔时间。
- ndisc_notify:是否发送邻居发现通知。
- ndisc_tclass:邻居发现消息的流量类别。
- proxy_ndp:是否启用代理NDP。
- regen_max_retry:地址生成时的最大重试次数。
- router_solicitations:发送路由器请求的次数。
- seg6_enabled:是否启用Segment Routing over IPv6。
- seg6_require_hmac:是否要求Segment Routing over IPv6使用HMAC。
- stable_secret:生成稳定密钥的种子。
- suppress_frag_ndisc:是否抑制邻居发现中的片段消息。
这些参数可以通过sysctl
命令进行查看和修改,以适应不同的网络环境和需求。