跳转至

IPV4 && IPV6

IPV4

展示了A、B、C类IP地址的二进制表示和它们的特征:

类别 地址范围 网络数 主机数 说明
A 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 1-126 2^24-2 第一位为0
B 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 128-191 2^16-2 前两位为10
C 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 192-223 2^8-2 前三位为110
D 1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 224-239 不适用 用于多播
E 11110xxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 240-255 不适用 保留用于实验和未来使用

在这个表格中:

  • A类地址的范围是从 0.0.0.0127.255.255.255,第一位必须是0。
  • B类地址的范围是从 128.0.0.0191.255.255.255,前两位必须是10。
  • C类地址的范围是从 192.0.0.0223.255.255.255,前三位必须是110。

D类和E类地址用于特殊用途,不用于普通的网络和主机地址分配。

拥抱ipv6

ipv6 原本是为了解决ipv4不足而提出的:

  • IPv4的地址范围是0.0.0.0~255.255.255.255,其地址总量约43亿个(2的32次方),这其中还要刨去私有网段、网络ID、广播ID、保留网段、本地环回、组播地址等特殊地址段,最终的实际可用地址约为25.68亿个,全球互联网设备数是远超这个的。所以一方面设计了私有地址来上网
  • 另一方面就是ipv6。IPv6的地址长度为128位,虽然地址长度仅仅是IPv4的4倍(IPv4是32位的),但IPv6的地址总量却达到了惊人的\(2^{128}\)。换一种更通俗的说法:地球上每一平方米,都可以分到10^26次方个IPv6地址,夸张一点来说,可以给每一粒尘埃都分配到一个地址。

实际运用的困难:

  1. 大多数设备默认没有开启
    1. 光猫 和 路由器都需要开启
  2. 需要自己check。访问
    1. ipw.cn or ip.sb
    2. http://www.test-ipv6.com/ 1. test-ipv6.com是主站点,有时会抽风,结果不准确。可以选择镜像站点测试,镜像网站列表为https://test-ipv6.com/mirrors.html,打开后访问其中的一个镜像站点进行测试。
    3. 查看是否支持ipv6

IPV6公网地址段分配

首先公网ipv6,也就是可聚合全球单播地址Aggregate global unicast address。是由IANA分配的可在全球路由的公网IP地址:

  • 目前已分配的前缀:2000::/3 占用了12.5%的IPV6地址空间
  • 2000:0000:0000:0000:0000:0000:0000:0000--3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
:: == zeros

The use of the “::” symbol is a special syntax that you can use to compress one or more group of zeros or to compress leading or trailing zeros in an address.

