OpenWrt 启用 IPv6

OpenWrt 启用 IPv6

IPv6 的好处有那些?

  1. 超级多的 IP 地址,给全球的每个设备分一个 IP 地址都是小意思,大家都在公网,墙中墙不复存在。如果黑客扫 IP,一个 64 位前缀下的主机,如果黑客每秒扫描 100 万个主机,大约 50 万年左右才能遍历一个 64 位前缀内所有的主机地址。
  2. 多等级层次有助于路由聚合,提供了路由的效率和可扩展性,传输速度更快,讲人话就是更快了,但是人很难感觉到。
  3. 能够更有效的处理移动性和安全机制,网络安全性更高,每个 IPv6 数据包的完整性和真实性都是通过加密和防止数据包欺骗的技术来保证的。

我家的大部分流量都是 IPv6 流量,体验上和纯 IPv4 没区别。部分 Openwrt 固件没有 IPv6 的支持,想用 IPv6 需要换固件。

1、取消禁止解析 IPv6 DNS 记录功能

该选项在网络-DHCP/DNS-高级设置,取消勾选禁止解析 IPv6 DNS 记录并保存就可以了。

dnsmasq.webp

2、WAN 口的相关设置

我家的 Openwrt 作为主路由在使用,负责拨号上网。如果是光猫拨号上网的自行查找相关内容,我这里就不多说了,因为光猫界面不统一,设置也不统一,折腾光猫还麻烦。

选项在网络-接口-WAN,WAN 口高级设置。获取 IPv6 地址设置为自动。不勾选使用内置的 IPv6 管理(使用内置的 IPv6 管理,就不需要自己去增加 WAN6 接口),应该不会影响 IPv6 的使用,但是发现了影响 IPv6 上网的例子,最好不勾选。其他的设置看图。

openwrt-wan6.webp

3、WAN6 口设置

选项在网络-接口-WAN6,协议设置为 DHCPv6 客户端,这是为了使 WAN6 口能够自动获取一级路由分配的 IPv6 地址,从而使 IPv6 的流量可以流向 WAN6 口。WAN 和 WAN6 是同一个接口,为了方便网络配置,才分成两个逻辑接口。需要使用运营商 DNS 的话,勾选使用对端通告的 DNS 服务器,使用自定义的 DNS 服务器就手动设置 DNS 服务器。

openwrt-wan6.webp

4、LAN口的相关设置

选项在点击网络-接口-LAN,基本设置中的 IPv6 分配长度我建议设置为 64,为了 LAN 口下的设备可以自动配置 IPv6 地址。 IPv6 后缀可以设置为 ::1,这样可以让主路由 LAN 口的 IPv6 地址更简洁,也可以不设置,一般不影响 IPv6 的使用。高级设置中的使用内置的 IPv6 管理最好不选,理由同上。

如果要给下面的路由器分配 DHCPv6-PD,则 LAN 口 “IPv6分配长度“ 可能要设置为比 64 更小,如 60、56,前提是运营商分配的 DHCPv6-PD 前缀长度小于 64 位。

在下方的 DHCP 服务器中点击 IPv6 设置。

路由通告服务

一般来说上级网关会下发 PD(在系统 - 概览 - IPv6WAN 状态中),路由通告服务就设置为服务器模式。某些地方不下发 PD,就分配个地址,这种情况下就是要选择中继模式。混合模式,根据我查到的资料,混合模式会根据配置自动选择使用中继还是服务器模式(看有没有下发 PD)。

DHCPv6 服务

下发 PD 就设置为服务器模式,不下发就设置成中继模式,混合模式同上。禁止 DHCPV6 之后需要手动设置 IPv6 DNS 服务器。

NDP代理

下发 PD 就禁用,不下发就不禁用。

DHCPv6 模式

我设置的是无状态的,根据自己的情况设置。

有状态的 + 无状态的,使用 DHCPV6 有状态分配地址,同时如果有公网前缀也使用无状态分配,无前缀只使用 DHCPV6 有状态分配。

无状态的,无状态使用 RA 通告配置 IP,DHCPV6 配置 DNS、NTP 等扩展配置信息。在无状态地址分配下,通常一个网络接口会生成两个地址:一个会变,一个不会变。会变的那个是临时地址(比如 Windows 的临时地址),这个是用来保护你的隐私的,每次重新联网都会变化。不变的那个是根据网卡的 MAC 地址(或者其他的硬件信息)生成的。

有状态的,由 DHCPv6 服务器分配的 IPv6 地址,其他的和 DHCPv4 差不多。有 PD 的不要单独使用有状态的,不然 PPPoE 重新拨号前缀改变内网机器前缀不自动改。

