全球主机交流论坛

标题: Linux一键重装完善网络适配,IPv6优化,丰富安装状态显示 [打印本页]

作者: 天权璇玑    时间: 2023-5-22 11:57
标题: Linux一键重装完善网络适配,IPv6优化,丰富安装状态显示
本帖最后由 天权璇玑 于 2023-5-22 12:11 编辑

项目地址,欢迎 star,github 主页或私信反馈:

https://github.com/leitbogioro/Tools

论坛主贴:

https://loc.mjj8.eu.org/forum.php?mod=viewthread&tid=1159839

更新内容:





前几天收到一个用 akile.io 台湾单栈 IPv6 坛友的反馈,他的机器用脚本无法重装 Debian,网络详情如下,数值已隐私化处理:

  1. auto eth0
  2. iface eth0 inet6 static
  3.   address 2603:c020:8:a19b::ffff:e6da
  4.   gateway 2603:c020:8:a19b::ffff
  5.   netmask 128
  6.   dns-nameservers 2001:4860:4860::8888
复制代码


初步发现问题是脚本没针对单栈 IPv6 静态配置写入正确的网络配置自动应答文件造成的,但 Debian 的 preseed 不认“128”这种简写后缀,必须要转写成 IPv6 格式才有效,这就是几天前 https://loc.mjj8.eu.org/thread-1170781-1-1.html 帖子里提到的内容,我弄了一个把 IPv6 后缀转写成完整 IPv6 地址的功能,然后写入 preseed,但即使按这样写入,Debian 安装程序依然报 Untouchable Gateway,即找不到有效网关。

我把这个问题反馈到了 akile 的官方 tg 群,他家技术自己也做了实验,然后跟我说,掩码改成 64 就行了,我试了一下,果然行了。

后来我查了一下 IPv6 的资料,掩码的作用简单讲就是指定机器寻找 IP 段的范围,数值越大,范围越窄,IPv6 掩码范围从 1 到 128,所以 1 范围最大,128 位范围最窄,仅包含机器主 IP 一个,本机 IP 2603:c020:8:a19b::ffff:e6da 和 2603:c020:8:a19b::ffff 虽然有共同的网段,但它们并不是一个 IP,所以 Debian 安装程序在获得掩码 128 的值以后,认为网络中仅包含 IPv6 一个地址,而不会承认这个网关,导致找不到网关。所以我一开始的解决办法是看 IPv6 静态配置中掩码一旦超过 96,就会有找不到临近网关的风险,于是在新系统网络配置文件中把掩码设置成 64,以扩大范围。

解决 IPv6 的问题,给我之前一直相当头疼的一个 IPv4 问题带来很大启发,许多商家,比如 godaddy,hetzner,以及一个坛友给我测的另一个单栈 IPv4 台湾机器,arkecx.com 家的,其主 IPv4 地址是公网 IP,但网关是一个内网的,类似这样:

  1. auto eth0
  2.   iface eth0 inet static
  3.     address 190.168.23.175
  4.     netmask 255.255.255.240
  5.     dns-nameservers 8.8.8.8 8.8.4.4
  6.     up ip -4 route add default via 169.254.0.1 dev eth0 onlink
复制代码


静态配置下,按系统网络配置原样给 Debian preseed 里写,Debian 安装程序还是会报 Untouchable Gateway,有解决 IPv6 配置的经验,我们就可以明显发现,掩码 255.255.255.240 规定机器只能寻找临近的 15 个 IPv4,显然网关 169.254.0.1 和本机 IPv4 190.168.23.175 相差了远远不止 15 个 IP,所以我们可以用比对两者 A B C D 类不同之处,来尝试给出最合适的掩码。

通过 IP 计算器得出,当且只有 IPv4 掩码给 1 时,即 IP 范围从 128.0.0.0 - 255.255.255.255,本机 IP 和网关 IP 才正好能被包含在这个范围中。如果 A 类相同,B 类不同,掩码可以给 8,同理,掩码还有给 16 和 24 这两档,直接看代码吧。



IPv6 的情况远比 IPv4 复杂的多,因为它存在简写,这就意味着我们必须要把 IPv6 地址和 IPv6 网关扩充为完全体,包括中间一堆 0 的全写,确保它是一个含 32 个 16 进制数,7 个冒号的格式,才能做完全地比较。

所以我先弄了一套把 IPv6 缩写转换成全写的代码:



简单来讲共需要分 2 步实现,第一步是把缺少的冒号补上,然后在每个冒号前补 0 ,形成比如 2620:119:35::c4 到 2620:119:35:0:0:0:0:c4 这样的转换,第二步才是遍历里面的每一个区块,不足 4 位的,在前面补 0 ,形成完整的 IPv6 地址:2620:119:35:0:0:0:0:c4 2620:0119:0035:0000:0000:0000:0000:00c4 。

经过以上处理,本机 IPv6 地址和 IPv6 网关才能按每个区块逐一比较,然后根据不同档位,给不同的掩码,IPv6 的容量大,掩码档位也要比 IPv4 的 1 8 16 24 要多,共 1 16 32 64 80 96 112 128 8 个档。

另外,我测试甲骨文机器的时候,发现一个问题,就是它的 IPv6 DHCP 下,网关是一个本地 IPv6 地址,跟本机 IPv6 完全不同,如果掩码给 1 而非 DHCP 指配的 128 位,IPv6 网络就无法使用,我查了下资料,原因是 IPv6 DHCP 配置下,网卡自己的 IPv6 地址就是一种鉴定身份,和上游通信的手段,此时指定本机 IPv6 段唯一,即掩码为 128 即可。如果有人指定 --network "static" 参数,非要用静态方式配置 IPv6 的话。再加上修正 IPv4 错误掩码并按区块不同分档的思路,我也给 IPv6 的掩码设置了区分档位,代码如下:







根据 IPv6 的标准,fe80::/10 和 fc00::/7 都可以作为 IPv6 的内网段,作用类似于对应 IPv4 的 169.254.0.0/16 和 192.168.0.0/16,鉴于 IPv6 的容量,IPv6 可以做到每台机器都有独立的公网 IPv6,所以当本机 IPv6 第一段和网关的不一样,且网关属于 fe80 - febf,或 fc00 - fdff 时,掩码最好还是给 128,像甲骨文这样。

另外,shell 里 16 进制数字大小对比一定要把英文 a - f 部分转大写,否则无法进行比值运算,这也是一大坑。

按以上案例,主 IPv6 地址 2603:c020:8:a19b::ffff:e6da 转成完整格式就是:2603:c020:0008:a19b:0000:0000:ffff:e6da,网关 IPv6 地址 2603:c020:8:a19b::ffff 转成完整格式是:2603:c020:0008:a19b:0000:0000:0000:ffff,按代码给出的策略对比,两者前 6 个区块都是相同的,掩码设置成 96 就行了,不用 64 范围那么大。精细匹配,按量控制,未来碰到更多不确定环境时,适用的范围更大。

综上所述:



另外一个更新就是把脚本安装时搜集到的各种信息打印出来,让使用者心里有个数,当然跟以上这几个重量级比,这个活并不算什么。
作者: wwrroopp123    时间: 2023-5-22 12:02
技术贴,学习
作者: aru    时间: 2023-5-22 12:02
推荐增加一个 --dry-run 参数,不修改grub,只是打印出来,可以方便调试
作者: 腾讯云6折购    时间: 2023-5-22 12:03
泰库辣
作者: HOH    时间: 2023-5-22 12:07
你把这当你的公告板了是吧
作者: zxxx    时间: 2023-5-22 12:07
更新很频繁啊
作者: 天权璇玑    时间: 2023-5-22 12:14
HOH 发表于 2023-5-22 12:07
你把这当你的公告板了是吧

完善功能的同时,也是我对技术的实验、思考,我是破事水那种人吗?
作者: linearn    时间: 2023-5-22 14:07
衷心感谢楼主的辛苦付出,用了好几次了,包括arm在内的vps都成功重装了,还没有失败过,真的好使
作者: 未完的歌    时间: 2023-5-22 14:10
真不错,arm amd都完美安装
作者: genexis    时间: 2023-5-22 14:11
真不错
作者: Admin    时间: 2023-5-22 14:26
碉堡 有幸在akile群中相会
作者: _____________Cc    时间: 2023-5-22 14:28
  点开一看 原来我早已Star  那我就放心了   在Star里面吃灰吧                                                                                                                                                            ——来自楼主的小雏菊
作者: tomcb    时间: 2023-5-22 15:45
HOH 发表于 2023-5-22 12:07
你把这当你的公告板了是吧

我宁愿在loc多看点技术讨论的"公告"也不想看你的纯水。




欢迎光临 全球主机交流论坛 (https://loc.mjj8.eu.org/) Powered by Discuz! X3.4