Linux 网络重装脚本支持 Vultr 纯 IPv6,双栈机型

项目地址,欢迎 star:

https://github.com/leitbogioro/Tools

最近更新内容,太长不看版:

  • Debian 原版太素净了,于是预置大量常用组件,支持文件彩色显示;
  • 定制了一个漂亮的 Debian 欢迎画面;
  • 首家支持 Vultr 2.5 刀单栈 IPv6 机器(仅限 DHCP,其他纯 IPv6 VPS 应该也可,欢迎测试上报)
  • 首家支持双栈(IPv4 IPv6 公网 IP 皆有)机型(自动完成 IPv4/6 配置,不用在新系统里手工改,仅限 Debian、DHCP)
  • 市面上绝大部分 VPS 都支持 DHCP,包括甲骨文,系统是否支持 DHCP,安装前脚本会自动判断逻辑。但用过我的旧版,或者萌咖的,或者其他魔改萌咖版脚本重装成 Debian/Ubuntu 的机型,系统网络配置一定是静态分配的,这是源头萌咖脚本逻辑判断不够完善。
  • 符合以上条件,如果要用我的新脚本重装,读取网络配置肯定会出问题,请一定把网络配置改成正确的。如果有 DHCP,要么请手动改回去,要么用面板重装功能重装一个附带正确网络配置的系统。
  • 甲骨文机器无面板重装功能,所以你如果既不想删机,又想重装,可以放心大胆地把网络配置改成 DHCP,例如 Debian,把:/etc/network/interfaces 里内容改成“iface inet 机器网卡名称 dhcp”(IPv4)和“iface inet6 机器网卡名称 dhcp”(IPv6),重启后再运行新的重装脚本。

Linux 网络重装脚本支持 Vultr 纯 IPv6,双栈机型

————————————-我是分隔线————————————-

技术细节版:

经过广泛测试,我发现萌咖的脚本安装 Debian 类(Debian/Ubuntu)系统时,preseed 文件制定的“d-i”(Debian install)的网络配置流程有大问题,它是强制读取当前系统 IPv4 地址、子网掩码、网关,并指定一个 DNS 服务器(默认“8.8.8.8”),并且把这些配置硬塞给新安装系统的网络配置中。

以往大家用的都是 IPv4 单栈机型,这样配置没什么问题,直到随着 IPv6 普及,单栈 IPv6,双栈机型的大量出现,这种配置的缺陷就慢慢体现出来了:

1. “d=i”手动指定网络参数配置,只能写入一种,要么 IPv4,要么 IPv6,不能混搭,给同一参数指定多项配置的话,要么无效,要么下一条配置顶掉了上一条,对于双栈机,此过程如果要同时写入 IPv4 和 IPv6 配置是无意义的;

2. “d-i” DHCP 默认优先用 IPv4 连接网络源安装,如果 IPv4 有网;

3. 对于单栈 IPv6 机器,“d-i” DHCP 可以正确获取 IPv6 配置并完成安装,系统安装结束后,网卡里会自动配置 IPv4(仅限内网)和 IPv6。

基于这些事实和相关实验,我们可以得到以下结论:

1. 纯 IPv6 单栈机强制给 IPv4 参数,必然会安装失败,因为给机器的是 IPv4 配置,虽然原系统里有,但 IPv4 的路由是无法连接网络的,在此过程中系统无法获得 IPv6 配置并连接网络,不能成功连接到相关源,后续安装更无从谈起。

2. 纯 IPv6 单栈机强制给 IPv6 参数,虽然可以通过校验网络连接部分,但因为缺少内网 IPv4 配置,导致一些内部路由转发出现问题,使连接源下载组件的时候,频繁报错,需要连接 VNC 手动确认,不但丢失了全自动安装效果,还会导致安装后 ssh 无法连接机器。

3. 双栈机型安装时仅配置了 IPv4,如果要支持 IPv6,需要在重装后进入系统手动配置一下。

