重大突破,解决Hetzner Spaceberg等一众欧洲商家重装难问题 1
https://91ai.net/thread-1191827-1-1.html
3. 在安装前尽可能早的阶段,植入 ip route add 命令,绕过 preseed 自带格式填写网关以及网关有效性检测
其实有关这种方法的讨论早已有之,2018 年萌咖大佬还在论坛里的时候,这个问题就被提过,不过到最后他并未将结果实现到最初的那个 InstallNET.sh 中,于是我继续把这个实验给做了:
讨论地址:https://91ai.net/thread-488521-1-1.html
Hetzner 启动 ISO 安装,命令行下手动添加 route 文档:https://docs.hetzner.com/cloud/servers/iso-installation-gateway/
Hetzner 目前机型网卡统一为 eth0,所以不需要用 ip address 查询网卡名。
添加“--allbymyself”参数,纯手动配置安装程序,然后重启连接到 VNC:
[ol]bash InstallNET.sh -debian 12 --allbymyself[/ol]复制代码
等安装程序自动获取 dhcp 配置失败,或弹出需要配置网关时,选择手动配置网络,输完了主 IPv4、掩码后,不输入网关,按 alt + 键盘 → 键,在命令行里输入:
[ol]ip route add 172.31.1.1 dev eth0
ip route add default via 172.31.1.1[/ol]复制代码
输完上述命令第二个,还是会显示 unreachable gateway,和对话框安装模式下,那个令人头疼的红框一模一样。
Hetzner 文档里特意提到用这种方法添加网关的前提,是从 ISO 启动的环境下才有效,适用于 Ubuntu 16+、Debian 9+,通过超级精简的网络安装内核启动的 Debian busybox 环境,是否因为缺少了一些组件,导致 ip route add 执行失败?这个不得而知。
所以一开始秋水逸冰群里给我报错的哥们儿,他遇到的问题就是虽然机器从 Hetzner 的 dhcp 服务器获得到了正确的 IPv4、掩码,但没有获得正确的网关,但此时选择“Continue without a default route? No”,把 172.31.1.1 填进去,那个死亡红框又会如约而至。
另外,部分 Hetzner 机型的 dhcp 服务器存在故障,如果使用 dhcp 配置网络,会报无法从 hil-dhcp1.hetzner.company 的 dhcp 服务器同步到 IP 地址。
就这还号称欧洲阿里云,这些欧洲佬的技术水平还是需要提升一个。
4. 用 IPv6 配置网络,系统安装到快要重启前,再把 IPv4 配置写回去,确保重启后 IPv6 IPv4 都正常运作
Debian/Kali 安装程序的临时环境为 busybox,所幸支持使用 IPv6 配置网络,且这些欧洲商家给 IPv6 倒是挺大方,几乎可以做到“标配”,且在 IPv6 下配置,可以突破 IPv4 中“网关不允许在 IPv4/掩码范围之外”的限制。
还是看例子,很容易就懂了,以最近热门的 idc.wiki 日本纯 IPv6 机为例:
主 IPv6 :2a12:f8c1:87:fd5c::1
掩码:ffff:ffff:ffff:ffff:0000:0000:0000:0000(简写 64)
网关:fe80::1
拿 IPv6 计算器:https://en.rakko.tools/tools/27/ 算一下,发现该机器 IPv6 范围应该是:2a12:f8c1:0087:fd5c:0000:0000:0000:0000 - 2a12:f8c1:0087:fd5c:ffff:ffff:ffff:ffff 。
显然,这个范围从 A 段起,就一直在“2a12”里没变,它的开头是 2,网关 fe80::1 中开头的 16 进制 f ,转换成 10 进制为 15 (a - f 对应的为 10 - 15,加上 0 - 9,每一位可以有 16 种不同的数)。
15 比 2 大太多了,两者不能说是一模一样,简直就是毫不相干,按照 Debian 安装程序检查 IPv4 那样的规则,是不是 IPv6 这样配置也寄了?
显然不是,也幸亏显然不是,IPv6 情况下,主 IPv6 公网地址 + fe80::1 这种内网组合,即使根据主 IPv6 公网地址/掩码计算出的范围,网关不在其中,Debian 安装程序仍然会承认该配置,并正确配置 IPv6 网络。
所以,无论内网网关是什么,如 172.31.1.1、192.168.4.1、169.254.0.1 等等 + 公网 IPv4 这种组合,只要机器本身有 IPv6 访问,脚本重装 Debian 系时,都能自动切换到优先使用 IPv6 来配置网络。IPv4 可以在安装后期刷进去,实现安装后机器的 IPv6 IPv4 栈都可以被顺利连接。
潜在问题:
以上情况的机型或纯 IPv6 机型,优先采用 IPv6 配置网络,会导致使用 -dd 'windows dd 包' 命令时,临时 Debian 12 系统中仅会配置好 IPv6 网络,所以对方镜像源如果不支持 IPv6 访问,会导致连接镜像源失败,进而使 dd 失败。
dd 完成后的 Windows 系统,由于大部分采用的是 dhcp 配置网络,如果机器网络环境是 IPv4 IPv6 双静态,或纯 IPv6 静态,需要在 dd 完进入 vnc 登录系统,手动更改相关 IP 配置才能让机器被公网访问。
如果目标机型仅有 IPv4 网络,且存在 IPv4 网关不在由主 IPv4 地址/掩码计算出的 IPv4 地址范围之中,包括以下两种情况:
主 IPv4 公网 + 内网 IPv4 网关;主 IPv4 公网 + 公网 IPv4 网关,公网 IPv4 网关从 A 段起就和主 IPv4 公网不在同一个段。
脚本会尝试给予最大掩码(1),来尽可能扩充 IPv4 地址范围,如果对应的镜像源或 dd 服务器恰好在主 IPv4 公网/掩码规定的内网范围内,则会出现通信失败的情况。
如果你有任何命令行模式下顺利添加指定网关,使 Debian installer 顺利配置 IPv4 网络的方法,欢迎告诉我,我将不胜感激。