ULA 前缀直接删掉即可,和 IPv4 的内网地址差不多的作用,自动生成就好,最好别人为设置,万一撞车就不好了。相关知识可以到第七节查看。

其他的设置看图,设置完重启 Openwrt 就可以了。

openwrt-lan.webp

openwrt-dhcpv6.webp

5、负载均衡设置

如果你的 Openwrt 有负载均衡的设置(网络-负载均衡),那么需要把负载均衡的策略修改一下。将备用成员设置成默认使用主路由。负载均衡的规则中的 HTTPS 与 Default_rule 将分配的策略 (从不可达)修改为 Default。不用负载均衡可以关闭,更省事。

ps:图片是我从疯狂的猿猴的博客拿来的,我用不上负载均衡,所以我的 Openwrt 没有。

负载均衡.webp

6、防火墙设置

如果需要外网的设备访问内网的设备(在 IPv6 的情况下),需要添加一条防火墙规则。在网络-防火墙-通信规则,下面的打开路由器端口那一栏,点击添加。

名称随意,限制地址选择 IPv6,如果需要限制端口,就在目标端口处添加,多个端口用空格分开。

openwrt-防火墙.webp

内网 IPv6 地址想上网的话,需要在防火墙设置 IPv6 NAT。设置项在网络-防火墙-自定义规则。

# IPv6 NAT。
ip6tables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -i br-lan -j ACCEPT
# 下面的两条规则,按情况选择使用。
# 如果没有设置 IPv6 ULA 前缀,则使用下面这条,eth0 是 WAN 口接口,在网口的物理设置里可以看到。
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#如果设置了 IPv6 ULA 前缀,则使用下面这条,fd00:100:100::/48 是设置的 IPv6 ULA 前缀。
ip6tables -t nat -A POSTROUTING -s fd00:100:100::/48 -j MASQUERADE

7、IPv6 相关知识

7.2、IPv6 地址类别

除了特殊的地址以外,我们常用的 IPv6 地址有3种( IPv6 地址主要分为 3 类)。

  1. Global-unicast IPv6 address(全球唯一单播 IPv6 地址,GUA), 相当于 IPv4 的公网IP地址,全球唯一。终端访问互联网最常用的地址,全局的单播地址目前只有 2000::/3 这个范围被使用,其它的被预留了。
  2. Unique Local IPV6 unicast address: (本地唯一单播地址,LUA,前缀 fc00::/7,覆盖范围从 fc00::/8fd00::/8), 对应于 IPv4 的私网IP地址,在整个组织/公司/学校/站点内唯一。常用的为 fd00::/8。本组织内可以路由。用于 IPv6 的 NAT 功能。
  3. Link-local address: (链路本地地址,LLA,前缀 fe80::/10, 用于直连链路,无路由功能), 自动分配,它仅供于在网段,或广播域中的主机相互通信使用。该地址于本地有效,只能用于本地的通信,其中包括了到 IPv6 网关的通信,一般不用管。

7.3、IPv6 分配方式

IPv6 地址分配方式有俩种,SLAAC 和 DHCPv6。

  • SLAAC

    IPV6 其中一个特性是即插即用,支持 SLAAC(Stateless Auto Configuration,无状态自动分配),IPv6 主机使用邻居发现协议(NDP)对自身进行自动配置,不用借助DHCP服务器

    常见的情况就是本地的链路地址(Link-Local,fe80::/10)。设备启动后,会为每个网卡生成一个 Link-Local 的IP地址:fe80::+INTERFACE_ID,该地址只能用于本地的通信,包括到 IPv6 网关的通信,可以理解为私有局域网。

    设备接入网络后,设备会向多播地址 ff02::2 广播(RS)寻找网络中的路由器,路由器会返回或者定期广播(RA)子网前缀,设备将子网前缀和接口 ID 组合起来,就构成了一个唯一的 IP 地址,这个 IP 地址可以通过路由器路由。还会像其他设备请求 IP 地址,防止地址冲突。

    拨号的时候采用的 MAC 地址和设备网卡的地址可能没有关联。Linux 拨号的时候采用的随机 MAC,Windows 应该和拨号的账号有关。所以每次拨号获得的 IPv6 地址的后缀也可能不一样。

  • DHCPv6

    IPv6 地址也可以由 DHCP 服务器来分配,这种方式叫做有状态分配(Stateful Auto Configuration),使用 DHCP 服务器可以向下级设备分配任意的地址。 DHCP 唯一标识符 DUID,用于客户端从 DHCP 服务器获得IP地址,服务器将 DUID 与其数据库进行比较,并将配置数据(地址、租期、DNS 服务器,等等)发送给客户端。

