论坛主贴:
https://91ai.net/thread-1159839-1-1.html
github:
https://github.com/leitbogioro/Tools
图库为 sm.ms,国内用户需挂梯子全局才能查看。
以下案例除了我自己在用机型,来自其他坛友反馈报告的案例部分均已做隐**理,各位不必担心自己机器的真实 IP 地址等信息泄露。
省流版
脚本在 Crunchbits 重装,且支持写入多条 IPv6 规则的条件限定为以下,缺一不可。 如果你的机器没有启动项随意变动的问题,设置启动顺序部分可以忽略。
输入 lsblk -ip ,如果发现系统分区在 /dev/sdb ,请务必在后台重新设置一下启动顺序,然后重启系统,再次查看 lsblk -ip ,确保当前系统内,系统所在分区在 /dev/sda重装为 Debian/Kali,红帽 9+ Fedora 全系,可保证多 IPv6 配置不会丢失;重装为 AlpineLinux、Ubuntu、Windows 或自定义 dd 后,多 IPv6 配置会丢失切不可逆,除非用后台模板再次重装;系统本身必须拥有 IPv4 网络,纯 IPv6 栈机器暂不支持多 IPv6 配置添加。Crunchbits 重装时如果发现安装器提示无法找到硬盘,是因为其硬盘、光盘启动顺序经常错乱导致的,而非脚本判断系统安装盘失误,安装时如果出现此类错误提示,在面板里重新设置启动顺序,重启安装器即可解决:Crunchbits 特价机 IPv6 网络部分于 2023 年 8 月 10 日 UTC+8 4:00 时起开始离线,表现特征为 ping 外部 IPv6 服务器时,显示“From _gateway ( fd2e:: ) icmp_seq=1 Destination unreachable: Port unreachable”(来自网关 xxx,目标不可达,端口无法建立),其 IPv6 网络也无法被外界访问。无论是从后台模板建立的系统,还是用我脚本重装过后的系统,目测原因是 IPv6 栈网络正在维护,此时水友们如果面临“系统中 IPv6 配置已有,且 IPv6 不可访问”此种状况,可以在脚本运行时加入 --networkstack "bi 或 bistack 或 dual 或 two" ,如:
[ol]bash InstallNET.sh -debian "12" --networkstack "dual"
bash InstallNET.sh -kali "rolling" --networkstack "dual"
bash InstallNET.sh -centos "9" --networkstack "dual"
bash InstallNET.sh -alma "9" --networkstack "dual"
bash InstallNET.sh -rocky "9" --networkstack "dual"
bash InstallNET.sh -fedora "38" --networkstack "dual"[/ol]复制代码来让系统以“双栈”配置安装(实际上 IPv6 部分暂时不可用,仅有有效的 IPv6 配置),后续等待商家 IPv6 网络部分修复。IPv4 部分始终正常,不影响重装。
将硬盘设置为启动顺序第一位:
访问 VNC,发现此时安装器停留在磁盘 /dev/sda 无法写入阶段,按图示重启即可:
再次自动进入安装环境,anaconda 完成环境自检,新系统可顺利安装:
Debian 安装器硬盘无法写入报错处理方法和以上红帽系一致。
敬告:本文篇幅“有点”长,可能是我写过的技术类文章里最长的一篇,如果你也和我一样对技术有着狂热追求,欢迎耐心读完。否则读完省流版使用说明后,您就可以放心离开。
以下好戏开场:
Crunchbits 案例机型特点展示
这几天在论坛霸榜的 Crunchbits 特价鸡是真香,2 核 3GB,年付不到 14 刀,在此恐怖如斯的性价比加持下,其他诸如网络会无故突然离线,硬盘容量稍小,库存少等等问题,都不算“demerits”,只能算“features”。
本文不对该机型的详细硬件配置再做过多论述,感兴趣的自搜论坛相关 performance bench 贴。我只把我感兴趣的特点列举一下:
这家面板从界面来看,和我之前做过测试的 Kuroit 几乎一致,现在有不少商家用的都是这套后台,界面清爽,各项功能也不缺,经坛友点拨,提供商来自:https://virtfusion.com/ ;
后台自带模板种类比较丰富,每套大类别下的 Linux 发行版都带有其最新版本,重装速度不慢,部署技术为常见的 cloud init,会瞎改 Debian 系网络配置文件目录,cloud init 传统迷惑操作;
查看 VNC 很方便;
支持挂载光盘,目前仅有一个 Debian 11 iso,但不支持自定义上传或挂载远程的,而且这个功能会对重装造成一些干扰,这个后面会说;
IPv4 部分配置“稍微”有点不规则,主 IPv4 为 104.36.84.237,IPv4 网关为 104.36.84.1,掩码为 255.255.255.255,按经验来说,最合适的掩码值应当为 24(255.255.255.0),实际掩码值无疑有点过小,不过这无所谓,我脚本处理这种案例时,能通过先给临时掩码 24,以通过 Debian installer 网关检测,先让系统顺利装完,再在安装后期将掩码改回原来的 32,确保安装、日常使用时都不会有任何问题。其他同类脚本如果只给 dhcp 或按原样 IPv4 参数以静态配置,Debian installer 一定会报错。
重头戏来了,IPv6 才是这台玩具的亮点,商家给了一个 2606:a8c0:3:6f:: 段,其中可以自由添加属于该段中的任意 IPv6,虽然上限只有 50 个,不过这也很炸裂了。
如果开启了多个 IPv6,如 2606:a8c0:3:6f::a/b/c/d/e/f/10/11 等,2606:a8c0:3:6f:: 段第一个 IPv6 地址,即它自己必须要被正确地静态配置,否则 2606:a8c0:3:6f::xxx 无**常连接网络。
IPv6 网关为 fd2e:: ,虽然不是常见的 fe80::1 ,但也算符合规范。属于 IPv6 规范中的众多内网 IPv6 地址之一。
IPv4 和 IPv6 幸亏都属于同一个 interface ,不然又有大麻烦。
先行研究,确定写入策略
机器抢到手,自然第一时间就要进行重装测试,后台默认给的 IPv6 其实已经有两个,一个是 2606:a8c0:3::64/128 ,另一个是 2606:a8c0:3:6f::a/64 ,第一次重装完发现系统能登陆,欢迎页面也能返回 2606:a8c0:3:6f::a DNS 查询结果,我本以为没什么问题了。
后来发现自己还是 too young,没意识到仅写入 2606:a8c0:3:6f::a/64 IPv6 配置所引发的后果,直到有同款机型的坛友 hostlocmjj 私信我报告了重装后 IPv6 工作不正常的问题,经过我这边的验证,问题确实存在,我才开始重视起来并开展脚本重装后对多 IPv6 的写入研究。
就像上述所言,不配置 2606:a8c0:3::64/128 的情况下,仅配置该段下属的其他 IPv6,系统中 IPv6 网络是不可访问的,原因是脚本之前处理双栈机时,默认的状况是视机器仅有一个 IPv4 和 IPv6,重装前仅会获得他们之中的一个进行配置操作,而 IPv6 部分获得并配置的是 2606:a8c0:3::a ,而非 2606:a8c0:3::64,所以才造成了 IPv6 网络工作不正常。
随着 IPv6 的普及,越来越多的服务器开始拥有双栈配置,许多为了节省 IPv4 成本,仅有 IPv6 的单栈机更是不在少数,而且由于 IPv6 的理论容量为 2 的 128 次方,与 IPv4 的理论容量 2 的 32 次方相比,简直可以用“浩瀚”来形容,以目前人类的需求,应该是不会面临 IPv6 地址资源“枯竭”的那一天。
所以我在脚本中处理 IPv6 的部分,早就下了很大功夫以适配,前瞻性的工作做得多早都不为过。
由于 IPv6 数量大的特性,未来更多双栈,甚至单栈 IPv6 机型,不排除会有被分配一个大 IPv6 段,拥有多个 IPv6 公网地址的特性,本篇文章的聚焦点,就是解决 Crunchbits 双栈机中,多 IPv6 的配置难题。
首先是 Debian/Kali 系,在默认有两个 IPv6 地址配置下,我们先来查看一下模板系统 Debian 12 中网络配置文件详情:
[ol]# control-alias eth0
iface eth0 inet6 static
address 2606:a8c0:3::64/128
gateway fd2e::
# control-alias eth0
iface eth0 inet6 static
address 2606:a8c0:3:6f::a/64[/ol]复制代码
可以看到,配置文件中共有两个 iface eth0 inet6 static 条目,每个条目下分别对应着各自的 IPv6 地址/掩码后缀,其中 2606:a8c0:3::64/128 被分配了一个 fd2e:: 网关,而 2606:a8c0:3:6f::a/64 并没有,说明两者共享同一个网关配置。
我们很容易就能推测出,如果在后台再添加一条新的 IPv6 地址,如 2606:a8c0:3:6f::b/64 ,那么网络配置文件格式就是如下这样:
[ol]# control-alias eth0
iface eth0 inet6 static
address 2606:a8c0:3::64/128
gateway fd2e::
# control-alias eth0
iface eth0 inet6 static
address 2606:a8c0:3:6f::a/64
# control-alias eth0
iface eth0 inet6 static
address 2606:a8c0:3:6f::b/64[/ol]复制代码
如果再添加 10 条,20 条,甚至直接把 Crunchbits 后台允许添加的最多 IPv6 地址给添加满呢?我不敢想象,在 Debian 系适用的自动应答文件 preseed.cfg 中的 d-i preseed/late_command 阶段,考虑到 iface eth0 inet6 static, address IPv6 地址/掩码后缀, 另起一行间隔共 3 行,需要添加 50 条 IPv6 地址的时候,那个画面有多绚烂。