立即注册  找回密码
 立即注册
CeraNetworksBGVM服务器主机交流会员请立即修改密码Sharktech防护
查看: 64|回复: 9

略施巧计,飞跃 Hetzner 重装 AlpineLinux Ubuntu Windows 险阻

[复制链接]

略施巧计,飞跃 Hetzner 重装 AlpineLinux Ubuntu Windows 险阻

[复制链接]

75

主题

207

回帖

853

积分

高级会员

积分
853
天权璇玑

75

主题

207

回帖

853

积分

高级会员

积分
853
2023-8-20 17:57:26 | 显示全部楼层 |阅读模式
本帖最后由 天权璇玑 于 2023-8-20 17:58 编辑

论坛主贴:

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

github:

https://github.com/leitbogioro/Tools

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

众所周知,号称“欧洲阿里云”的 Hetzner ,由于其虚拟机(Cloud)产品网络部分,不论任何地域, 公网 IPv4 + 172.31.1.1 内网 IPv4 网关 这种组合,使众多重装脚本折戟沉沙竞折腰,因为:

  • 按 dhcp 去配置 IPv4,偶尔会出现连接 Hetzner dhcp 服务器出错而造成的 IPv4 配置失败;
  • 从系统中原样读取 IPv4 等参数静态配置,直接将其写入各 Linux 发行版网络安装程序配置中,重启后网络配置失败,其中最知名的就是 Debian installer 的死亡红框 —— “unreachable gateway”。

    Hetzner 是一座峰入云霄的大山,但并非难以逾越。甚至毫不夸张地说,谁的脚本如果能通过在 Hetzner 严苛环境中的测试中摘得桂冠,应付自如,谁的脚本就能自带解决其他同类复杂环境 +70% 绰绰有余 buff。

    之前 Hetzner 的环境都是坛友提供的,最近我自己搞了个 Hetzner 免税号,其随用随删,IPv4 配置怪异,支持 IPv6 栈,还有 arm64 架构,是一个非常优质的测试平台,以下测试,仅付账单 0.02 欧,就解答了我对其的各种猜想。

    接下来简单汇总一下脚本最近几项重要更新:

  • 支持双网卡单 IPv4 多 IPv6 配置,如 eth0 负责 IPv4 连接,eth1 负责 IPv6 连接,且 eth1 有多条 IPv6 配置,仅适用于 Debian 系;
  • 支持双网卡单 IPv4 多 IPv6 配置,如 eth0 负责 IPv4 连接,eth1 负责 IPv6 连接,且 eth1 有多条 IPv6 配置,仅适用于 Debian 系;
  • 对于不规则 IPv4 配置,配置网关时增加“onlink”参数,以强制本机与网关直接通信,使之能适应所有不规则 IPv4 配置状况;
  • 部分机器中,使用 Cloudflare 1.0.0.1 DNS 服务器可能出现和本地内网“1.0.x.x”等通信冲突,造成 DNS 无法工作的状况,所以对于中国大陆境外机器,IPv4 DNS 顺位改为 8.8.8.8 1.1.1.1;
  • 修复了使用 Debian 12 做中介系统 dd Windows 时,由于出现 2 个条目“d-i preseed/early_command”造成的软 hack 失效,VNC 内没网,死亡红框“bad archive mirror”;
  • 输入 --network "dhcp 或 static" 时,强制跳过系统内网络配置文件和 IPv4 IPv6 双栈动静态检测,节省等待时间;
  • 修复了因找不到系统内规范的网络配置,脚本陷入检查 IPv4 IPv6 动静态配置卡死的问题,对于每个栈,检查时间最多等待 4s ,超时后自动按静态配置,这也是个老 bug 了;
  • 在商家 LightNode 环境中,发现第二张网卡 eth1 才负责与外联通信,第一张网卡 eth0 作用未知,脚本修复了当系统中与外联通信的网卡,非按物理顺序连接到系统中第一个时,由于重启后指定安装程序配置的,仍然是物理顺序第一张网卡,而造成的网络配置失败;
  • 通过劫持网络启动内核中 /boot/init 初始化脚本“configure_ip()”函数中的“# manual configuration”注释,向后添加强制配置网关命令,解决了 AlpineLinux 在不规则 IPv4 环境中的网络配置问题;
  • 中国大陆境外机器安装 AlpineLinux IPv4 DNS 也顺位改为 8.8.8.8 1.1.1.1;
  • 修复了向临时 AlpineLinux 环境中写入参数配置集合“alpine.config”出现的单条目写入多次的 bug;
  • 由于底层 AlpineLinux 可以在不规则 IPv4 环境中正常运作,所以无论是安装 AlpineLinux,还是通过 dd 安装 Ubuntu,或是通过指定“-windows”参数来让 AlpineLinux 做中介系统 dd Windows,安装都能顺利继续;
  • 通过修改 cloud-init 自动应答文件,修复了 dd 后的 Ubuntu 系统,在不规则 IPv4 环境中启动后,netplan 配置文件 /etc/network/20-netcfg.yaml 中由于 -routes 条目缺少“on-link: true”造成的网关配置失败,系统内没有网络的问题;
  • 修复了双栈机 IPv4 不规则配置下,配置 AlpineLinux 网络启动时,强刷 IPv4 网关不工作的 bug;
  • 修复了重装日语 Windows,执行 bash InstallNET.sh -windows 10 -lang "ja" ,从秋水逸冰 Windows 源 dd Windows 时,由于 dd 包名称匹配错误造成的找不到有效 dd 包的 bug ,同样支持 -lang "jp" 或 -lang "zh" 时,匹配到正确的日语、简中 Windows dd 包。

    经过论坛里发过的不少帖子,许多细心的坛友应该也意识到了,网络重装最容易翻车的地方,就是应对不规则的 IPv4 配置,包括以下几种情形:

  • 公网 IPv4 + 内网网关;
  • 公网 IPv4 + 公网网关,且公网 IPv4 和公网 IPv4 网关从 A 类起不在同一段;
  • 网关不在由公网 IPv4/掩码后缀计算出的范围内。

    几乎所有主流 Linux 发行版的网络启动内核,接受填写的各种 IPv4 时,都会对主 IPv4/掩码后缀生成一个 IPv4 地址范围,这个范围内的机器,都当做内联通信处理,反之则当外联通信处理。

    按照标准的网络环境配置而言,网关应当包含在内联通信范围以内,否则安装程序就会报错。

    在许多主流大厂网络环境环境中,网关都遵守“在主 IPv4/掩码后缀内网中”的定律,但 Hetzner Spaceberg Godaddy waf.group 等一系列商家中的网络环境,都打破了这一定律,如果机器原生支持 dhcp 配置还好,但一旦采用了静态配置,按系统原样写入相关网络配置,必然会出现触犯 Linux 安装程序的“天条”,从而造成安装失败。

    萌咖、debi、bin4-9(暂时仅支持 IPv4 dhcp 配置)等各种自己重写的、基于萌咖原版魔改的脚本,都会被这一闷棍治得服服帖帖,动弹不得。面对这种困局,在我之前,没人能在自动化脚本中,给出一套完善的解决方案。

    而我和我的脚本,专门为破解这种难题而来,而且获得了丰硕的成果。破解谜题的乐趣,不止在于获得成果的满足感,把其中的过程和机理分享给大众,也是乐趣之一。

    在这个帖子:拨云见日,Linux一键重装处理Debian系不规则IPv4已彻底性解决 中,我提出了一套破解不规则 IPv4 配置网关失效的终极方案,核心思路如下:

    [ol]
  • ip link set IPv4 网卡 up;
  • ip addr add IPv4/掩码后缀 dev IPv4 网卡;
  • ip route add IPv4 网关 dev IPv4 网卡;
  • ip route add default via IPv4 网关 dev IPv4 网卡[/ol]复制代码
    以上代码执行的效果和注意点如下:

  • 设置并激活 IPv4 网卡;
  • 为 IPv4 网卡添加 IPv4/掩码后缀,以设定主 IPv4 地址和掩码;
  • 为 IPv4 网卡添加对应的 IPv4 网关;
  • 强制为 IPv4 网卡设置 IPv4 网关;
  • 给临时环境配置可用的 DNS;
  • Linux 安装内核接受 IPv4 相关参数的时候,不包含 IPv4 网关;
  • 通过执行以上命令,在运行在内存中的临时 Linux 环境中,成功配置 IPv4 网络、安装完系统后,在正式系统中的网络配置文件中,把 IPv4 网关写回去。

    以上伪代码存在一个不完善的地方,就是“ip route add default via IPv4 网关 dev IPv4 网卡”部分,最后应当添加一个“onlink”,规定主机直接与网关进行通信,当做公联通信处理的那种,因为在某些环境中,不添加“onlink”,本机仍然会试图以内网主机的方式和网关通信,从而造成网络配置失败,所以改动的地方仅涉及添加“onlink”即可:

    [ol]
  • ip link set IPv4 网卡 up;
  • ip addr add IPv4/掩码后缀 dev IPv4 网卡;
  • ip route add IPv4 网关 dev IPv4 网卡;
  • ip route add default via IPv4 网关 dev IPv4 网卡 onlink[/ol]复制代码
    这串伪代码极其重要,因为它就是一套绝杀天下的《独孤九剑》,只要将其放在适合的环境中,灵活运用,配合以上几条注意点,理论上能解决所有 Linux 发行版网络安装程序应对不规则 IPv4 配置时,网关配置失败的问题 。

    除了知道要插,还得知道往哪儿插,怎么插,这套剑法才能发挥其无敌的效用。

    首先把插法解决的,自然是我脚本中的 Debian,不过不规则 IPv4 虽然仅安装 Debian 是没问题了,但用 Debian dd Windows 的时候还是会存在一些问题。

    [ol]
  • bash InstallNET.sh -dd 'dd 包'[/ol]复制代码
    在代码没更新前,preseed.cfg 中,有两条 d-i preseed/early_command :





    显然,一条负责软 hack 不规则 IPv4 网关,另一条负责用 anna-install 安装一些 Debian dd 时需要用的临时组件。

    经过实测,这种情况下,Debian installer 仅会选取 preseed 中靠最后的那个 early_command 执行,因为软 hack 不规则 IPv4 网关命令并未执行,所以系统内并无网关,死亡红框“bad archive mirror”如约而至。

    解决方法很简单,如果发现用户要用 Debian dd 时,把 anna-install 部分,追加到软 hack IPv4 网关后即可,还有别忘了,把下方固定写死的 early_command anna 给删掉,确保任何情景下,preseed 内有且仅有一条“d-i preseed/early_command”,代码更改如下:
  • 回复

    使用道具 举报

    75

    主题

    207

    回帖

    853

    积分

    高级会员

    积分
    853
    天权璇玑 楼主

    75

    主题

    207

    回帖

    853

    积分

    高级会员

    积分
    853
    2023-8-20 17:58:56 | 显示全部楼层
    [ol]
  • [[ "$ddMode" == '0' ]] && tmpDdWinsEarlyCommandsOfAnna=''
  •       BurnIrregularIpv4ByForce=`echo -e 'd-i preseed/early_command string ip link set '$interface4' up; ip addr add '$IPv4'/'$ipPrefix' dev '$interface4'; echo "(ip route add '$actualIp4Gate' dev '$interface4' || true) && (ip route add default via '$actualIp4Gate' dev '$interface4' onlink || true) && '$writeDnsByForce'" > /bin/ethdetect; echo "(test -x /bin/ethdetect && /bin/ethdetect) || true" >> /usr/share/debconf/confmodule; '$tmpDdWinsEarlyCommandsOfAnna''`[/ol]复制代码[ol]
  • [[ "$BurnIrregularIpv4Status" == "1" ]] && {
  •   sed -i '/early_command string anna-install/d' /tmp/boot/preseed.cfg
  • }[/ol]复制代码
    所以,用 Debian 做中介系统,在不规则 IPv4 机器上 dd 找不到网的问题就解决了。

    下面直接上重头戏,介绍一下我软 hack AlpineLinux ,令其能够在不规则 IPv4 环境下正常配置网络的思路。

    AlpineLinux 网络安装程序的内核,解压后会在根目录,出现一个叫“init”的文件,这个文件中,以下部分的下方,可插入 令 AlpineLinux 安装程序“成功配置网络”后,运行的用户自定义脚本 :

    [ol]
  • # switch over to new root
  • cat "$ROOT"/proc/mounts 2>/dev/null | while read DEV DIR TYPE OPTS ; do
  •         if [ "$DIR" != "/" -a "$DIR" != "$sysroot" -a -d "$DIR" ]; then
  •                 mkdir -p $sysroot/$DIR
  •                 $MOCK mount -o move $DIR $sysroot/$DIR[/ol]复制代码
    基本上我脚本记录当前系统各个配置,指定重启后是安装 AlpineLinux 还是 dd Ubuntu 或 Windows ,都要在这个区域内,插入需要的内容。

    一开始,我决定在这个地方,把以上四条伪代码,改成系统内实际配置,放在该区域首处,但发现 AlpineLinux 还是没有先读取这一部分,而是先接受刷入内核时,写入的:

    [ol]
  • ip=$IPv4::$GATE:$ipMask::$interface4::$ipDNS:[/ol]复制代码
    参数,造成网络初始化失败。

    这个方法行不通,说明软 hack 不规则 IPv4 网关部分,就不能放在此处,init 是 AlpineLinux 网络安装程序启动时,必然会调用的一个脚本,那么到底有没有办法,让软 hack 在更“早”一些阶段运行呢?

    方法当然是有的,能不能找到,就要看开发者的耐心和细致程度。我们认真阅读一下 init 脚本中的内容,本质上也是用 shell 写的,在 211 行前后,我们发现一个叫“configure_ip()”的函数,原版 init 文件中该函数代码如下:

    [ol]
  • configure_ip() {
  •         [ -n "$MAC_ADDRESS" ] && return

  •         local IFS=':'
  •         set -- ${KOPT_ip:-dhcp}
  •         unset IFS

  •         local client_ip="$1"
  •         local gw_ip="$3"
  •         local netmask="$4"
  •         local device="$6"
  •         local autoconf="$7"
  •         local dns1="$8"
  •         local dns2="$9"

  •         case "$client_ip" in
  •                 off|none) return;;
  •                 dhcp) autoconf="dhcp";;
  •         esac

  •         [ -n "$device" ] || device=$(ip_choose_if)

  •         if [ -z "$device" ]; then
  •                 echo "ERROR: IP requested but no network device was found"
  •                 return 1
  •         fi

  •         if [ "$autoconf" = "dhcp" ]; then
  •                 # automatic configuration
  •                 if [ ! -e "$ROOT"/usr/share/udhcpc/default.script ]; then
  •                         echo "ERROR: DHCP requested but not present in initrd"
  •                         return 1
  •                 fi
  •                 ebegin "Obtaining IP via DHCP ($device)"
  •                 $MOCK ifconfig "$device" 0.0.0.0
  •                 $MOCK udhcpc -i "$device" -f -q
  •                 eend $?
  •         else
  •                 # manual configuration
  •                 [ -n "$client_ip" -a -n "$netmask" ] || return
  •                 ebegin "Setting IP ($device)"
  •                 if ifconfig "$device" "$client_ip" netmask "$netmask"; then
  •                         [ -z "$gw_ip" ] || ip route add 0.0.0.0/0 via "$gw_ip" dev "$device"
  •                 fi
  •                 eend $?
  •         fi

  •         # Never executes if variables are empty
  •         for i in $dns1 $dns2; do
  •                 echo "nameserver $i" >> /etc/resolv.conf
  •         done

  •         MAC_ADDRESS=$(cat /sys/class/net/$device/address)
  • }[/ol]复制代码
    从名字上就能看出,该函数的作用是以静态或动态方式配置网络,而且注释里“# automatic configuration”和“# manual configuration”也讲清楚了,动态 dhcp 配置时函数执行哪个部分,静态 static 配置时,函数执行哪个部分。
  • 回复

    使用道具 举报

    75

    主题

    207

    回帖

    853

    积分

    高级会员

    积分
    853
    天权璇玑 楼主

    75

    主题

    207

    回帖

    853

    积分

    高级会员

    积分
    853
    2023-8-20 18:00:31 | 显示全部楼层
    软 hack 处理不规则 IPv4 网关时,肯定是按静态配置的,既然要让 ip route add 们运行得尽可能“早”,那么“# manual configuration”就是一个绝佳的“锚点”,用 sed 命令在该注释后方把 ip route add 哥几个逐条加上即可:

    [ol]
  • sed -i '/manual configuration/a\ip link set '$interface4' up\nip addr add '$IPv4'/'$ipPrefix' dev '$interface4'\nip route add '$actualIp4Gate' dev '$interface4'\nip route add default via '$actualIp4Gate' dev '$interface4' onlink\necho '\''nameserver '$ipDNS1''\'' > /etc/resolv.conf\necho '\''nameserver '$ipDNS2''\'' >> /etc/resolv.conf' /tmp/boot/init[/ol]复制代码
    为了排错时阅读 init 中添加的条目的美观,每增加一条项目前,添加两个缩进,美化后并附加条件判断式的命令如下:

    [ol]
  • [[ "$BurnIrregularIpv4Status" == "1" ]] && {
  •   actualIp4Gate="$GATE"
  •   sed -i '/manual configuration/a\\t\tip link set '$interface4' up\n\t\tip addr add '$IPv4'/'$ipPrefix' dev '$interface4'\n\t\tip route add '$actualIp4Gate' dev '$interface4'\n\t\tip route add default via '$actualIp4Gate' dev '$interface4' onlink\n\t\techo '\''nameserver '$ipDNS1''\'' > /etc/resolv.conf\n\t\techo '\''nameserver '$ipDNS2''\'' >> /etc/resolv.conf' /tmp/boot/init
  • }[/ol]复制代码
    于是我们再来看一下 init 中被修改后的“configure_ip()”函数:

    [ol]
  • configure_ip() {
  •         [ -n "$MAC_ADDRESS" ] && return

  •         local IFS=':'
  •         set -- ${KOPT_ip:-dhcp}
  •         unset IFS

  •         local client_ip="$1"
  •         local gw_ip="$3"
  •         local netmask="$4"
  •         local device="$6"
  •         local autoconf="$7"
  •         local dns1="$8"
  •         local dns2="$9"

  •         case "$client_ip" in
  •                 off|none) return;;
  •                 dhcp) autoconf="dhcp";;
  •         esac

  •         [ -n "$device" ] || device=$(ip_choose_if)

  •         if [ -z "$device" ]; then
  •                 echo "ERROR: IP requested but no network device was found"
  •                 return 1
  •         fi

  •         if [ "$autoconf" = "dhcp" ]; then
  •                 # automatic configuration
  •                 if [ ! -e "$ROOT"/usr/share/udhcpc/default.script ]; then
  •                         echo "ERROR: DHCP requested but not present in initrd"
  •                         return 1
  •                 fi
  •                 ebegin "Obtaining IP via DHCP ($device)"
  •                 $MOCK ifconfig "$device" 0.0.0.0
  •                 $MOCK udhcpc -i "$device" -f -q
  •                 eend $?
  •         else
  •                 # manual configuration
  •                 ip link set eth0 up
  •                 ip addr add 51.75.213.94/29 dev eth0
  •                 ip route add 141.95.72.254 dev eth0
  •                 ip route add default via 141.95.72.254 dev eth0 onlink
  •                 echo 'nameserver 8.8.8.8' > /etc/resolv.conf
  •                 echo 'nameserver 1.1.1.1' >> /etc/resolv.conf
  •                 [ -n "$client_ip" -a -n "$netmask" ] || return
  •                 ebegin "Setting IP ($device)"
  •                 if ifconfig "$device" "$client_ip" netmask "$netmask"; then
  •                         [ -z "$gw_ip" ] || ip route add 0.0.0.0/0 via "$gw_ip" dev "$device"
  •                 fi
  •                 eend $?
  •         fi

  •         # Never executes if variables are empty
  •         for i in $dns1 $dns2; do
  •                 echo "nameserver $i" >> /etc/resolv.conf
  •         done

  •         MAC_ADDRESS=$(cat /sys/class/net/$device/address)
  • }[/ol]复制代码
    显然,我们要软 hack 的命令,即:

    [ol]
  • # manual configuration
  • ip link set eth0 up
  • ip addr add 51.75.213.94/29 dev eth0
  • ip route add 141.95.72.254 dev eth0
  • ip route add default via 141.95.72.254 dev eth0 onlink
  • echo 'nameserver 8.8.8.8' > /etc/resolv.conf
  • echo 'nameserver 1.1.1.1' >> /etc/resolv.conf[/ol]复制代码
    部分,连带临时的 DNS,都添加到了注释“# manual configuration”后面,预期中它应当在启动时优先执行。

    经过试验,重启前原系统中 grub 有关配置 AlpineLinux 网络启动的 menuentry 菜单项目中,也先不配置网关,脚本中应对这种情况的判断式为:

    [ol]
  • [[ "$BurnIrregularIpv4Status" == "1" ]] && Add_OPTION="ip=$IPv4:::$ipMask::$interface4::$ipDNS:"[/ol]复制代码
    实际写入的 grub 启动菜单内容如下:

    [ol]
  • menuentry 'Install OS [AlpineLinux edge x86_64]' --class debian --class gnu-linux --class gnu --class os {
  •         recordfail
  •         load_video
  •         gfxmode $linux_gfx_mode
  •         insmod gzio
  •         if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
  •         insmod part_gpt
  •         insmod ext2
  •         set root='hd0,gpt1'
  •         if [ x$feature_platform_search_hint = xy ]; then
  •           search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1  e2bca382-8f84-47f8-a6c1-cf1ade169203
  •         else
  •           search --no-floppy --fs-uuid --set=root e2bca382-8f84-47f8-a6c1-cf1ade169203
  •         fi
  •         linux        /boot/vmlinuz alpine_repo=http://dl-cdn.alpinelinux.org/alpine/edge/main modloop=http://dl-cdn.alpinelinux.org/alpine/edge/releases/x86_64/netboot/modloop-lts ip=51.75.213.94:::255.255.255.248::eth0::8.8.8.8 1.1.1.1:
  •         initrd        /boot/initrd.img
  • }[/ol]复制代码
    通过实验,发现由于命令执行的顺序被提前了,所以软 hack 不规则 IPv4 网关的命令,会在 init 中函数“configure_ip()”运行后的 else 条件,即检查到按静态配置 IPv4 网络后立马运行,效果堪比 preseed 的 early_command。
  • 回复

    使用道具 举报

    75

    主题

    207

    回帖

    853

    积分

    高级会员

    积分
    853
    天权璇玑 楼主

    75

    主题

    207

    回帖

    853

    积分

    高级会员

    积分
    853
    2023-8-20 18:01:40 | 显示全部楼层
    中介环境 AlpineLinux 在不规则 IPv4 环境下的配置难题解决了,但 dd 完 Ubuntu 以后,发现系统无法连接。只能通过 VNC 连接机器,查看系统中网络配置文件:

    [ol]
  • cat /etc/netplan/20-netcfg.yaml
  • network:
  •     ethernets:
  •         eth0:
  •             addresses:
  •             - 78.142.14.78/32
  •             dhcp4: false
  •             nameservers:
  •                 addresses:
  •                 - 8.8.8.8
  •                 - 1.1.1.1
  •             routes:
  •             -   to: default
  •                 via: 78.142.14.1
  •     version: 2[/ol]复制代码
    后来查阅 Ubuntu netplan 官方文档 https://netplan.readthedocs.io/en/latest/netplan-yaml/#default-routes 才知道,netplan 的 routes 条目中,给出了“on-link: true”参数,一看名字就知道,它规定主机与网关直接通信,不走内网,可有效避免 因为 netplan 计算本机 IPv4/掩码后缀 ,得到一个范围,如果不指定该参数,且网关不在其中,网络服务就会工作不正常的问题 。

    又被 IPv4 地址范围检验给坑了一次,这次不是在安装时,而是在安装好的系统里,啊,多么痛的领悟,你还要再坑俺几次咧。

    cloud-init 配置文件改动如下:

    [ol]
  • network:
  •   version: 2
  •   ethernets:
  •     eth0:
  •       dhcp4: false
  •       addresses: [IPv4/ipPrefix]
  •       routes:
  •         - to: default
  •           via: GATE
  •           on-link: true
  •       nameservers:
  •         addresses: [ipDNS1, ipDNS2][/ol]复制代码
    实际环境中 netplan 配置内容如下:

    [ol]
  • network:
  •     ethernets:
  •         eth0:
  •             addresses:
  •             - 78.142.231.165/32
  •             dhcp4: false
  •             nameservers:
  •                 addresses:
  •                 - 8.8.8.8
  •                 - 1.1.1.1
  •             routes:
  •             -   on-link: true
  •                 to: default
  •                 via: 78.142.231.1
  •     version: 2[/ol]复制代码
    这下不规则 IPv4 配置下,Ubuntu netplan 联网的问题也解决了。终于呵,解决了 AlpineLinux 一个,剩下 dd Ubuntu Windows 自然都水到渠成了,这里再强调一下,添加 -windows "版本号" 时,中介系统是 AlpineLinux ,和 -dd 'dd 包' 的中介系统 Debian 12 是不一样的:

    [ol]
  • bash InstallNET.sh -windows "10"[/ol]复制代码
    光说不练假本事,理论、嘴炮有没有用,VNC 里见真章,来人呐,给公子上图!

    先开一台美东的,原系统 Ubuntu :





    用中介系统 Debian 来 dd Windows ,脚本执行界面:





    精华全在这里:





    dd 流程:











    安装 AlpineLinux 本身当然没问题,外加 Hetzner 后台模板和挂载的 iso 并不支持 AlpineLinux ,可以说我的脚本是 全网唯一一个能在 Hetzner 上安装 AlpineLinux,并顺利配置 IPv4 IPv6 双栈 的。








    从在 Hetzner 上装好的 AlpineLinux dd Windows 也没问题:











    安装 Ubuntu 并配置好双栈自然不在话下:








    当然,命根子 Debian 重装绝对不能、也不允许出错,否则会比家里泉水被偷了还难受。

    安装Debian 12+ Kali 以配置 IPv6 优先,安装 Debian 11- 以配置 IPv4 优先,所以新系统内网络配置文件的写入顺序会有所不同,但不影响使用。








    Hetzner ARM64 的机器也可以尽情玩耍,目前只有德国东部 Falkenstein(法尔肯施泰因)可开,同样价格下,内存、硬盘各比 amd64 机型大了一倍,性价比很高。

    arm64 机型安装 AlpineLinux 我还是第一次测试,甲骨文那边的测试机用的只有 1G amd64,从实验结果来看,自然不在话下:








    从 AlpineLinux dd 到 Ubuntu 没有任何阻碍,静静观察表演就行,事实证明,只要网络问题解决,仅安装流程层面,arm64 和 amd64 区别不大,Hetzner 等商家给重装带来的最大障碍就是其坑逼的网络配置











    Linux 不能失去 Debian ,就像西方不能失去耶路撒冷:








    Hetzner arm64 机器 dd win 就不测了,dd 包都是基于 amd64 的,dd 完了也启动不了。况且 Windows 超强的兼容性,就是来自基于 x86 x86_64 架构上开发的各种新老应用程序的支持,即使能在 arm 上安装专门为 arm 开发的 Windows ,除了 UI 界面和 x86 的 Windows 一致,很多 x86 的程序无法在 arm Windows 下兼容,除非再安装一个 x86 虚拟机来模拟运行,但运行效率相比在原生 x86 上运行降低 90% 也不是没有可能,目前为原生 arm Windows 开发的应用数量很有限,丰富程度甚至还不如 Linux,所以 arm64 的机器还是用 arm64 Linux 比较好。
  • 本帖子中包含更多资源

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

    ×
    回复

    使用道具 举报

    229

    主题

    2135

    回帖

    5871

    积分

    论坛元老

    积分
    5871
    toot

    229

    主题

    2135

    回帖

    5871

    积分

    论坛元老

    积分
    5871
    2023-8-20 18:00:33 | 显示全部楼层
    写了这么多……恢复模式下载dd包重启,搞定
    回复

    使用道具 举报

    229

    主题

    2135

    回帖

    5871

    积分

    论坛元老

    积分
    5871
    toot

    229

    主题

    2135

    回帖

    5871

    积分

    论坛元老

    积分
    5871
    2023-8-20 18:05:22 | 显示全部楼层

    **璇玑 发表于 2023-8-20 18:02

    要的就是不考虑任何你所假设的“理想”环境,如果 Hetzner 不提供恢复模式,你又该怎么办呢? ...


    不提供恢复模式的商家直接萌咖dd。hz这种框架就有恢复模式

    回复

    使用道具 举报

    75

    主题

    207

    回帖

    853

    积分

    高级会员

    积分
    853
    天权璇玑 楼主

    75

    主题

    207

    回帖

    853

    积分

    高级会员

    积分
    853
    2023-8-20 18:02:00 | 显示全部楼层

    toot 发表于 2023-8-20 18:00

    写了这么多……恢复模式下载dd包重启,搞定

    要的就是不考虑任何你所假设的“理想”环境,如果 Hetzner 不提供恢复模式,你又该怎么办呢?
    回复

    使用道具 举报

    75

    主题

    207

    回帖

    853

    积分

    高级会员

    积分
    853
    天权璇玑 楼主

    75

    主题

    207

    回帖

    853

    积分

    高级会员

    积分
    853
    2023-8-20 18:02:41 | 显示全部楼层

    toot 发表于 2023-8-20 18:05

    不提供恢复模式的商家直接萌咖dd。hz这种框架就有恢复模式

    诶,巧了,就我今天说的这种不规则 IPv4 情况,且没有恢复模式,你不用我的,用谁的都没用
    回复

    使用道具 举报

    12

    主题

    580

    回帖

    1520

    积分

    金牌会员

    积分
    1520
    谷歌浏览器

    12

    主题

    580

    回帖

    1520

    积分

    金牌会员

    积分
    1520
    2023-8-20 18:00:00 | 显示全部楼层
    帮顶,刚看完,支持技术贴
    回复

    使用道具 举报

    75

    主题

    207

    回帖

    853

    积分

    高级会员

    积分
    853
    天权璇玑 楼主

    75

    主题

    207

    回帖

    853

    积分

    高级会员

    积分
    853
    2023-8-20 18:06:33 | 显示全部楼层

    toot 发表于 2023-8-20 18:05

    不提供恢复模式的商家直接萌咖dd。hz这种框架就有恢复模式

    不爱看别看,没人求着你看,照你这种滑坡逻辑,用商家面板自带的系统就好了,为什么还要用脚本重装,你也可以问问萌咖为什么当年吃饱了撑得,搞这个脚本,我只是继承前人的衣钵而已。
    回复

    使用道具 举报

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

    本版积分规则

    Archiver|小黑屋|HS2V主机综合交流论坛

    GMT+8, 2024-12-23 16:42 , Processed in 0.025509 second(s), 2 queries , Gzip On, Redis On.

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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