国内的ipv6地址段分配

  • 三大运营商的IPv6地址分配情况:

    • 电信是240e开头的(240e::/20)、
    • 移动是2409开头的(2409:8000::/20)、
    • 我家移动宽带:2409:8a50:ece:c110:ccf5:d43:c845:ece6
    • 联通是2408开头的(2408:8000::/20
    • 教育网 2001:da8::/32
    • 学校的教育网地址:2001:da8:d800:611:989d:fca0:ca20:f288
    • 各大高校ipv6地址段
  • 两种隧道技术获得的地址也是公网 IPv6 地址

    • 2002: 开头的是 6to4 地址,由用户端设备自动建立
    • 6in4并没有固定的地址段,而是由服务商自行分配。常见的由HE.net提供的隧道和Windows自动建立的Teredo隧道都恰好以2001开头而已。
    • 以上两种不是由运营商提供的,而是用户端设备把 IPv6 数据包封装到 IPv4 的数据包中,再通过第三方 Broker 服务器中转来访问 IPv6 互联网,速度通常比较慢。

其他一些说明:

  • 2001:250::/32 CERNET IPv6 Backbone 主干网
    • 2000年,CERNET获得由亚太地区网络信息中心(APNIC)分配的正式IPv6 sTLA地址2001:250::/32
    • 自 1995 年以来,CERNET 在北京设立唯一的国际出口,与美国、欧洲、亚太地区的学术网实现互联。目前,CERNET 网络国际和港澳地区带宽达到 10G 以上,CERNET 国内与其它互联网单位互联带宽达到 59G 以上。
  • 2001:da8::/32 China Next Generation Internet CERNET2
    • 中国下一代互联网(CNGI)示范工程核心网建设项目CERNET2
    • CERNET2项目由中国工程院协调负责。由清华大学等25所大学联合承担的“CNGI-CERNET2主干网和CNGI-6IX”是该项目的重要组成部分。
    • 2003年,为完成CERNET2建设项目,CERNET网络中心从亚太地区网络信息中心申请获得IPv6地址2001:0da8::/32
    • 2004年底建成了以2.5~10 Gb/s速率连接分布在20个城市的核心节点的CERNET2主干网,并以45 Mb/s速率与北美、欧洲、亚太等地的国际下一代互联网实现了互连。CERNET2可为全国100余所著名高校提供IPv6高速接入,为CNGI 6个主干网之间的高速互连打下了基础。
    • 具有以下几个主要特点:主干网采用纯IPv6协议,而不是IPv4/IPv6双协议栈技术,是世界上规模最大的纯IPv6网络;
  • 2001:252::/32 CNGI International Gateway Network (CNGIIGN)
    • 所有教育网出国流量都要经过它
  • 2001:7fa:5::/48 RIPE Network Coordination Center
    • 欧洲IP网络资源协调中心(Réseaux IP Européens Network Coordination Centre,缩写作 RIPE NCC),全球五大区域性互联网注册管理机构之一, 是负责管理欧洲、西亚、前苏联地区Internet资源的区域互联网注册管理机构。总部设在荷兰阿姆斯特丹,并有一个在杜拜的分支机构。

非公网地址段

  • ::1代表 loopback 地址,表示本机,等价于 IPv4 中的127.0.0.1
  • fe80::/10地址是所谓的 link local 地址段
    • 当DHCP分配失败时由机器自动生成,只在同一链路上有效,不能跨网段通信,使用链路本地址的数据包的TTL值一般被设置为1,不会被路由器转发
    • 类似于 IPv4 下的169.254.0.0/16
  • fd00::/8这个段就是通常意义上的内网地址段了,等价于 IPv4 的10.0.0.0/8, 172.16.0.0/12以及192.168.0.0/16这三个段。如果你要组建 IPv6 内网,通常是在这个大段里随机挑选一个 /64、/56、或者 /48 的子网来用。比如可以挑选 fd12:3456:789a:bcde::/64作为你家或者你公司的局域网 IP 段。
    • IPv6 规范中鼓励你随机挑选地址段,避免和别人家的地址段重复,以免并网时的麻烦。
  • fec0::/10曾经是ipv6的内网地址段,但是为了支持 Unique Local Addressing,已在2004年9月的RFC3879中舍弃,并且新系统不应该支持这类型的地址。
  • fc00::/8也是一个保留的巨大内网地址段,具体怎么用现在还没有规范。

手机的ipv6问题

  • 问题一:手机并不会默认分配ipv6,需要访问需要ipv6的网站来激活ipv6地址
    • 查看手机ipv6:
      • 华为鸿蒙系统:设置→ 关于手机→状态信息→网络
      • 网站:ipw.cn
    • 激活ipv6:访问test6.ustc.edu.cn,如果能访问,说明ipv6已经激活
  • 问题二: 手机流量ipv6的DNS解析极烂,而且无法配置DNS服务器
    • 实际情形:自己Cloudflare注册的jellyfin6.shaojiemike.top无法解析
    • 解决方法一:Clash配置里勾选ipv6和DNS解析代理,所有DNS请求会走代理.(手机的日志文件可以看出ipv6流量走了clash的路由管理)
    • 解决方法二:如果只是为了wireguard连接能ping通wg服务端6.shaojiemike.top域名,只需在wg配置文件里添加DNS服务器为8.8.8.8

ipv6地址的分配

目前 IPv6 的动态地址分配方式可以分成有状态(stateful)和无状态(stateless)两种, 动态的常见有DHCPv6,而高校中比较常见的也即其中的无状态地址自动配置(SLAAC)。

SLAAC 协议主要过程如下:

  1. 在客户端会向多播地址 ff02::2 广播 RS(Router Solicitation)信息;
  2. 路由节点在收到 RS 后即会单播回复 RA(Router Advertisement)来告知客户端路由前缀(如 2001:da8:abc:def::/64 );
  3. 客户端收到 RA 获取其所在子网的前缀,并配合 DAD 协议自动生成该前缀下唯一的全局路由地址。

多数高校中配置的 IPv6 环境会通过上述过程让客户端获取一个 /64 的地址段(如 2001:da8:abc:def:aa:bb:cc:dd/64

常见问题

ipv6偶发性断网的原因

不像校园网,ipv6分配好静态就不会变。运营商会固定周期更新ip。这种情况下,固定间隔时间点到的时候,光猫的IP地址会改变,但是下级设备无法自动跟随上游更新IP地址,导致地址冲突,所以会出现断网。所以需要重启光猫,重新分配有效ipv6。

解决办法:

  1. 打客服电话要求运营商将自动重播时间改为7天或者30天
  2. 光猫内设置定时重启,然后路由器重启获取光猫最新的IP地址

OpenWRT 给内网的每台设备分配单独ipv6

默认openwrt的ipv6是关闭的,需要手动开启,然后设置dhcpv6,这样才能获取ipv6地址。

首先要区分上网的环境是DHCP还是pppoe

  1. 如果你在开通宽带以后有宽带帐号、宽带密码;就选择拨号(PPPOE);这种上网方式,宽带运营商会分配一个宽带账号、宽带密码给用户;在未使用路由器的情况下,电脑上需要使用“宽带连接”拨号来实现上网,目前国内绝大多数用户办理的宽带,都属于pppoe拨号这种类型。
  2. 如果宽带运营商给你提供了IP地址、子网掩码、网关和DNS服务器地址;那么就应该选择静态IP
  3. 如果宽带运营商只提供了一根网线到用户家里,没有宽带帐号、密码;也没有IP地址、子网掩码、网关和DNS。这种情况下就应该选择动态IP(DHCP)
没有Prefix Delegation的OpenWRT设置办法

图形化界面修改如下:

1

  • relay 模式, 中继模式
    • 注意: 有时候客户端能获取地址却 ping 不通公网,但 ping 一下路由器的 wan口 IPv6 地址后就可以上网了。OpenWRT会更新自己的IPV6路由表,重新发现客户端。
    • wan口的中继模式配置的意思是可以让这个wan口继承上一级路由的ipv6地址分配功能,从来进一步往lan口分发这种能力。
  • RA 也就是:Router Advertisement(路由器通告报文)是一种 ICMPv6 报文,ICMP 也就是我们日常 Ping 命令使用的报文。在 IPv6 点环境中路由发出的 RA 会携带一系列的信息告知设备如何配置自己的 IP 地址。
  • DHCPv6是一个用来配置工作在IPv6网络上的IPv6主机所需的IP地址、IP前缀和/或其他配置的网络协议。 IPv6主机可以使用無狀態地址自动配置(SLAAC)或DHCPv6来获得IP地址。
  • NDP(neighbor Discovery protocol)是ICMPv6的子协议是IPV6协议体系中一个重要的基础协议,邻居发现协议替代了IPV4的ARP(MAC ip对应表),ICMP路由器发现(RA)。 它定义了使用ICMPv6报文实现地址解析,跟踪邻居状态,重复地址检测,路由器发现,以及重定向等功能。
  • PD(prefix delegation) 就是地址委派,来分配IPV6地址。

或者参考yfy的脚本的关于网络设置的一段:

# === ipv6 ===
if [ $IS_PPPOE -eq 0 ]; then
    # === ipv6/dhcp ===
    echo "[INFO] set ipv6/dhcp"
    uci set dhcp.lan.ra='relay'
    uci set dhcp.lan.dhcpv6='relay'
    uci set dhcp.lan.ndp='relay'
    uci set dhcp.lan.ra_flags='none'
    if ! uci -q show dhcp.wan6
    then
        uci set dhcp.wan6=dhcp      #add named section, name=wan6
    fi
    uci set dhcp.wan6.interface='wan6'
    uci set dhcp.wan6.dhcpv6='relay'
    uci set dhcp.wan6.ra='relay'
    uci set dhcp.wan6.ndp='relay'
    uci set dhcp.wan6.master='1'
    uci commit dhcp
else
    # === ipv6/pppoe ===
    # 设置wan.ipv6='auto'就可以正常ipv6上网了
    # 另外设置lan.ip6class='wan_6'可以避免LAN获得ULA地址(私有ipv6地址)
    echo "[INFO] set ipv6/pppoe"
    uci delete network.wan6     #pppoe会自动生成wan_6,不需要wan6
    uci set network.wan.ipv6='auto'
    uci del_list network.lan.ip6class
    uci add_list network.lan.ip6class='wan_6'
    uci commit network

    uci set dhcp.lan.dhcpv6='server'
    uci set dhcp.lan.ra='server'
    uci commit dhcp
fi
家中的ipv6网络

由于家庭情况,我不能动入户的拨号光猫,但是我发现它会给下一级的两个路由器(客厅和卧室)分别分配单个ipv6和ipv6段 2409:8a50:ec3:4f70:5e02:14ff:fe45:a054/642409:8a50:ec3:4f70:62be:b4ff:fe08:4bc0/128,但是参考教程1操作后, 遇到了同样的问题:

wan6口一切正常,但是lan口怎么都获取不到IPv6地址。这个问题我遇到过,在网页上怎么改都没有用,最后是重置openwrt解决的。碰到类似的问题也可以试试重置。

命令行技巧

命令行查看ip所属实际地址

$ curl ipinfo.io/202.38.64.58
{
  "ip": "202.38.64.58",
  "city": "Shanghai",
  "region": "Shanghai",
  "country": "CN",
  "loc": "31.2222,121.4581",
  "org": "AS24362 CERNET2 IX at University of Science and Technology of China",
  "timezone": "Asia/Shanghai",
  "readme": "https://ipinfo.io/missingauth"
}%

参考文献

https://3g.163.com/dy/article_cambrian/EKMFF7TF0537828W.html

https://bgp.he.net/AS23911#_prefixes6

https://bgp.he.net/AS23910#_prefixes6

https://blog.icpz.dev/articles/notes/odhcpd-relay-mode-discuss/

https://l2dy.sourceforge.io/2021/05/11/openwrt-ipv6-relay.html

https://www.lategege.com/?p=676

ipv6偶发性断网的原因: https://jaylinwu.wordpress.com/2022/03/24/optical-network-terminals-enable-ipv6/