4. 现在绝大部分 VPS 商家由于面临多机器管理,给每台机器镜像里单独定制静态分配 IP 从成本和管理便利性来说都会造成更多麻烦,所以 VPS 支持 DHCP 是大势所趋,不必纠结于必须手动配置网络。

所以,我在脚本程序中加入了完善的逻辑判断,确保可以顺利读出当前主流 Linux 发行版,比如红帽系的 CentOS/AmalLinux/Rockey/Vzlinux,Debian 系的 Debian/Ubuntu 中的网络配置方式,如果是 DHCP,“d-i”流程自动跳过强制写入 IPv4 配置流程。这一前提,必须是原系统网络配置正确,不能原来是动态的,被改成静态的,反之亦然。

对于 Debian 双栈 DHCP 机型如何确保安装后,首次 ssh 连接机器后,就能发现 IPv4 和 IPv6 都已经配置好了,既然安装前网络阶段只能配置完成 IPv4,那么 IPv6 只能放在后续 preseed 流程中,我的方法是获得当前系统网卡硬件名称,后续在 Debian 网络配置文件里写入开启 IPv6 的 DHCP 配置参数。

如果你的 VPS 仅支持静态网络参数配置,也不要担心,确保你当前系统网络配置是完全正确的情况下,脚本逻辑有完善的逻辑判断,确认你的机器不是 DHCP,从而返回手动配置 IPv4 流程,让你的机器能重装后正确连接网络。

从 Ubuntu 18.04 以后,系统引入了一个叫 netplan 的组件来管理网络连接参数,netplan 的配置文件是 yaml 语法,靠不同长度的缩进来区分不同网卡的参数从属项,语法跟 interfaces 完全不一样,preseed 阶段写入是真的麻烦,所以双栈机 Ubuntu 系统 IPv6 的 DHCP 配置文件写入不想搞了。

再次提醒一下,Ubuntu 22.04 虽然支持全新的,叫“Cloud-init”的网络重装方式,是由 Ubuntu 母公司 Canonical 开发的,但这种方式对机器硬件性能要求很高,CPU 支持虚拟化是必须项,否则安装过程中 qemu 程序就会启动失败。

这一点对一般的 VPS 而言是真的难顶,虽然他们的母机 CPU 必然支持虚拟化的,但经过虚拟化后的客户机 CPU 想再有虚拟化支持可就不一定了,经过观察,目前搬瓦工、Virmach、Racknerd、Cloudcone 等绝大部分廉价 Linux VPS CPU 都是不支持虚拟化的,Vultr、DigitalOcean、Linode 等廉价套餐也不支持,硬件配置高的机型也不一定支持,特性是一样的。现在确认 CPU 支持虚拟化的,只有甲骨文、独服等等了。

虽然我可以制作一个无人值守安装镜像,通过 dd 来实现支持,但这和 Linux 网络重装的理念就相去甚远了,系统核心文件来自官方权威的源才让人放心,私人打包的靠不靠谱两说,问题是我自己还要维护一个直链下载站,时间和成本都是难题。

所以 Ubuntu 22.04 今后还能不能搞,你自己也应该有答案了,Cloud-init 清理低端人口,适用范围太窄,是 Ubuntu 自己断了这条路的,不让低价值 MJJ 用新的纯净版 Ubuntu 了,我也没办法。所以:

F*ck the canonical!

一些小缺陷:

DHCP 和网络配置逻辑对多网卡的识别不佳,有多网卡且各网卡都需要静态配置网络参数的机器,建议安装前禁用掉其他不常用网卡,仅保留默认常用主网卡,安装完系统后再启用其他网卡完成配置。

给TA打赏
共{{data.count}}人
人已打赏
系统运维

TCP 协议的三次握手和四次握手

2022-11-15 10:16:22

系统运维

MySQL 数据库 ORDER BY 排序语句的用法

2022-11-29 15:07:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索