找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 12609|回复: 46

小白对OpenWrt LAN口IPv6设置中无状态、有状态IPv6地址自动配置的一点理解和疑问

[复制链接]
发表于 2022-3-9 21:42 | 显示全部楼层 |阅读模式
本帖最后由 lgs2007m 于 2022-3-15 10:20 编辑

【IPv6地址自动配置的一些基础知识】
IPv6地址自动配置的三种基本形式:
1)Stateless无状态的。 这个过程是 “无状态的”,原因是它不依赖于外部分配机制(例如IPv6动态主机配置协议(DHCPv6))的状态或是否存在。 在没有外部或用户干预的情况下, 设备尝试配置其自身的IPv6地址 (可能是多个地址)。
2)Stateful有状态的。 有状态的过程仅依赖于外部地址分配机制(例如DHCPv6)。DHCPv6服务器以类似于IPv4 DHCP操作的方式,将128bit IPv6地址分配给设备。
3)Stateless+Stateful无状态和有状态组合方式。 这个过程涉及无状态地址自动配置与其他IP参数的有状态配置相结合一起使用的形式。 通常情况下, 这需要一台设备使用无状态方法自动配置一个IPv6地址,之后利用DHCPv6得到其他参数或选项,比如要在给定网络上联系哪台NTP服务器来查询时间分辨率。

* 无状态使用无状态地址自动配置 (SLAAC, Stateless address Autoconfiguration)
* 有状态使用IPv6动态主机配置协议 (DHCPv6, Dynamic Host Configuration Protocol for IPv6)
* 无状态+有状态使用SLAAC自动配置IPv6地址,使用DHCPv6获取DNS等其他信息。

在IPv6中没有地址解析协议 (ARP, Address Resolution Protocol),取而代之的是IPv6邻居发现协议 (NDP, Neighbor Discovery Protocol),其中跟地址自动配置紧密相关的是路由通告 (RA, Route Advertisements) 。
根据RA报文中的A-Flag、M-Flag和O-Flag的不同组合,可以告知客户端使用哪种形式自动配置地址:
* RA(A=1 M=0 O=0):SLAAC(仅使用RA消息,RA中包含DNS信息选项)
* RA(A=1 M=0 O=1):SLAAC+Stateless DHCPv6(RA和DHCPv6中的DNS消息选项)
* RA(A=0 M=1 O=0/1):Stateful DHCPv6(仅使用DHCPv6消息)
当然也可以RA(A=1 M=1 O=1):SLAAC和DHCPv6都用来自动配置地址,OpenWrt默认是这样设置。

【RA报文中3个关键的Flag】
A-Flag:Autonomous address configuration flag 自动地址配置标志
表示是否配置无状态IPv6地址。在一个RA报文中,可存在多个prefix,比如2401::/64、2402::/64、2403::/64,每个prefix都可以独立配置A-Flag。
* 1:表示主机应当在该prefix范围内SLAAC自动生成IPv6地址,并配置子网路由条目、网关。
* 0:表示主机不应当在该prefix范围内SLAAC自动生成IPv6地址,但是可以配置子网路由条目、网关。

M-Flag:Managed address configuration flag 受管理地址配置标志
表示是否配置有状态IPv6地址。M-Flag是RA报文的全局参数,一个RA报文只有一个M-Flag。
* 1:表示主机可以通过DHCPv6来获得IPv6地址和其他参数(如DNS、NTP)
* 0:表示不通过DHCPv6来获得IPv6地址。

O-Flag:Other configuration flag 其他配置标志
表示是否通过DHCPv6获得除IPv6地址以外的其他参数(如DNS、NTP)。O-Flag也是RA报文中的全局参数,一个RA报文只有一个O-Flag。
注意:仅当M-Flag为0时,该参数才会被读取。
* 1:当M-Flag为0,将通过DHCPv6获得其他参数
* 0:当M-Flag为0,将不通过DHCPv6获得其他参数

【LAN口下的DHCP设置】
源码:Lean's OpenWrt source
固件版本:OpenWrt R22.2.2 / LuCI Master (git-22.052.34668-380e994)
内核版本:5.4.175

