天权璇玑 大佬有话说 :
【意见征集】一键重装支持访客时区 静态双栈 网卡重定向
本帖最后由 天权璇玑 于 2022-12-2 20:17 编辑
项目地址:https://github.com/leitbogioro/Tools
最近更新及使用方法:https://hostloc.com/forum.php?mod=viewthread&tid=1094336
另外,你支持新安装的系统中,默认将网卡名重定向吗?小投票的内容如果看不懂,参见本帖第三节:3. 自动识别网卡是否被重定向。投票结果会影响到后续开发,请慎重选择。
1. 访客时区自动设置
缺省情况下,如果我们给脚本的时区一个固定值,比如:Asia/Shanghai,即可满足绝大部分国人的需求,但本着国际主义精神,该脚本面向的是全世界用户,包括我的 github 项目文档就是用纯英文写的,为了适应全世界各地用户的时区,我添加了根据访问该 VPS 用户的 IP 地址,确定其时区的功能,该功能通过 https://ipgeolocation.io/ 提供的 API 完成。
如果你不想被 API 追踪,或想手动设置时区,也可以添加 -timezone 参数,如:-timezone "Asia/Shanghai" 来完成设置,如果输入的格式不对,或者不在当前系统内置的时区列表内,比如“AsiaOsaka”,脚本仍提供了一个缺省值:"Asia/Tokyo"。
另外,我通过 ping 谷歌和推特的连通性来确认机器是在中国大陆境内还是境外,如果是境内,跳过使用 API,直接给上海时区,正好覆盖到绝大部分生活在国内的国人,操作国内机器的需求。
考虑到中国大陆的 VPS 购买需要实名制,一个从未来过中国大陆的外国人无法完成购买,所以曾经来过,或在中国大陆生活过,拥有正式身份(包括临时的),拥有购买中国大陆 VPS 能力,且目前正生活在非东八区时区以外的这一部分人的数量极少,所以不在自动时区设置功能所照顾的范围内,如果你正好是这一部分人,请根据自己所生活的地区,手动设置正确的时区。
如果你使用的是代理连接机器,那么很抱歉,本脚本不是电脑病毒或者贞子,无法从终端逃逸到你当前运行的实体机上,查询你的物理网卡外网 IP 地址并完成正确的时区设置,只能按你用哪个 IP 连接到的这台机器设置当地时区,包括代理服务器。这种情况下,你也需要手动设置正确的时区。
2. 双栈静态网络支持
针对各位坛友 VPS 极为特殊的疑难杂症,比如双栈(同时拥有 IPv4 和 IPv6 地址)且都是静态地址配置的机器,做出了优化,由于系统安装程序只能完成一个网卡的单栈(IPv4)配置,所以支持静态 IPv6 的实现,即获取用户当前系统 IPv6 配置并写入到新系统里的步骤,放到 preseed 后续流程中,双栈动态 DHCP 机器当然也 ok,此特性仅限 Debian。
出现这个案例的机器,最初是坛友@坏坏 向我汇报的,他的机器来自荷兰的一个 oneman 小商家,结果实验做到一半,机器失联了,后来一直连不上了。于是我就用甲骨文的双栈机继续验证,强写静态双栈配置,然后重装,实验后发现新功能可用。
再次提醒,如果你的机器仅支持静态网络配置,请务必在脚本命令最后,加上“–dhcp-static”参数。
实验机器:甲骨文 Oracle ARM 2 OCPU 12 GB 双栈机,区域:澳大利亚悉尼。
https://i.imgur.com/8jhvddc.png
强写静态 IPv4 和 IPv6 配置的网络配置
https://i.imgur.com/GMtbVcF.png
preseed 内系统安装阶段写入了正确的 IPv4 配置
https://i.imgur.com/zmyRr9J.jpg
preseed 内后续执行阶段写入了正确的 IPv6 配置
https://i.imgur.com/WiqAOq0.png
再次进入系统后,网络配置是正确的,不要在意网卡名为什么换了这些细节,详情在第3节,压力测试顺便一块儿做了
Redhat 系列由于版本 7 和 8 的网络配置在 /etc/sysconfig/network-scripts/ 里,9 的网络配置在 /etc/NetworkManager/system-connections/ 里,不同目录里网络配置文件的格式完全不同,处理起来实在麻烦,所以双栈机静态地址配置 IPv6 的就不支持了,DHCP 可自动配置好。
3. 自动识别网卡是否被重定向
部分商家的部分系统模板,如搬瓦工的 Ubuntu 22.04 amd64,默认会在 /etc/default/grub 这个文件的 “ GRUB_CMDLINE_LINUX="" ”项目中,插入:"net.ifnames=0 biosdevname=0" 值,包括坛友@坏坏 的机器,这个参数是通过 grub 或 grub2 引导 Linux 内核时,强制所有网卡的名称重定向为统一的 eth0,eth1……这样的,而不再是网卡本身的物理名称,比如 ens18,ens3,enp0s3,等等。
这么做比较方便网络管理员用脚本对一个大局域网里数十台,乃至上万的计算机的网络配置进行统一管理,因为网卡名称都统一了,不会因为网卡制造商名称不同而不同,坏处是一旦新安装系统里,未指定附带这个值,那么原系统里获取的比如“eth0”的网卡名称,以及与它有关的网络配置,在新系统内就无效了。
所以,我在脚本里默认对网卡重定向的机器做了优化,如果什么都不指定,脚本会自动检测当前系统是否将网卡名称重定向了,如果是,新安装的系统内继承这个配置,并且由于我们知道这样做,默认第一个网卡名必然是“eth0”,所以属于网卡“eth0”的,预先写好的网络配置内容仍然有效。如果没有做这个设置,那么我们在当前系统获得的网卡名称就是真实的,属于该网卡名称下的网络配置对新系统也有效。
为了给那些喜欢追求新鲜感和刺激感,勇于挑战自我的朋友们,提供更加 exciting 的选择,我还添加了两个参数,一个是 –adapter "真实的物理网卡名",另一个是 –netdevice-unite(该参数不需要指定值)。这两个参数不建议混用,因为它们的作用几乎是相反的:
–adapter 的作用是,如果你的原系统网卡名重定向了,当且仅当你知道这台机器网卡正确的物理名称是什么,并且要在新系统里关闭网卡重定向功能是才需要指配,为什么要告诉脚本物理网卡的真实名称?因为 Linux 内核网卡重定向功能对真实网卡名进行了完全隐藏,我在系统里找半天也无法找到,既然在当前系统内无法找到,那就只能你手动指配。注意,如果指配错误,会直接影响到重启后安装程序自动配置 IPv4 网络,以及后续 IPv6 网络配置文件的写入正确性。
正如其名,–netdevice-unite 的作用恰好反过来,即如果你当前系统网卡并没有被重定向,但想要在待安装的新系统里进行重定向,那么你可以指配这个参数,无论在哪个商家,哪个配置的机器上安装,在新系统里,网卡名称会被统一成 eth0 eth1……等,但代价是新系统里不再记录真实网卡的名字,在使用这个参数时,你应该提前记好这台机器本来真实网卡的名字是什么,以备以后重装时,不再需要网卡重定向了之后还原配置。
https://i.imgur.com/29OvBw6.png
动态网卡未重定向网络配置
https://i.imgur.com/skUi87L.png
动态网卡重定向网络配置
静态网卡重定向网络配置第2节里有。
https://i.imgur.com/zxSPekq.png
网卡未重定向时,grub 自定义配置文件:/etc/default/grub
https://i.imgur.com/88CFZBh.png
网卡重定向时,grub 自定义配置文件,目录同上
如果想在当前系统手动修改网卡重定向,或取消网卡重定向怎么办?
打开文件,寻找到“ GRUB_CMDLINE_LINUX="" ”项目,针对“net.ifnames=0 biosdevname=0”,加入表示重定向网卡名称,删除表示还原网卡真实名称。
vim /etc/default/grub
刷新 grub 配置才能生效,grub1 或 grub2 命令不同,根据实际情况自己选择:
grub-mkconfig
grub2-mkconfig
当然,说了这么复杂,你只需要记住,相信脚本的自动判断能力,指派的东西越多,出错的概率越大,the less is more。
另外,以上这些,自己怎么折腾都行,不要在正式的生产环境中操作,尤其是涉及到修改内核加载参数的操作,谁也无法承担生产环境中出错带来的不可逆的后果,你应当对你自己的行为负责。
0.0 大佬有话说 :
太牛逼了yc002t
zdszf 大佬有话说 :
太牛逼了 支持archlinux
3351239779 大佬有话说 :
顶一下
你的帖子,让我重新在loc看到了光https://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif
鸡不择食 大佬有话说 :
5k 不来了?https://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif
东风破 大佬有话说 :
价值几K的脚本
她说是晒黑的 大佬有话说 :
好,支持大佬的技术贴,阴阳怪退散https://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif
沙龙 大佬有话说 :
大佬牛皮。
/**
* 人死后会成为什么?夜空中的一座孤岛。——《一封孤岛的信》
*
* Link https://greasyfork.org/zh-CN/scripts/396933-hostloc-zsbd
*/https://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif