找回密码
 立即注册
查看: 110|回复: 9

拨云见日,Linux一键重装处理Debian系不规则IPv4已彻底性解决

[复制链接]

0

主题

0

回帖

30

积分

新手上路

积分
30
发表于 2023-8-3 20:52:19 | 显示全部楼层 |阅读模式
论坛主贴:

https://fanqiangdang.com/thread-1159839-1-1.html

github:

https://github.com/leitbogioro/Tools

图库为 imgur.com,国内用户需挂梯子全局才能查看。

这两天被论坛大明星 20 x 250 哥好一顿埋汰,整得我实在是有点里外不是人,哥们儿在好几个帖子里对我那是旁侧敲击,轻拢慢捻抹复挑。

不过 I don't care. 关于撕逼的事我现在一概不参与。我只专心于把我的脚本做好,在丰富自己知识和技能的同时,让更多的人从中受益。

这个世界总是不缺批评的、阴阳怪气的、诋毁别人的人,但真正有志于直面问题,解决问题,分享成果的人却很少,建设罗马百年之功,毁灭罗马一日而溃。

有道是逃避可耻但无用,知耻而后勇,我承认自己之前的处理手段不够高明,笨 B 一个,让诸位见笑了,但笨鸟先飞,承认自己技不如人,努力改进就是,这并不丢人。

Talking is cheap, show me the codes. 不讨论哪个脚本好,哪个脚本不好,一切以代码和实测说话。公道自在人心。

在此特别感谢论坛里好哥们儿 radiogaga,调整代码和测试的圆满成功,离不开一直以来麻烦他给提供的实验环境、以及我们 debug 时共同付出的等待和耐心。

同样也感谢给我提供灵感的外国友人 https://lab.civicrm.org/bgm ,开源精神总是在不经意间,就能给别人带来莫大的帮助。

此次更新是 Debian 系专属的 moments,由于我对红帽系预安装环境 anaconda,AlpineLinux 预安装环境 busybox 中的内部的运行机制不甚了解,只能停留在按照红帽的官方文档,给 kickstart 参数的程度,深入底层的 hack 不甚理解,所以向网络环境为不规则 IPv4,想要重装 CentOS 7、AlpineLinux、Ubuntu(在 AlpineLinux 中通过 dd 实现)的兄弟们说一声抱歉,红帽 8+,Fedora 37+ 可顺利以不规则 IPv4 配置。

好的,小作文环节结束,下面直奔主题。

前情提要:

https://fanqiangdang.com/thread-1191827-1-1.html

https://fanqiangdang.com/thread-1193266-1-1.html

Debian installer 强制校验 IPv4 网关是否在 IPv4/掩码其中,若否,则报死亡红框“unreachable gateway”的问题,可谓是从萌咖创造这个脚本,以及直到我今天更新完代码前,令无数人困惑的梦魇。

我曾经尝试过好几种方法来解决这个问题,包括但不限于:1. 给大掩码;2. 猜测实际网关地址;3. 在安装前尽可能早的阶段,植入 ip route add 命令,绕过 preseed 自带格式填写网关以及网关有效性检测;4. 双栈机用 IPv6 配置网络,系统安装到快要重启前,再把 IPv4 配置写回去,确保重启后 IPv6 IPv4 都正常运作。

1 和 2 两种方法现在回过头来看看,无疑有点“幼稚”,它们应该被优先舍弃。方法 4 仅限于双栈机且安装 Debian 12 / Kali,在 Debian 11 及更早版本并不行得通,而且咱也不能指望所有有不规则 IPv4 网络的机器,都有 IPv6 访问。

所以核心思路还是要聚焦到方法 3,即寻找到一种有效方式,在 preseed early 阶段,尽可能早地把网关添加到 Debian installer 中,让不规则的 IPv4 网络能正常运作。

令人欣慰的是,我找到了一个真正的大神级人物,写得神迹代码,这种软 hack 方式可完全解决安装早期刷入 ip route,以让 Debian installer 联网的方法,项目地址和代码如下:

https://lab.civicrm.org/infra/ops/blob/master/ansible/roles/kvm-server/templates/etc/preseeds/host/preseed.cfg
  1. # [ML] Notes# - Yes, this is horrible, but only way found to set our OVH static route# - ethdetect calls firmware-detect, which does if down/up just for fun. This overwrites the script because we don't need it anyway.# - and then the DNS were getting reset, so I despaired and added it to /usr/share/debconf/confmodule# - nb: need to check if executable, because otherwise the installer won't finish once in the chroot.# - it is slightly more readable once generated.d-i preseed/early_command string ip link set ens3 up && \  ip a add {{ hostvars[item]['preseed_ipv4_address'] }}/32 dev {{ hostvars[item]['preseed_network_interface'] }} && \  echo "(ip route add {{ hostvars[item]['preseed_ipv4_gateway'] }} dev {{ hostvars[item]['preseed_network_interface'] }} || true) && (ip route add default via {{ hostvars[item]['preseed_ipv4_gateway'] }} dev {{ hostvars[item]['preseed_network_interface'] }} || true) && echo 'nameserver 8.8.8.8' > /etc/resolv.conf" > /bin/ethdetect && \  echo "(test -x /bin/ethdetect && /bin/ethdetect) || true" >> /usr/share/debconf/confmodule
复制代码

显然,大神也遭遇了 OVH 机器上不规则 IPv4 配置的问题,并且在安装早期,即“d-i preseed/early_command”阶段,给了一套可行方案,其代码完成度之高,完全可以移植过来使用。

需要注意的点仅仅为把“{{ hostvars[item]['preseed_ipv4_address'] }}”等部分,改为我脚本获取到的机器中的 IPv4 地址、掩码后缀、网关、网卡名、DNS 参数,别忘了 preseed.cfg 的“d-i netcfg/get_gateway string”值一定要给“none”,以跳过 Debian installer 的网关合法性检测。

我的调整和策略主要有以下几个方面:

    双栈机 IPv4 部分不规则的,且如果要安装的是 Debian 12 / Kali,还是维持以 IPv6 优先配置网络不变;对于单栈 IPv4、Debian 11 及更早版本、指定“-dd”参数 dd Windows 等镜像,调整为 hack IPv4 优先连接网络;对于公网主 IPv4 地址、公网 IPv4 网关,且二者从 A 类起就不在同一段的情况,也会根据情况,从上面两条策略之中选取一条配置;检查到只要有不规则 IPv4 配置,不管 IPv4 或 IPv6 部分是 dhcp 或 static,双栈都会强制采用静态配置,避免出现 Hetzner 那种明明原系统是 IPv4 dhcp,但重启时连接 dhcp 服务器失败的情况;如果使用 hack 方式进行不规则 IPv4 配置,“d-i preseed/late_command”阶段必须要把 IPv4 网关给刷回去,否则重装后系统会由于缺少网关,网络配置不正确而导致 IPv4 栈不工作。


以下是一些其他有的没的的细节:

先拿 Virmach 的机器做个实验,原机器中主 IPv4/掩码为:78.142.231.165/24,网关为 78.142.231.1,作为一名合格的开发者、产品经理、测试,原本的策略还是会计算主 IPv4 和网关 IP 的 A 类,B 类,C 类,正常情况下临时掩码会给 24,然后到 late command 阶段把 24 改回 30,我们先在这里进行一个小小的 hack,让脚本强制硬刷 IPv4 网关:





这样通过模拟不规则 IPv4 执行的结果,脚本给出的硬刷 IPv4 策略符合预期,然后再进行后续的测试 OVH,Hetzner 机型。late_command 阶段再将 IPv4 网关写回网络配置文件中。



诶嘿,成了!现在就差最后阶段看看网关 IPv4 有没有被刷进去,否则网络服务无法启动,ssh 登录不了。



网关刷进去了,而且看顺序是靠后的,因为如果网关在 d-i netcfg/get_gateway 阶段就指定了的话,它应当夹在 address 和 dns-nameservers 之间。

旁边挂着的 OVH 不规则 IPv4 测试机也能放心重启了。

诶嘿,找到网了:



不到 3 分钟就装好了,这速度,不敢相信!OVH 的机器确实强。



这个困扰了我好几个月的心病终于完全得以解决。



因为很多 Windows dd 包服务器只有 IPv4 没有 IPv6,不规则 IPv4 配置双栈机如果强制用 IPv6 配置中介 Debian 12 安装程序环境,会导致无法顺利连接可用的 IPv4 Windows dd 服务器,所以带“-dd”参数从 Debian 12 启动也是优先 IPv4 配置,当然包含支持不规则 IPv4。

刚才做了一个小测试,dns这边还是要保证添加两个,避免只给1.0.0.1出现单点故障。



以不规则纯 IPv4 栈优先,中国大陆以外机器,给 CloudFlare 和 Google IPv4 DNS,双栈机给 CloudFlare 和 Google IPv4 和 IPv6 DNS,同理国内机型也会被配置适合的国内 DNS。



对于 IPv4 不规则的情况,安装 Debian 11 及更早版本,以配置 + hack IPv4 栈优先:



双栈机处理 IPv4 不规则的情况,安装 Debian 12+ / Kali 以配置 IPv6 栈优先:



双栈机安装 Kali,单栈机不规则 IPv4 安装 Kali,也完全大丈夫:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

0

主题

996

回帖

0

积分

新手上路

积分
0
发表于 2023-8-3 20:58:40 | 显示全部楼层
等fqd实测

至少三次提到解决这个问题,每篇1W字,一次次说解决,一次次逗人玩,不要又让fqd失望了

先撩者贱,又不是你那么恶心挑人家在先,没准人家来维护你了


另外,5k先你好久解决了。没有你这么麻烦:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复 支持 反对

使用道具 举报

0

主题

978

回帖

0

积分

新手上路

积分
0
发表于 2023-8-3 21:07:14 | 显示全部楼层
@xiubpb 5k狗 速来抄袭 肏你妈的
回复 支持 反对

使用道具 举报

0

主题

970

回帖

0

积分

新手上路

积分
0
发表于 2023-8-3 21:15:18 | 显示全部楼层
先沙发一下,签名aff欢迎品尝
回复 支持 反对

使用道具 举报

0

主题

970

回帖

0

积分

新手上路

积分
0
发表于 2023-8-3 21:25:08 | 显示全部楼层
虽然跟5k对线是没意义的。

但是作为啥都不懂的吃瓜群众,
我是很想看楼主回答5k那些问题的。
回复 支持 反对

使用道具 举报

0

主题

928

回帖

0

积分

新手上路

积分
0
发表于 2023-8-3 21:27:02 | 显示全部楼层
牛逼
回复 支持 反对

使用道具 举报

0

主题

951

回帖

0

积分

新手上路

积分
0
发表于 2023-8-3 21:36:42 | 显示全部楼层
既然你都说了和某人对线无意义,那么回答某人的问题无疑和你说的第一条相悖
回复 支持 反对

使用道具 举报

0

主题

929

回帖

0

积分

新手上路

积分
0
发表于 2023-8-3 21:37:57 | 显示全部楼层
{:3_46:}官方的template那么好用
回复 支持 反对

使用道具 举报

0

主题

933

回帖

0

积分

新手上路

积分
0
发表于 2023-8-3 21:45:10 | 显示全部楼层
**璇玑 发表于 2023-8-3 20:57
既然你都说了和某人对线无意义,那么回答某人的问题无疑和你说的第一条相悖 ...

对于楼主,是没有意义的。
5k以往的劣迹让他不值一驳。

但对于我,却是有意义的。
毕竟我是对DD啥都不懂的观众,
能让我判断5k是再次无理取闹,
还是难得说的有几分道理。
回复 支持 反对

使用道具 举报

0

主题

993

回帖

0

积分

新手上路

积分
0
发表于 2023-8-3 21:50:09 | 显示全部楼层
公道自在人心,相信你自己有理性判断
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|翻墙党

GMT+8, 2026-9-30 20:22 , Processed in 0.071303 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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