# /etc/config/dhcp
config dhcp 'lan'
        option interface 'lan'
        option start '5'
        option limit '15'
        option leasetime '12h'
        option dhcpv4 'server'
        option force '1'

        option ndp 'disabled' # NDP代理:禁用。默认禁用,是默认值时该选项在这里不显示

        option ra 'server' # 路由通告服务RA:服务器模式
        option ra_slaac '1' #A -Flag:1。默认1
        list ra_flags 'managed-config' # M-Flag:1。默认managed-config表示是1,none表示0
        list ra_flags 'other-config' # O-Flag:1。默认other-config表示是1,none表示0
        option ra_dns '1' # RA DNS:1。默认1,是默认值时该选项在这里不显示
        option ra_default '1' # 总是通告默认路由。

        option dhcpv6 'server'  # DHCPv6服务:服务器模式
        option dns_service '1' # DHCPv6 DNS:1。默认1,是默认值时该选项在这里不显示
        option ra_management '1' # DHCPv6模式:无状态的+有状态的

        list dns '2400:3200::1' #通告的DNS服务器(RA的RDNSS、DHCPv6的DNS Recursive Name Server),默认是空,发送的是LAN口IPv6地址。用于RA/DHCPv6 DNS
        list domain 'ms.local' #通告的DNS域名(RA的DNSSL、DHCPv6的Domain search list),默认是空,不发送。用于RA/DHCPv6 DNS

#-------------------------------------------------------------

NDP (Neighbor Discovery Proxy) 邻居发现代理
RDNSS (Recursive DNS Server) 递归DNS服务器(在RA中,对应DHCPv6的DNS Recursive Name Server)
DNSSL (DNS Search List) DNS搜寻列表(在RA中,对应DHCPv6的Domain search list)

系统默认是开启路由通告服务和DHCPv6服务的,所以是SLAAC和DHCPv6都用,即同时进行无状态地址配置和有状态地址配置。
单独无状态自动地址配置SLAAC,只需要设置dhcpv6=disabled禁用DHCPv6服务即可。
单独有状态自动地址配置DHCPv6,不能禁用路由通告服务,要设置ra_slaac=0(即RA中的A-Flag=0)。
这是因为在IPv6中,只有路由器发送的RA信息可以动态提供默认网关,禁用路由通告则主机不能从RA信息中动态配置默认网关。
In IPv6, only routers sending Router Advertisement messages can provide a default gateway address dynamically.
https://www.networkacademy.io/ccna/ipv6/stateful-dhcpv6

要关闭RA中的DNS信息(RDNSS、DNSSL),要设置ra_dns=0。
要关闭DHCPv6的DNS信息(DNS Recursive Name Server、Domain search list),要设置dns_service=0。

#-------------------------------------------------------------
【总是通告默认路由】参数ra_default
Name: ra_default
Type: integer
Required: no
Default: 0
Description: Default router lifetime in the RA message will be set if default route is present and a global IPv6 address (0) or if default route is present but no global IPv6 address (1) or neither of both conditions (2)
https://openwrt.org/docs/guide-user/base-system/dhcp#dhcp_pools
我的理解是:
不勾选总是通告默认路由(ra_default=0),如果路由器有IPv6默认路由且是全球IPv6(公网IPv6),则设置RA信息中的router lifetime为默认预设的1800秒,否则设为0秒。(主机收到RA信息,看到RA中的router lifetime不为0,会自动配置默认网关为RA信息源地址(即路由器链路本地地址)并配置默认路由。router lifetime为0,主机收到RA信息会认为该RA信息源地址不能设置为默认网关和默认路由。)
勾选总是通告默认路由(ra_default=1),如果路由器有IPv6默认路由即使不是全球IPv6(即是内网IPv6),则设置RA信息中的router lifetime为预设的1800秒,否则设为0秒。
ra_default=2,不管路由器是否有IPv6默认路由,是否有全球IPv6,都设置router lifetime为1800秒。

实际设置了IPv6 GUA (Global Unicast Address) 全球单播地址和IPv6 ULA (Unique Local Address) 唯一本地单播地址的情况,Wireshark抓包RA信息得到:
只设置IPv6 ULA:fd60:6777:d7ff::/48
ra_default='0':Router lifetime (s): 0,有 ICMPv6 Option (Route Information : Medium fd60:6777:d7ff::/48)
ra_default='1':Router lifetime (s): 1800,没有 ICMPv6 Option (Route Information)
ra_default='2':Router lifetime (s): 1800,有 ICMPv6 Option (Route Information : Medium fd60:6777:d7ff::/48)
只获得IPv6 GUA:2001:811c:2f82:788a::/60
ra_default='0':Router lifetime (s): 1800,有 ICMPv6 Option (Route Information : Medium 2001:811c:2f82:788a::/60)
ra_default='1':Router lifetime (s): 1800,没有 ICMPv6 Option (Route Information)
ra_default='2':Router lifetime (s): 1800,没有 ICMPv6 Option (Route Information)
IPv6 GUA+ULA:2001:811c:2f82:788a::/60+fd60:6777:d7ff::/48
ra_default='0':Router lifetime (s): 1800,有 ICMPv6 Option (Route Information : Medium 2001:811c:2f82:788a::/60+fd60:6777:d7ff::/48)
ra_default='1':Router lifetime (s): 1800,没有 ICMPv6 Option (Route Information)
ra_default='2':Router lifetime (s): 1800,没有 ICMPv6 Option (Route Information)
没有IPv6 No IPv6:
ra_default='0':Router lifetime (s): 0,没有 ICMPv6 Option (Route Information)
ra_default='1':Router lifetime (s): 0,没有 ICMPv6 Option (Route Information)
ra_default='2':Router lifetime (s): 1800,没有 ICMPv6 Option (Route Information)

如果RA中的router lifetime被设置为0,则收到RA信息的主机不会将发送RA的路由器认为是默认路由(不会将路由器本地链路地址设为默认网关)。
在RA中有个路由信息选项(Route Information Option),可以用于主机生产前缀的路由,指向RA路由器。

#-------------------------------------------------------------

【DHCPv6模式】参数ra_management的【疑问?】
Name: ra_management
Type: integer
Required: no
Default: 1
Description: RA management mode : no M-Flag but A-Flag (0), both M and A flags (1), M flag but not A flag (2)
https://openwrt.org/docs/guide-user/base-system/dhcp#dhcp_pools
DHCPv6模式默认无状态+有状态,可以看出已经有ra_slaac=1 (A-Flag=1) 无状态和ra_flags managed-config (M-Flag=1) 有状态的参数了,不是和这里冲突了?
我理解是配置DHCPv6模式为无状态即Stateless DHCPv6,可以响应主机除IPv6地址外的DNS等其他参数的请求 (INFORMATION-REQUEST) ,IPv6地址通过RA信息根据SLAAC自动配置。
https://www.networkacademy.io/ccna/ipv6/stateless-dhcpv6
配置DHCPv6模式为有状态,即Statefull DHCPv6可以相应主机IPv6地址和DNS等其他参数的请求 (REQUEST)。
https://www.networkacademy.io/ccna/ipv6/stateful-dhcpv6

但是实际设置ra_management=0,DHCPv6模式无状态,A-Flag=1,M-Flag=0,O-Flag=1,即SLAAC+Stateless DHCPv6,不按规范办事的Windows上依然能获取到有状态IPv6地址和自动生成无状态IPv6,按规范办事的Linux群晖只自动生成了无状态IPv6地址。

这让我产生了疑惑,Stateless DHCPv6不是应该只能提供除了IPv6地址外的其他信息吗,怎么也能提供IPv6地址分配了?是否Statefull DHCPv6也可做为Stateless DHCPv6单独提供除了IPv6地址外的其他信息?不明白配置DHCPv6模式的作用关联在哪里。
这里有个讨论,但是没什么结果:https://dev.archive.openwrt.org/ticket/16811


【关于DHCPv6静态分配IPv6】
DHCPv6交互过程中,客户端、服务器和中继都有一个唯一的标志符DUID(DHCP Unique Identifier,DHCP唯一标识符),其主要用途用于DHCPv6交互过程中互相标志对方。
服务器可以用Client DUID标志客户端,并可以将其用于本地的地址分配策略;客户端可以用Server DUID来标志服务器。
DUID包括三种生成方式:
DUID-LLT(DUID Based on Link-layer Address Plus Time):基于时间和链路层地址生成DHCPv6设备DUID值。
DUID-EN(DUID Assigned by Vendor Based on Enterprise Number):基于IANA注册的企业号码生成DHCPv6设备DUID值。
DUID-LL(DUID Based on Link-layer Address):基于链路层地址生成DHCPv6设备DUID值。

DHCPv6根据每个客户端系统DUID来分配IPv6,只要你的DUID不变,分配到的IPv6后缀不变。
当然可以通过DHCPv6静态分配IPv6来指定分配的后缀。首先需要在OpenWrt路由器LuCI页面查看“已分配的DHCPv6租约”那里已分配IPv6的客户端的DUID,也可以用命令ubus call dhcp ipv6leases查看(也可以在客户端系统上查看,如Windows通过ipconfig /all查看DHCPv6客户端DUID),然后添加静态地址分配。因为LuCI页面那里DHCP/DNS的“静态地址分配”没有DUID选项可以填,所以要SSH或SCP登录路由去编辑/etc/config/dhcp文件(也可以用路由插件TTYD终端),来添加DUID选项。

以root身份SSH登录或者路由的TTYD终端登录后:
1、输入vim /etc/config/dhcp
2、输入i或者a键进入编辑模式
3、编辑完后按Esc键退出编辑模式
4、输入:wq后回车保存
5、输入如下命令来重启服务
/etc/init.d/dnsmasq restart
/etc/init.d/odhcpd restart
6、重启客户端系统网卡刷新IPv6地址

>vi /etc/config/dhcp:
config host
        option name 'MyPC'                #主机名
        option mac 'aa:bb:cc:dd:ee:ff' #主机MAC地址
        option dns '1'
        option duid '00010001f98caa01274d4356eff08' #DUID(十六进制),必须
        option hostid '25'                                           #IPv6后缀(十六进制,最多8个字符),自己设定


【参考链接和抓包工具】
OpenWrt IPv6 分配方式
https://sakura-paris.org/IPv6
IPv6系列-彻底弄明白有状态与无状态配置IPv6地址
https://www.cnblogs.com/fzxiaoma ... eless-stateful.html
IPv6 Fundamentals for CCNA students
https://www.networkacademy.io/ccna/ipv6

Windows网络抓包工具Wireshark_3.6.2 Stable 便携版
https://www.423down.com/8105.html
Wireshark过滤关键词      只显示
icmpv6.type == 133       ICMPv6 RS
icmpv6.nd.ra.flag           ICMPv6 RA
dhcpv6                         DHCPv6 数据包


评分

参与人数 2恩山币 +2 收起 理由
chao*** + 1 学到了,好评。
SkyF*** + 1 2333

查看全部评分

发表于 2022-3-9 21:53 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

发表于 2022-5-19 14:38 来自手机 | 显示全部楼层
谢谢,已收藏备用
回复 支持 反对

使用道具 举报

发表于 2022-6-2 21:48 | 显示全部楼层
感谢分享,这是小白吗

点评

很基础的一点理解,小白本白互相学习  详情 回复 发表于 2022-6-3 19:18
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-3 19:18 | 显示全部楼层
无聊hello 发表于 2022-6-2 21:48
感谢分享,这是小白吗

很基础的一点理解,小白本白互相思考
回复 支持 反对

使用道具 举报

发表于 2022-6-4 11:55 | 显示全部楼层
看不懂你是在问人家,还是在教人家。

点评

自己的一点理解和疑问啦。有兴趣帮看看后面参数ra_management的疑问哈  详情 回复 发表于 2022-6-4 12:13
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-4 12:13 | 显示全部楼层
gameop 发表于 2022-6-4 11:55
看不懂你是在问人家,还是在教人家。