7.3、DHCP-PD

如果下级设备是终端(手机、电脑之类的),分配一个地址就够了。下级设备是路由器的话就需要分配一个地址段才可以继续向下分配 IPv6 地址,所以 DHCP 不仅可以分配单个地址,还可以下发前缀(PD,Prefix delegation),有了 DHCP-PD 路由器就知道 IP 可以分配的范围,从而自行分配而不冲突。

注意区分 PD 与前缀,PD 从内容上来说是前缀,但是前缀不一定是 PD(PD是 64 位的),比如 64 位的前缀。

PD 不是路由器让下级设备获得公网 IPv6 地址的必要条件,借助 NDP 代理,下级设备也可以获得公网 IPv6 地址。

7.4、邻居发现协议(Neighbor Discovery Protocol,NDP)

从地址到通信,就需要通过三层获取二层信息,对应于 IPv4 的 ARP,IPv6 借助于邻居发现协议。

7.4.1、NDP消息

NDP 定义了 5 种 ICMPv6 报文类型或者叫NDP消息,具体如下:

  1. 路由器请求(RS):由主机发起,请求路由器发送 RA。
  2. 路由器通告(RA):由路由器发起,通告路由器的存在和链路的参数(如默认路由地址、网络前缀,MTU 等),周期性发送,也用于回答 RS。
  3. 邻居请求(NS):由节点主机发起,用来请求另一台主机的链路层地址,实现地址冲突检测、邻居不可达检测。
  4. 邻居通告(NA):有节点发起用来响应 NS,如果一个节点改变了他的链路层地址,它就主动发送一个 NA 来通告这个新地址。
  5. 重定向(Redirect):当本地链路上存在一个更好的到达目的网络的路由器时,路由器需要通告节点来进行相应配置改变。

7.4.2、NDP代理

很多时候我们需要 NDP 代理。如果让所有 IPv6 数据进入路由器,这可能会带来管理和安全的问题。如果只让 NDP 消息进入路由器,那么带来一个问题,网关和终端之间隔了一个路由器,RA 下发的链路参数是相对于路由器的,NS 得到的链路层地址也是相对于路由器的,对终端来说就是不可达的,所以网络不通。

NDP 代理过程如下:

  1. 将 RA 广播转发到下级设备,替换 IPv6 地址和 MAC 地址替换为 LAN 的地址。
  2. 接收下级设备的 NA 将其转发到上级网关,只把 MAC 替换为 WAN 的 MAC。

终端发出的数据包会先被送到路由器,路由器查路由表转发到上级网关;路收到发往终端的数据包会先被路由器收到,通过对应目的地址和 MAC,转发到终端。

7.4.3、IPv6 ULA 前缀

在 IPv6 网络下,一个网络接口可以有多个 IP 地址。IPv6 提供称为 Unique Local Address ( ULA )的地址段 fc00::/7 ,包含 fc00::/8fd00::/8 两部分,fc00::/8 的使用还没有定义,不用管,fd00::/8 可以被自由使用。ULA 起的作用和 IPv4 的私有局域网差不多。fd00::/8 是一个十分巨大的地址段,你可以从中挑选一个 /48 的子段分配给你的局域网。我建议随机生成子段避免撞车(用引擎搜索 ULA generator 就会找到在线工具)。

有了 ULA,你的设备在内部互访时可以直接使用固定的 ULA,和外部互访时则使用公网地址。只要保证你的路由表正确就可以。默认路由使用公网地址作为出口,ULA 地址段使用 ULA 作为出口。如果出现问题,检查一下你路由通告 和 DHCPv6 服务的设置。

私有 IPv6 局域网对一般人来说,没啥用,在 Openwrt 里直接删除掉 IPv6 ULA 前缀就好。

8、参考文章

许迎果 第216期 openwrt如何快速开启IPv6协议

https://www.hopol.cn/2020/11/1819/

正确配置OpenWrt路由 IPV6上网,开启纯IPV6访问

IPv6有多安全?黑客扫描一个地址需要花费50万年!(中科三方)

通过IPV6或者IPV4远程访问家里的Openwrt(奶妈级教程)

openwrt软路由实现ipv6上网配置

官方OpenWrt固件中IPv6使用及负载均衡mwan3

天津大学校园网环境下openwrt的ipv6设置

OPENWRT里面设置IPV6方法

k2p下潘多拉/openwrt配置ipv6地址

成都电信宽带分配到 IPV6 了

为你的 IPv6 局域网配置 ULA 吧

openwrt配置ipv6

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