全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

重大突破,解决Hetzner Spaceberg等一众欧洲商家重装难问题

[复制链接]
发表于 2023-7-28 06:39:51 | 显示全部楼层 |阅读模式
本帖最后由 天权璇玑 于 2023-7-30 10:27 编辑

因长度限制,第二部分看第2楼贴

论坛主贴:

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

github:

https://github.com/leitbogioro/Tools

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

省流版:

Hetzner、Spaceberg、tk-hosting 等一大众欧洲商家双栈机,IPv4 公网 + IPv4 内网网关这种组合,脚本可启用 IPv6 优先策略连接到源并装好系统,并在安装后期把 IPv4 地址写进去,保证重装后双栈都能正常工作,此策略适用于 Debian/Kali ,要求必须有 IPv6 访问,如果没有,去 web 后台开一下。

红帽系 8 9 支持原生 IPv4 公网 + IPv4 内网网关这种组合配置网络,所以加上有 IPv6 访问的情况,测试通过适用的系统为:

Debian 12
Kali rolling
AlmaLinux 8 9
RockyLinux 8 9
CentOS Stream 8 9
Fedora 37 38

AlpineLinux 由于原生启动仅支持 IPv4 配置,且其临时环境为和 Debian installer 相同的 busybox,所以无法通过先配置 IPv6 再配置 IPv4 的方法来解决,并且 Ubuntu 也是基于用 AlpineLinux dd 实现,所以以上这些欧洲商家机型无法顺利重装成 AlpineLinux Ubuntu。

脚本无法重装成功的系统:

Debian 11 及以下
CentOS 7
AlpineLinux 全系
Ubuntu 全系

近期大量改进,更新详情:

  • 支持 Debian/Kali,红帽系(CentOS AlmaLinux RockyLinux Fedora)多盘 raid 0 1 5 6 10。
    添加 -windows 参数,可指定 10 11 2012 - 2022 来安装来自秋水逸冰制作的 Windows 镜像 dd,并支持自动配置静态 IPv4,自动扩展主分区
  • 解决了无法重装为 AlpineLinux 3.16 3.17 的问题;
  • 重装前脚本会根据 IPv4 IPv6 主 IP 和 网关段对比,算出一个临时掩码,并记录系统实际掩码,临时掩码仅用于通过 Debian 安装检测,装好后会将实际掩码替换回去;
  • 对于有些需要搭建网桥的用户,可以指定 --autoplugadapter 参数,把 Debian 中 allow-hotplug 改为 auto,避免搭建网桥重启后连接失败,但此项会导致部分机型重启后因对每张网卡都尝试使用 dhcp 配置,直到超时后再尝试下一个,造成启动时间过长。
  • 有些机型采用 eth0 配置 IPv4、eth1 配置 IPv6,脚本目前安装 Debian 时也能正确分别对其配置;
  • 自动识别系统中通过 warp 实现的网络栈,并将其排除,比如一些靠套 warp 实现 IPv6 访问的 IPv4 机器,只保留机器自带的 IP 栈,避免重装时写入错误网络配置。
  • 修复 Fedora 源失效问题;
  • 优化硬盘判断逻辑,排除系统内被挂载成 iso 光盘的 /dev/sda 硬盘(本来应该靠挂载 /dev/sr0 实现),避免将系统装到光盘设备中造成安装失败;
  • 改善了失去主流支持的老 Debian 版本,如 Debian 9,因连接 Debian 源出错造成依赖安装失败问题,脚本会自动将源改为 archive.debian.org,如果你坚持要安装 Debian 9 及更旧系统,脚本不会从 security.debian.org 获取更新,避免出现安装旧 Debian 版本无法获取更新弹红框的情况;
  • 优化用户时区判断逻辑,不再依赖同一家 IP 归属地查询商;
  • 改善判断国内国外逻辑,如果发现 ping IPv4/IPv6 到 有图比 wikipedia instagram bbc 全部失败,才判断为机器在国内,并适配与其相应的国内源、dns 等。


本期主题正文:

Linux一键重装在众多坛友的反馈下,不断改进和优化,近半年时间以来,有一大问题一直在困扰着我,那就是大名鼎鼎的“unreachable gateway”,症状如下:



简单来讲,这个红框出现的原因,是 Debian 安装程序配置网络时,根据主 IPv4 地址和掩码,计算出一个属于内网的 IPv4 地址范围,如果发现网关不在其中,就会返回该错误。

这个问题仅在 Debian/AlmaLinux 等采用 busybox 环境的 Linux 安装阶段出现,如果该系统已安装到硬盘,按此配置不会有问题。

举一个例子,该机器来自 tk-hosting:

主 IPv4 :89.163.208.10
掩码:255.255.255.0 (简写 24)
网关:169.254.0.1

用 vultr 的 IPv4 子网计算器(https://www.vultr.com/resources/subnet-calculator/ )计算一下该机器的地址范围为:89.163.208.0 - 89.163.208.255

显然,169.254.0.1 不在其中,所以 Debian 安装程序会报错,此问题同样也会影响到 Hetzner(主 IPv4 公网,网关 172.31.1.1)、Spaceberg(主 IPv4 公网,网关 192.168.4.1)等一众欧洲云服务商家。

这类商家有个很明显的特点,就是统一公网 IPv4 + 内网网关配置,仿佛它们后台技术都是同一个师父教的,这种网络配置风格,跟其他各国云服务商家普遍支持 dhcp、主 IPv4 内网地址(由路由映射到公网 IPv4,可通过 dns 查询到) + 同 A B C 类内网网关,或主 IPv4 公网地址 + 同 A B C 类公网网关迥然不同。

这种配置风格对网管来说可能比较省事(所有机器网关都一样),但对需要拿来用脚本重装的我们来说是一个大麻烦。这意味着我们不能把系统里原带的 IPv4 配置直接写到 Debian preseed.cfg 里,否则你就会碰到和我一样的令人头疼的红框。

这个问题令人魂牵梦萦,我至少尝试过 4 种方法来解决:


1. 给大掩码,如

主 IPv4 :89.163.208.10
掩码:128.0.0.0 (简写 1)
网关:169.254.0.1

这样机器承认的内网地址范围就变成了:0.0.0.0 - 127.255.255.255,显然,如果机器网关是 172.31.1.1,它是在这个范围内的,但对于 169.254.0.1,169 还是比 127 大,还是无法被包含其中,所以这个办法并不高明。

掩码的设置是一个需要谨慎考虑的工作,它指定了计算机和哪些范围的 IP 地址当做内联通信,把除前述之外的 IP 地址当做外联通信。这个范围如果过大(简写值更小),会造成很多与公联通信的计算机被当做内联通信,造成通信失败;如果这个范围过小(简写值更大),会造成与部分内联通信的计算机当做公联通信,造成内联通信丢失。

所以即使给 1 侥幸逃过 Debian 安装程序的网络检测,但如果恰好 Debian 源在掩码规定的内联通信范围内,那么会造成连接源失败,有时候同一地区的源,十有**都会连接失败。

所以不到万不得已,千万不要随便给掩码值,我最初解决这个问题的时候,就是尝试用这种方法,显然这并不高明。

另外,如果把掩码设置成 0,倒是可以彻底解决网关不在内联通信范围内这个问题,但所有 IPv4 地址都被当做内网来通信了,这种设置并无意义。

2. 猜测实际网关地址

还是这个例子,在“大多数”情况下,虽然网关是一个内网地址,但它后面映射的还是一台跟主 IPv4 相近网段的主机,在 tk-hosing web 后台查到的实际网关是:89.163.208.1

主 IPv4 :89.163.208.10
掩码:255.255.255.0 (简写 24)
网关:169.254.0.1

然后可以用 shell 脚本,实现一个和 Vultr IPv4 计算器一样的 IPv4 范围计算功能,把主 IPv4 89.163.208.10 和掩码 255.255.255.0 当做参数传入,可计算出一个 IP 地址范围,把该范围内第一个 IP 当做网关就行。



但这种方法还是有局限性,网关是一串内网地址,而且我们无法通过查询商家机器上游网络拓扑,来找到网关背后映射到的真实 IPv4 地址,凭什么根据主 IPv4、掩码计算出的 IP 地址范围的第一个就一定是网关?

靠猜显然是不行的。
 楼主| 发表于 2023-7-30 10:18:00 | 显示全部楼层
3. 在安装前尽可能早的阶段,植入 ip route add 命令,绕过 preseed 自带格式填写网关以及网关有效性检测

其实有关这种方法的讨论早已有之,2018 年萌咖大佬还在论坛里的时候,这个问题就被提过,不过到最后他并未将结果实现到最初的那个 InstallNET.sh 中,于是我继续把这个实验给做了:

讨论地址:https://hostloc.com/thread-488521-1-1.html

Hetzner 启动 ISO 安装,命令行下手动添加 route 文档:https://docs.hetzner.com/cloud/servers/iso-installation-gateway/

Hetzner 目前机型网卡统一为 eth0,所以不需要用 ip address 查询网卡名。

添加“--allbymyself”参数,纯手动配置安装程序,然后重启连接到 VNC:

bash InstallNET.sh -debian 12 --allbymyself

等安装程序自动获取 dhcp 配置失败,或弹出需要配置网关时,选择手动配置网络,输完了主 IPv4、掩码后,不输入网关,按 alt + 键盘 → 键,在命令行里输入:

  1. ip route add 172.31.1.1 dev eth0
  2. ip route add default via 172.31.1.1
复制代码


输完上述命令第二个,还是会显示 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 网络的方法,欢迎告诉我,我将不胜感激。
发表于 2023-7-28 10:28:29 | 显示全部楼层
让我们大喊一句:楼主牛逼,5k死全家!

点评

楼主牛逼,5k死全家!  发表于 2023-7-28 20:55
发表于 2023-7-28 16:08:37 | 显示全部楼层
本帖最后由 疯狂痴呆 于 2023-7-28 16:12 编辑

apt-get update
wget --no-check-certificate -qO InstallNET.sh 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' && chmod a+x InstallNET.sh
bash InstallNET.sh -debian
reboot


然后失联了,原来也是RAID0的DEBIAN12


发表于 2023-7-28 14:50:04 | 显示全部楼层
[Finish] Input 'reboot' to continue the subsequential installation.

不能自动重启吗,
发表于 2023-7-28 11:07:56 | 显示全部楼层
大佬研究下scaleway星尘DD WIN吧。从来没成功过。
发表于 2023-7-28 07:03:53 | 显示全部楼层
技术贴,顶一下,但是moeclub好像可以正确配置并且dd,hz试过可行
 楼主| 发表于 2023-7-28 07:23:46 来自手机 | 显示全部楼层
WZ-Software 发表于 2023-7-28 07:03
技术贴,顶一下,但是moeclub好像可以正确配置并且dd,hz试过可行

萌咖的我测试过,他的处理方式也是把原系统中的ipv4以静态方式直接写到debian安装程序里,会弹红框
发表于 2023-7-28 07:33:34 来自手机 | 显示全部楼层
大佬牛逼,之前我用萌卡试过dd win失败了,你这个能装win吗
 楼主| 发表于 2023-7-28 07:38:26 来自手机 | 显示全部楼层
zsj403919383 发表于 2023-7-28 07:33
大佬牛逼,之前我用萌卡试过dd win失败了,你这个能装win吗

这种情况下中介系统会以ipv6配置网络,所以dd源必须也能有ipv6访问才行
 楼主| 发表于 2023-7-28 07:43:38 来自手机 | 显示全部楼层
WZ-Software 发表于 2023-7-28 07:03
技术贴,顶一下,但是moeclub好像可以正确配置并且dd,hz试过可行

之前论坛里有好几个反映spaceberg无法重装的帖子,原因就是如果直接给ipv4公网和192.168.4.1内网网关,debian安装程序会报unreachable gateway,debian的这个bug已经存在许久,到12也没有修复,所以腾讯云6折购前两天才找到我来解决这个问题,我的方案是如果是双栈机,优先用ipv6来配置debian安装程序,最后再把ipv4配置写进去。很多人重装优先会用萌咖的脚本,如果没问题,就不会有人反馈
发表于 2023-7-28 08:52:48 | 显示全部楼层
支持技术贴。

贴2怎么看不到了……
 楼主| 发表于 2023-7-28 09:03:05 来自手机 | 显示全部楼层
Yzindex 发表于 2023-7-28 08:52
支持技术贴。

贴2怎么看不到了……

被管理员删了,不知道什么原因,全贴看我在隔壁发的吧,无长度限制:https://www.nodeseek.com/post-15633-1
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-4 16:32 , Processed in 0.105032 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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