故事背景
在此之后我又体验了不同的VPS提供商,发现v6这个情况真的是特别复杂。买了个NATSeek德国NAT VPS(给/128的v6,和邻居位于一个/64子网。关于我对不同v6的描述,下面会说),以及 Wikihost的纯v6款(给/64的v6地址块,和邻居位于/48子网)
但是发现这两家都有一个相同的问题:IPv6反应特别慢,表现为长时间闲置后,IPv6 PING不通。主动发起连接大概几秒钟后又可以维持几分钟通信。即俗称的 “IPv6断流” 。
而同样给IPv6 /64地址块的Bytevirt日本NAT则没有这个问题。NATSeek的加拿大机房v6是HE的,也没有这个问题。
临时解决方案
二者都可以通过Cron脚本定时PING网关来保活。
使用方法:
SSH连上服务器,执行 nano /etc/cron.d/ping
,在文件里输入*/1 * * * * ping ipv6.google.com -c 2
,CTRL+O,CTRL+M保存,CTRL+X退出。
这条命令是每分钟定时PING谷歌2次。
另外应该也可以把DNS设置为IPv6优先,来实现保活,不过可能上网体验就不好了……
继续……
前段时间买了个新的All in boom,给装了PVE系统,划分子网,在BuyVM买了个VPS,给一个/64和一个/48,于是我通过VPN隧道把/48分配到家里了。由于网络是多层架构,所以IPv6子网也需要继续划分,昨天折腾了一天,总算有点收获。今天写个教程,本想写给未来的我看的,免得又忘了(笑)。
那篇文章被删去了开头结尾,出现在某个采集站上,并声称是它原创,我不点名了,做人应该有点自知之明。
测试的服务器供应商(网络地区和类型)
Bytevirt(日本NAT4+v6,/64地址块,和邻居位于/48子网内)
Wikihost(日本纯IPv6,/64地址块,和邻居位于/48子网内)
NATSeek(德国NAT4+v6;加拿大NAT4+v6,/128单个IP,和邻居位于/64子网内)
BuyVM(卢森堡,完全路由的/64和/48地址块各一个)
Cloudcone(洛杉矶。和邻居位于/64子网内的单个IP,共三个)
HE.NET的6in4隧道(洛杉矶,温哥华,三段完全路由的IPv6子网)
更多商家的统计请看此贴: 征集整理,各大VPS供应商对IPv6/子网路由的支持程度
操作系统(虚拟化环境):
Openwrt(QEMU/宿主机)
PVE 8.1.3(宿主机/KVM)
Debian 12(LXC/KVM)
用到的软件
ndppd #//用于通告,邻居发现协议。下述。
#ndpresponder #//ndppd魔改版,下述。
radvd #//用于发布RA报文,指使客户端可以根据RA里面的前缀,根据MAC自己选个小尾巴(无状态)
#dnsmasq #//简易的DHCPv6服务器,不包含分配PD前缀功能,但可以指示客户端在一个地址池里面选个后缀。
#kea-dhcp6-server //超复杂的DHCPv6服务器,支持分配前缀(但不给路由),太复杂了暂时没研究明白。
NDPPD官方文档不建议通告/120或更大的前缀,日志里会有这个警告,但可以无视掉。
RADVD要求配置文件中设定前缀掩码必须为/64,多了少了都不行!(SLAAC无状态要求前缀大于等于/64,太小的子网没法划分)
DNSMASQ好像也要求子网大于等于64,否则一直提示地址池已耗尽,可能是bug?(有状态支持/64以下的小子网)
简易科普
在开始之前还有一件事……如果你不了解IPv6,可以先看看我上面提到的科普帖,或者我之后可能再写一个。
首先,需要注意的是,IPv6因为地址空间多,所以也比v4复杂。
例如Openwrt上某张网卡现在显示如下:
(出于隐私保护,我这里随便编了一个内网IP和PD,想象它是2开头的公网IP)
实际上,用新版本的Openwrt就会发现,PPPoE拨号会出现两个WAN接口,其中一个专门存放v6.原来那个上面只有fe80。)
接口LAN
协议:静态分配
MAC:53-61-79-6F-72-69
IPv4:192.168.1.1/24
IPv6: fd22:1209:d0c1:8100::1/56
//第一个v6,尾巴 ::1 是比较简单的静态分配。后边/56代表它位于8100这个子网内。和192.168.1.1/24的24一样。
IPv6:fd22:1209:d0c1:8100:5161:79ff:fe6f:7269/64
//第二个v6,后缀 ::5161:79ff:fe6f:7269,可以看到和物理地址很像,它是通过SLAAC无状态分配的,其中MAC第二位的比特反转。原来是0就变成2,1变成3,2变成0,3变成1,然后中间插入fffe凑数。默认Linux不开启隐私扩展,所以尾巴能反查出网卡的物理地址和制造商。(别查了,这个是虚构的,单词“Sayori”转换成ASCII的HEX)
IPv6 PD:fd22:1209:d0c1:8100::/56
//这个v6写着是PD,即路由前缀。通过DHCPv6一起分配,如果服务器支持的话。这代表着你可以继续划分子网。然而经过测试,目前常见的开源DHCPv6服务器只能分配PD,但不提供任何路由功能。运营商的企业级路由器(思科、华为……等AE)可能支持这一功能,我没有测试过。
注意,这个前缀来自运营商或者其他网络接口,Openwrt可以为某个接口设置PD。
链路本地地址:fe80::5161:79ff:fe6f:7269/64
//同第二个。
为什么静态地址会出现无状态v6呢?(假设那不是手动配置的)
答:因为网卡接收RA报文,可以看看/etc/sysctl.conf是否包含 net.ipv6.conf.all.accept_ra = 2
之类的(或all换成网卡名,本例是lan);或者是 /etc/network/interface 里面包含 accept_ra 2
字段。
如果本机就发送RA报文,且本机网卡接收RA=2,则自己也会为自己增加一个无状态v6,笑死。
路由器后方的设备,假如它是Debian。想在其第二个网卡上用作VPN服务器,给拨入设备获得公网v6
局域网 1
DHCP
已联机
192.168.1.2
子网掩码 (mask):255.255.255.0
IPv6 地址:fd22:1209:d0c1:8100:211:32ff:fe12:3456/64
//通过无状态SLAAC分配,可用的前缀由在路由器发送的RA报文里指示。fd22:1209:d0c1:8100::2021/128
//这个v6,尾巴 ::2021 是比较简单的,属于通过DHCPv6有状态分配(也可以静态),通过DHCPv6分配的有状态v6,好像都是/128,但/128的不一定是DHCPv6分配的。fe80::211:32ff:fe12:3456/64
//链路本地地址
(都看出来这是群晖上复制的信息了吧)
局域网2,
局域网 2
IPv6 地址:fd22:1209:d0c1:81F0::1/60
//手动分配。
注意,网卡2想要81F0/60全段,但是现在没有PD路由给它。
路由器的虚拟隧道接口WAN
协议: PPPoE
IPv4: 175.45.176.72/32
//不重要(公网IP)
IPv6: fe80::1d55:40be:8bdc:b564/128
//又一个fe80开头的地址。fe80的链路本地地址相当于v4 DHCP爆炸时获取的169.254.1.0~254.255,但在IPv6里面很重要。
IPv6: 2408:8226:8888:8888:1d55:40be:8bdc:b564/64
//山西太原联通(公网IP)
IPv6 PD:fd22:1209:d0c1::/48
(想象这也是一个公网IP段——在DN42里面确实是,且我真的注册了它,符合规范的情况下,PD和本机的v6不应该在一个小段内。)
另外说一个题外话,小科普:
2001:0DB8:0123:4567:89AB:CDEF:0123:8888
IPV6地址长八段,前三段是网络(2001:0DB8:0123:),第四段是子网(4567),后四段都是主机(:89AB:CDEF:0123:8888)
部分描述引用自“IPv6 中文资料和培训”(最底下放参考链接):
几种常见前缀长度和分配场景
32 RIR/NIR(区域/国家互联网注册机构)分配给有 ASN 的运营商、互联网公司、大型企业。是地址最小分配单元(再小就不给了)。
40 运营商向有多个(256个以内)站点和数据中心的大型企业分配的前缀
44 运营商向有多个(16个以内)站点和数据中心的中型企业分配的前缀
48 运营商向中小客户分配的常见前缀长度。或大中企业内一个站点的前缀
56 宽带运营商给家庭用户和小微企业分配的最小前缀长度(最大子网大小)
64 末端设备子网,/64 是很多协议硬性要求的(IPv6 无广播风暴风险)
127 路由器点对点链路,此处不是为了节约地址而是防止一种资源耗尽型攻击
最开始的时候,建议是运营商给每个终端用户都分配/48的前缀。然而v6地址再多也经不起这么挥霍。于是最后约定了,给有需要的专业客户分配/48,而对于家用宽带,一般则是/56,支持用户自主分配256个子网。
大部分地区的电信,都给/56的PD;而联通和移动通常是/60.
部分配置不规范的地区可能给/64的PD,甚至只给一个v6,没有PD。
山西联通在我投诉后,终于给/60了,以前/64真不知道怎么过来的。
投诉完之后,太原联通终于给分配/60位的IPv6 PD了,联通就是喜欢不承认问题然后偷偷改正。
在公网上通过BGP宣告路由时,最低广播的前缀长度是/48,在DN42内则为/64。
(BTW,IPv4在公网上是/24,在DN42里是/29,任播/32只有一个地址算是例外,需要手动添加)
算是个小科普吧。中场休息完,那就继续。
结合上面的接口,可以得出如下信息:
运营商给你可以划分子网的范围是 fd22:1209:d0c1:0000::0
~ fd22:1209:d0c1:FFFF:FFFF:FFFF:FFFF:FFFF
,合计2^80个IP。
其中LAN口只使用了 fd22:1209:d0c1:8100::/56 ,这可能是出于其他目的。
比如 8200::/56 分配给家里wifi访客;
2100::/56 分配给VPN网卡,由于本机拥有公网IP(175.45.176.72 //朝鲜),因此可以利用Softether VPN搭建私人隧道,在公司等没有v6的场合,利用v4回家,获取家里的v6地址段。如果需要的话我再写一篇教程。
……等等等等。
如果有人访问 fd22:1209:d0c1:开头的IP,通过BGP在公网上进入运营商后,运营商最终会把包送到你的网关手里,这时候就由你自己负责在内网的路由了。
运营商那边只需要一条路由: fd22:1209:d0c1::/48的下一跳是XX小区BRAS的XX端口,对端IP地址是fe80::1d55:40be:8bdc:b564
(也可能是 2408:8226:8888:8888:1d55:40be:8bdc:b564
)
fd22:1209:d0c1开头的全部给你。
有些人不信任三大ISP,以为又搞什么花样,实际上必然是全部都给的,不然的话运营商的路由表会多到炸的。HE隧道和BuyVM也是同理,它们本来就知道,这段开头的全部默认给你的网关。
因此它们是完全路由的。
--
如果还是没听懂?那就亲自测试!
主要就是测试IPv6是否完全路由,如果是,那后面就不用看了,部署难度低很多;否则的话,需要一点小小的人为干预。不然找不到路。
我折腾这么久就是为了解决后面这个问题。
在网关机开启IPv6报文转发,使其充当路由器,转发【源IP和目标IP都不是自身】的数据包。
在默认情况下,这些包会被当做无效报文丢弃。Openwrt防火墙里面的【丢弃无效数据包】选项就是干这个的,开了之后就断网喽。
开启报文转发:
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.forwarding = 1" >> /etc/sysctl.conf
sysctl -p
然后在外网(假设是电信)路由跟踪这个联通PD内任何一个IP,如果能显示到你的网关,那就是Routed Prefix,我叫做:可路由 的前缀。
注意:假设你的v6已经正确分配给设备,这里不再赘述,篇幅太长了。
Windows执行tracert status.sayori.love
注意,以下路由信息只是示例IP,不代表实际情况。
这个域名是我的探针。
通过最多 30 个跃点跟踪
到 status.sayori.love [fd22:1209:d0c1:8100:211:32ff:fe12:3456] 的路由:
1 <1 毫秒 <1 毫秒 <1 毫秒 240e:326::1 //山西太原电信 AS4134
2 <1 毫秒 <1 毫秒 <1 毫秒 240e::1 //电信骨干网 AS4134
3 <1 毫秒 <1 毫秒 <1 毫秒 2408::2 //联通骨干网 AS4837
4 <1 毫秒 <1 毫秒 <1 毫秒 2408:8000:4001:: //太原联通小区BRAS AS4837
5 <1 毫秒 <1 毫秒 <1 毫秒 2408:8226:8888:8888:1d55:40be:8bdc:b564 //我的路由器 AS4837,它同时也是 [fd22:1209:d0c1:8100::1],但这个IP只在出站显示。
6 <1 毫秒 <1 毫秒 <1 毫秒 debian.lan [fd22:1209:d0c1:8100:211:32ff:fe12:3456] //Debian, AS4242423406
跟踪完成。
其中最最重要的就是第五个路由器,它必须显示在路由跟踪里面,代表数据包正确经过了它。
(即运营商BRAS知道那把前缀都给你,这就是可路由的)
路由跟踪一个未主动宣告的IP子网,81f0。
上面提到了,打算把81f0/60分配给Debian。
尽管81F0/60位于8100/56里面,但精细的路由,op网关不知道怎么走。
所以:
通过最多 30 个跃点跟踪
到 fd22:1209:d0c1:81f0::666 的路由:
1 <1 毫秒 <1 毫秒 <1 毫秒 240e:326::1 //山西太原电信 AS4134
2 <1 毫秒 <1 毫秒 <1 毫秒 240e::1 //电信骨干网 AS4134
3 <1 毫秒 <1 毫秒 <1 毫秒 2408::2 //联通骨干网 AS4837
4 <1 毫秒 <1 毫秒 <1 毫秒 2408:8000:4001:: //太原联通小区BRAS AS4837
5 <1 毫秒 <1 毫秒 <1 毫秒 2408:8226:8888:8888:1d55:40be:8bdc:b564 //我的路由器 AS4837
6 * * * 请求超时
……
30 * * * 请求超时
跟踪完成。
如图所示,到了家里的网关(第五跳)之后就变星星了,路由器不知道该给谁数据包。
这段小子网则不是全段路由的。(尽管运营商给的前缀大子网是),除非你配置静态路由。但很多时候你没法动网关。
另外,运营商给了/48的子网,如果家里就有一大堆机柜和All in boom,服务器集群,那该怎么寻路呢?
如果运营商都给的是非全段路由的PD前缀,那么第四跳的联通网关处就丢了,连第五跳也不显示了。
现在才是本文的重头戏……
NDPPD通告
Ndp:邻居发现协议。
别忘了,上面还提到了魔改版——好好的不用,为何蹦出个魔改版?
答案是这样: IPv6 Neighbor Discovery Responder for KVM VPS
文中提到,如果网关是fe80,且服务器虚拟化类型是KVM,则NDP报文送不出去,网关NDP缓存过期了,就丢包了,下面的小鸡自然就断流了。
我工单问了下natseek的老板,果不其然,德国母鸡的网关是 fe80::1。
而ipv6虽然断流,但仍然可用,就是用魔改版播出去的。
至于断流的问题,这个只能叫他上游想办法了,比如写静态路由之类的。要么客户端一直ping来保活,否则无解。
注意:运行NDP,需要本机开启v6转发,需要开启RA报文的接收,也需要网卡代理NDP,三者缺一不可,少一个就通不了。同时各个路由器都需要正确划分子网。
为所有网卡开启RA和NDP:
echo "net.ipv6.conf.all.proxy_ndp = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.accept_ra = 2" >> /etc/sysctl.conf
sysctl -p
all可以换成自己的网卡名,否则是所有网卡。
ra开了后,还会自己获得slaac的v6.
不想要的话,执行
echo "net.ipv6.conf.all.autoconf = 0" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.autoconf = 0" >> /etc/sysctl.conf
禁用SLAAC但保留RA。
因为RA除了可以指示客户端可用前缀外,也会通告,比如自己就是网关,默认路由器等。Openwrt图形界面里面都有。
网络——接口——br-lan——编辑——DHCP 服务器——IPv6 设置
可开启RA,DHCPv6和NDP,RA开启后多出“IPv6 RA 设置”,可通告自己是不是默认路由器,是否开启无状态SLAAC,RA里面的特殊指示……等。
Debian等系统没有特别为路由器优化,就得手动来了。
比如那个联通路由器获得了/48,它就在每一个接口分配/56,wan口有/48,所以工作没问题。
然后有/56的如果内网的设备还想继续划分/60的子网81F0~81FF(比如Windows笔记本开热点时会自动请求/62的前缀,要求子网不少于/60)可是路由器不知道81F开头的应该给内网Debian,就需要NDP通告了。
/60还能分,分到/64就是最小了。
内网的Debian安装NDPPD:
apt update
apt install ndppd
nano /etc/ndppd.conf
在编辑器输入如下内容:
proxy eth0 {
router yes
timeout 600
autowire no
keepalive yes
retries 9
promiscuous no
ttl 86400
rule fd22:1209:d0c1:81F0::/60 {
static
}
}
eth0接口是和上级互联的wan口,通过它,告诉上游“我广播的前缀(这里是 fd22:1209:d0c1:81f0::/60)有人在使用,下一跳地址是我,不要丢包,我会找到路的。”
其他参数,过期时间等无所谓,根据实际情况来。
保存,然后 service ndppd restart
过一会即可通了。
tracert fd22:1209:d0c1:81f0::666
通过最多 30 个跃点跟踪
到 fd22:1209:d0c1:81f0::666 的路由:
1 <1 毫秒 <1 毫秒 <1 毫秒 240e:326::1 //山西太原电信 AS4134
2 <1 毫秒 <1 毫秒 <1 毫秒 240e::1 //电信骨干网 AS4134
3 <1 毫秒 <1 毫秒 <1 毫秒 2408::2 //联通骨干网 AS4837
4 <1 毫秒 <1 毫秒 <1 毫秒 2408:8000:4001:: //太原联通小区BRAS AS4837
5 <1 毫秒 <1 毫秒 <1 毫秒 2408:8226:8888:8888:1d55:40be:8bdc:b564 //我的路由器 AS4837
6 <1 毫秒 <1 毫秒 <1 毫秒 fd22:1209:d0c1:8100:211:32ff:fe12:3456 //Debian AS4242423406 它也同时是 fd22:1209:d0c1:81F0::1/60。如果关闭那个无状态地址,则这里回显的就是fd22:1209:d0c1:81F0::1。
7 * * * 请求超时
……
30 * * * 请求超时
跟踪完成。
最重要的Debian显示出来了,那就是没问题的。这样即可实现【伪PD】的效果,跟踪81f0段内任何一个IP,都经过了Debian,和PD的效果一样。模仿PD。
此时查看Op的IPv6路由:
路由
以下规则当前在系统中处于活动状态。
IPv6 路由
IPv6 邻居:
IP 地址 MAC 地址 接口
fd22:1209:d0c1:81f0::666 00:11:32:12:34:56 lan
fd22:1209:d0c1:81f0::1 00:11:32:12:34:56 lan
即fd22:1209:d0c1:81f0::开头的(只显示两个,但根据路由跟踪结果,可见是全/60段),下一跳应该交给debian。
然后我给五千公里外(延迟约100ms)的笔记本连上VPN,再次跟踪:
tracert fd22:1209:d0c1:81f0::666
通过最多 30 个跃点跟踪
到 fd22:1209:d0c1:81f0::666 的路由:
1 <1 毫秒 <1 毫秒 <1 毫秒 240e:326::1 //山西太原电信 AS4134
2 <1 毫秒 <1 毫秒 <1 毫秒 240e::1 //电信骨干网 AS4134
3 <1 毫秒 <1 毫秒 <1 毫秒 2408::2 //联通骨干网 AS4837
4 <1 毫秒 <1 毫秒 <1 毫秒 2408:8000:4001:: //太原联通小区BRAS AS4837
5 <1 毫秒 <1 毫秒 <1 毫秒 2408:8226:8888:8888:1d55:40be:8bdc:b564 //我的路由器 AS4837
6 1 毫秒 1 毫秒 1 毫秒 fd22:1209:d0c1:8100:211:32ff:fe12:3456 //Debian AS4242423406
7 107ms 108ms 112ms fd22:1209:d0c1:81f0::666 //笔记本远程接入 AS4242423406
跟踪完成。
那么这就寻路成功了!
因为网关同时拥有不同段的IP,那么来个回程路由(笔记本——太原电信)
通过最多 30 个跃点跟踪
到 240e:326:XXXX:YYYY:AAAA:BBBB:CCCC:DDDD 的路由:
1 107ms 108ms 112ms fd22:1209:d0c1:81f0::1 //Debian AS4242423406。对应去程第6跳
2 108ms 109ms 112ms fd22:1209:d0c1:8100::1 //Openwrt AS4242423406 (如果接口接收RA,且自动配置,则可能回显无状态地址 fd22:1209:d0c1:8100:5161:79ff:fe6f:7269。对应去程第5跳)
3 109ms 109ms 109ms 2408:8000:4001::1//太原联通小区BRAS AS4837,对应去程第4跳。尾巴变了也是因为网关在不同接口有不同的ip,默认显示你所在接口的。如果访问其他接口的ip,也能立刻用它应答你。
4 109ms 109ms 109ms 2408::1 //联通骨干网 AS4837,对应去程第3跳。
5 109ms 109ms 109ms 240e::2 //电信骨干网 AS4134,对应去程第2跳。
6 110ms 109ms 109ms 240e:326:: //山西太原电信 AS4134,对应去程第1跳。
7 110ms 109ms 109ms 240e:326:XXXX:YYYY:AAAA:BBBB:CCCC:DDDD //某个电信宽带的光猫,对应去程第0跳(不显示)。
跟踪完成。
重新梳理一下:
Op路由器获得了/48,给LAN口/56,LAN里面有个设备要继续划分,要拿一个/60,但是Op网关不知道这个60该给谁(Debian),Debian通过NDP直接宣告这个段,要求Op给它。这样的话,如果你无权操作网关,也可以获得一个可以路由的段了。
我是以全段路由的子网里面划分小子网为例,如果运营商(通常是VPS供应商,御三家给的v6全都是PD)给你的v6/64不默认没有路由,就可能断流,得这样保活了。这样随时跟踪都不会掉,并且跟踪子网总会显示经过网关。
Bytevirt默认没有全路由,正确通告后即可实现。
跟踪我:
2a12:bec0:166:XXX::2
……省略前文
11 8 ms 8 ms 8 ms 2001:218:2000:5000::48a
12 9 ms 8 ms 8 ms 2a02:6ea0:8:1200:5500::6
13 9 ms 8 ms 8 ms 2a12:bec0:166:XXX::1 //正确显示
14 * * * 请求超时。 //因为 2a12:bec0:166:XXX::2 没有分配给设备,或者客户端禁PING。
……
30 * * * 请求超时。
跟踪邻居:
2a12:bec0:166:YYY::2
……省略前文
11 8 ms 8 ms 8 ms 2001:218:2000:5000::48a
12 9 ms 8 ms 9 ms 2a02:6ea0:8:1200:5500::6
13 * * * 请求超时。 //本应该显示2a12:bec0:166:YYY::1 的位置,什么也没有。因为其没有宣告路由,或者本机没有开启IPv6转发。
14 * * * 请求超时。
……
30 * * * 请求超时。
魔改NDPPD
如果你的VPS是KVM虚拟化,且网关是fe80,那原版ndppd可能不起作用,需要用魔改版。
注意,用魔改版之前,再检查一遍,商家给你的/64,到底是你和邻居都在这个网段内(共享),还是你拥有一个段。
这招可被滥用。如果宣布自己无权使用的段,则违反商家的ToS,可能会导致删鸡。使用前再确认一遍商家的策略。
注意:魔改版似乎会断流,但至少能从不可用到可用,还管那么多,能用就行。
apt install zip
wget https://blog.ilolicon.com/wp-content/uploads/2023/08/ndpresponder.zip
unzip ndpresponder.zip
chmod +x ndpresponder
mv ndpresponder /usr/bin/
nano /usr/lib/systemd/system/ndpresponder.service
在编辑器内添加如下内容:
[Unit]
Description=NDPPD Daemon
After=network.target
[Service]
ExecStart=/usr/bin/ndpresponder -i 接口名 -n IPv6前缀/掩码
Restart=on-failure
RestartSec=2
[Install]
WantedBy=multi-user.target
把接口名换成你的WAN口,IPv6前缀/掩码 换成要宣告的前缀,如 fd22:1209:d0c1:81f0::/60
然后保存,再执行
systemctl enable ndpresponder
systemctl start ndpresponder
systemctl status ndpresponder
查看状态,ping两下,应该就显示出来了。
累死我了,写了好几个小时,希望有所帮助。
欢迎大佬来纠错,我可能也没理解透。
dnsmasq和kea-dhcp6-server的配置不写了,一个很简单,一个很难,愿意完整看完的,也不是伸手党,自己应该会看文档或者问GPT的……
总结:
NDP,RA,转发,网关是否为fe80……这些因素都有影响……昨天一天都研究这个了,应该没啥问题。
最后表扬一下HE,BuyVM,还有三大运营商,给的v6是可路由的。
再表扬下Bytevirt,上游配置很正常,轻松就能通。
最后点名批评 CloudCone,才给三个ipv6,还不能把另外两个分配给VPS后面的客户端。
那些不给v6的,甚至都不用出现在这里,反正没v6的VPS,再好我也不用……
最后再补充一下,目前三大运营商的IPv6地址块范围:
联通: 2408:8000::/20
即 2408:8000::0 ~ 2408:8fff:ffff:ffff:ffff:ffff:ffff:ffff
合计2^108个,不是2408::1,上文随便举的。
移动: 2409:8000::/20
即 2409:8000::0 ~ 2409:8fff:ffff:ffff:ffff:ffff:ffff:ffff
合计2^108个
电信: 240e::/18
即 240e::0 ~ 240e:3fff:ffff:ffff:ffff:ffff:ffff:ffff
合计2^110个
联通和移动加起来也才到电信的二分之一,所以电信给的慷慨点。
但该黑还是黑的。