自己的一点理解和疑问啦。有兴趣帮看看后面参数ra_management的疑问哈
回复 支持 反对

使用道具 举报

发表于 2022-6-4 12:19 来自手机 | 显示全部楼层
我的联通宽带就是无状态分配128码,电脑路由都正常使用,手机死活受罪,移动宽带完全正常,看了一眼好像是两种状态都有,分配码子是/64

点评

无状态分配电脑正常,手机应该也是没问题的,安卓手机不支持DHCPv6,但是SLAAC无状态分配是没问题的  详情 回复 发表于 2022-6-4 14:33
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-4 14:33 | 显示全部楼层
hcyme 发表于 2022-6-4 12:19
我的联通宽带就是无状态分配128码,电脑路由都正常使用,手机死活受罪,移动宽带完全正常,看了一眼好像是 ...

无状态分配电脑正常,手机应该也是没问题的,安卓手机不支持DHCPv6,但是SLAAC无状态分配是没问题的
回复 支持 反对

使用道具 举报

发表于 2022-6-8 15:10 | 显示全部楼层
有个疑问,用了openwrt 22分支,发现wan和lan分别有dhchp服务器设置,以前只有lan才有dhcp服务器设置。
目前我用R2S刷了openwrt22分支来拨号上网,下面以一个硬路由做AP发射wifi,请问我想设置有状态和无状态,lan口dhcp服务器设置RA/DHCPv6为服务器模式,而NDP为混合模式,并且“指定的主接口”打勾吗?
请问wan和wan6口的ipv6同样有RA/DHCPv6、NDP/指定主接口的设置,也要一样设置吗?

点评

我的LAN口“IPv6设置”没看到有“指定的主接口”,NDP代理我感觉没用到,我是禁用的。 我看我的WAN和WAN6是没有RA/DHCPv6、NDP/指定主接口的设置,建议默认就行了  详情 回复 发表于 2022-6-8 16:56
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-8 16:56 | 显示全部楼层
lyjhyjyes 发表于 2022-6-8 15:10
有个疑问,用了openwrt 22分支,发现wan和lan分别有dhchp服务器设置,以前只有lan才有dhcp服务器设置。
目 ...

我的LAN口“IPv6设置”没看到有“指定的主接口”,NDP代理我感觉没用到,我是禁用的。
我看我的WAN和WAN6是没有RA/DHCPv6、NDP/指定主接口的设置,建议默认就行了

点评

我用的固件恩山yuyangyu用户小碗儿数码发布的,https://pan.xiaowansm.top/1/main/%F0%9F%9A%A9OpenWrt_21.02%E6%BA%90%E7%A0%81/R2s/2022-5-25 他的R2S固件特别奇怪,比其他22分支的多了WAN和WAN6的dhcp设置。以及  详情 回复 发表于 2022-6-10 17:43
回复 支持 反对

使用道具 举报

发表于 2022-6-8 17:34 来自手机 | 显示全部楼层
哈哈,你根本不知道什么是无状态

点评

你懂就你来说说,不要说不出就跑就行  详情 回复 发表于 2022-6-8 19:26
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-8 19:26 | 显示全部楼层
nowandthen 发表于 2022-6-8 17:34
哈哈,你根本不知道什么是无状态

你懂就你来说说,不要说不出就跑就行
回复 支持 反对

使用道具 举报

发表于 2022-6-9 07:54 来自手机 | 显示全部楼层
不是研究故障,只是基础知识,并不需要我自己的观点,搜索一下正式的文章就好了,小白自己学在传授反而不行

点评

你真是搞笑,歪理一大堆  详情 回复 发表于 2022-6-9 08:11
回复 支持 反对

使用道具 举报

发表于 2022-6-9 08:02 来自手机 | 显示全部楼层
他所谓觉得有问题的地方,就是他没有好好思考的地方,就这么简单。把以前了解的忘掉,重新思考什么是无状态就好了

点评

哈哈,你根本不知道什么是无状态  详情 回复 发表于 2022-6-9 08:08
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-6-3 02:17

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表