全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 2466|回复: 12

Linux一键重装完善网络适配,IPv6优化,丰富安装状态显示

[复制链接]
发表于 2023-5-22 11:57:08 | 显示全部楼层 |阅读模式
本帖最后由 天权璇玑 于 2023-5-22 12:11 编辑

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

https://github.com/leitbogioro/Tools

论坛主贴:

https://hostloc.com/forum.php?mod=viewthread&tid=1159839

更新内容:

  • 支持 IPv6 单栈机;
  • 对 IPv4 IPv6 商家原系统模板中网管错误的掩码问题做修正(仅静态配置);
  • 丰富了重装前组件检测、网络详情(包括显示系统网卡名、网络配置文件目录、双栈机/IPv4 单栈/IPv6 单栈显示、IPv4 配置详情、IPv6 配置详情)、用户访问 IP 所属时区、SSH 端口号、安装硬盘、目标系统下载详情(包括系统名、分发版本、架构、下载源)显示;
  • 部分 OVH 机器,即使 IPv4 是 DHCP,IPv6 是静态,脚本也能自动识别,但 IPv4 DHCP 下新系统没网,建议加上 --network "static" 参数,强制让双网静态配置网络。




前几天收到一个用 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://hostloc.com/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 范围那么大。精细匹配,按量控制,未来碰到更多不确定环境时,适用的范围更大。

综上所述:

  • 不专业的网管是真的害人,还得我给他们擦 pp,修正他们的错误。
  • IPv6 太几把复杂了,我求求以后别再弄个 IPv8 了,不然没法活。


另外一个更新就是把脚本安装时搜集到的各种信息打印出来,让使用者心里有个数,当然跟以上这几个重量级比,这个活并不算什么。
发表于 2023-5-22 12:02:35 | 显示全部楼层
技术贴,学习
发表于 2023-5-22 12:02:48 | 显示全部楼层
推荐增加一个 --dry-run 参数,不修改grub,只是打印出来,可以方便调试
发表于 2023-5-22 12:03:41 | 显示全部楼层
泰库辣
发表于 2023-5-22 12:07:06 | 显示全部楼层
你把这当你的公告板了是吧
发表于 2023-5-22 12:07:40 | 显示全部楼层
更新很频繁啊
 楼主| 发表于 2023-5-22 12:14:39 | 显示全部楼层
HOH 发表于 2023-5-22 12:07
你把这当你的公告板了是吧

完善功能的同时,也是我对技术的实验、思考,我是破事水那种人吗?
发表于 2023-5-22 14:07:15 来自手机 | 显示全部楼层
衷心感谢楼主的辛苦付出,用了好几次了,包括arm在内的vps都成功重装了,还没有失败过,真的好使
发表于 2023-5-22 14:10:56 | 显示全部楼层
真不错,arm amd都完美安装
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-9-14 22:56 , Processed in 0.105509 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表