bin456789 / reinstall

一键DD/重装脚本 (One-click reinstall OS on VPS)
GNU General Public License v3.0
2.2k stars 355 forks source link

udhcpc failed to get a DHCP lease #3

Closed tanglu1323123 closed 10 months ago

tanglu1323123 commented 1 year ago

遇到了这个报错 似乎需要手动指定 IP 网关和子网掩码

image

leitbogioro commented 1 year ago

Digital Ocean 的机器 IPv4 IPv6 全都是静态配置的,用 dhcp 配置当然连接不到网络: 想装 AlpineLinux 可以用我的脚本,支持 IPv4 静态配置,debian kali ubuntu centos almalinux rockylinux fedora 的 IPv4 静态配置当然也没问题: https://github.com/leitbogioro/Tools bash InstallNET.sh -alpine edge

bin456789 commented 1 year ago

这个脚本没做网络处理,因为我以为大厂都有dhcpv4 偏偏 Digital Ocean 地址是静态的,长见识了 这回有动力处理静态网络的问题了

tanglu1323123 commented 1 year ago

这个脚本没做网络处理,因为我以为大厂都有dhcpv4 偏偏 Digital Ocean 地址是静态的,长见识了 这回有动力处理静态网络的问题了

OVH gcore do linode hetzner oneprovider vultr 等等,都是静态的ipv4

另外该脚本是否支持ipv4的同时 有没有考虑ipv6呀

bin456789 commented 1 year ago

OVH gcore do linode hetzner oneprovider vultr 等等,都是静态的ipv4

其他没用过,但vultr肯定是支持dhcp的,因为我是在甲骨文和vultr上调试这个脚本的

另外该脚本是否支持ipv4的同时 有没有考虑ipv6呀

要么不管网络(像现在这样),要么全部支持。不过工作量太大,恐怕要很长时间

tanglu1323123 commented 1 year ago

OVH gcore do linode hetzner oneprovider vultr 等等,都是静态的ipv4

其他没用过,但vultr肯定是支持dhcp的,因为我是在甲骨文和vultr上调试这个脚本的

另外该脚本是否支持ipv4的同时 有没有考虑ipv6呀

要么不管网络(像现在这样),要么全部支持。不过工作量太大,恐怕要很长时间

我当时看vultr是静态的 如果不管的话 建议可以手动指定IP 子网掩码 网关那些 https://blog.tanglu.me/dd/#vultr image

leitbogioro commented 1 year ago

OVH gcore do linode hetzner oneprovider vultr 等等,都是静态的ipv4

其他没用过,但vultr肯定是支持dhcp的,因为我是在甲骨文和vultr上调试这个脚本的

另外该脚本是否支持ipv4的同时 有没有考虑ipv6呀

要么不管网络(像现在这样),要么全部支持。不过工作量太大,恐怕要很长时间

我当时看vultr是静态的 如果不管的话 建议可以手动指定IP 子网掩码 网关那些 https://blog.tanglu.me/dd/#vultr image

IPv4 IPv6 动态、静态,分别一共是4种状态,而且有些商家 IPv4 IPv6 只能用静态配置,不能用dhcp,且有些系统自带的配置由于网管不专业,给的掩码很容易因为范围过窄(比如IPv4 prefix 32,IPv6 prefix 128),导致重装后安装程序报unreachable gateway,重装前需要根据主IP和网关这两个条件,算出应该给的正确掩码,里面的坑不计其数,只有经过广泛的测试和适配才能逐渐完善。我脚本解决了以上静态网络配置中可能存在的各种问题,同样支持手动指派IPv4或IPv6或IPv4和IPv6配置。

leitbogioro commented 1 year ago

这个脚本没做网络处理,因为我以为大厂都有dhcpv4 偏偏 Digital Ocean 地址是静态的,长见识了 这回有动力处理静态网络的问题了

OVH gcore do linode hetzner oneprovider vultr 等等,都是静态的ipv4

另外该脚本是否支持ipv4的同时 有没有考虑ipv6呀

Debian的preseed "d-i netcfg"网络配置部分,只能用IPv4或IPv6一种方法给系统配置网络,不能两者都给,否则会报错,所以一般双栈机的处理方式是先把IPv4部分用"d-i netcfg"语法处理好,IPv6部分在"d-i preseed/late_command string"部分写入到/etc/network/interfaces里,如果是机器仅有IPv6栈,给preseed配置静态IPv6网络的掩码部分不能给IPv6 prefix值,必须得转换成IPv6全写格式,这又得用一套算法来解决,AlpineLinux目前不支持从纯IPv6启动,双栈机处理方式和Debian类似,但IPv6部分仅能用静态配置,不能用动态,Ubuntu的cloud init又是用的另一种方法,红帽系可以原生同时配置好IPv4和IPv6动态静态网络。总之就是非常复杂,不看任何别人写的代码,把我上面说的坑和我忘了提到的坑都亲自踩一遍,没几个月时间搞不定。

bin456789 commented 1 year ago

@leitbogioro 然而你踩了无数坑的脚本还是有问题,以这个帖子出现的do为例 开一台debian12机器,后台面板开启ipv6,后台面板重装debian12(为了自动配置ipv6) 然后用你的脚本重装 debian12 bash InstallNET.sh -debian

重装后 eth0 ipv4/v6 的掩码都变了 146.190.164.110/20 > 146.190.164.110/16,后果是/16到/20中间这段网络不可达 2604:a880:4:1d0::3e6:0/64 > 2604:a880:4:1d0::3e6:0/96 还有eth0/eth1各丢了一个内网ipv4,不过这不重要

以下是重装前后的 ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether be:cc:c2:83:a6:7f brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    inet 146.190.164.110/20 brd 146.190.175.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.48.0.5/16 brd 10.48.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2604:a880:4:1d0::3e6:0/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::bccc:c2ff:fe83:a67f/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 1e:6a:55:ee:78:07 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    altname ens4
    inet 10.124.0.2/20 brd 10.124.15.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::1c6a:55ff:feee:7807/64 scope link
       valid_lft forever preferred_lft forever
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether be:cc:c2:83:a6:7f brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    inet 146.190.164.110/16 brd 146.190.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2604:a880:4:1d0::3e6:0/96 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::bccc:c2ff:fe83:a67f/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 1e:6a:55:ee:78:07 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    altname ens4
bin456789 commented 1 year ago

给preseed配置静态IPv6网络的掩码部分不能给IPv6 prefix值,必须得转换成IPv6全写格式,这又得用一套算法来解决

隔壁 debi 好像不用这么搞

bin456789 commented 1 year ago

AlpineLinux目前不支持从纯IPv6启动

我有方法,搞定所有东西再公布 0018f8e25dde547b39c40130344442eae2932ad06101096e82f19db80447593a

leitbogioro commented 1 year ago

@leitbogioro 然而你踩了无数坑的脚本还是有问题,以这个帖子出现的do为例 开一台debian12机器,后台面板开启ipv6,后台面板重装debian12(为了自动配置ipv6) 然后用你的脚本重装 debian12 bash InstallNET.sh -debian

重装后 eth0 ipv4/v6 的掩码都变了 146.190.164.110/20 > 146.190.164.110/16,后果是/16到/20中间这段网络不可达 2604:a880:4:1d0::3e6:0/64 > 2604:a880:4:1d0::3e6:0/96 还有eth0/eth1各丢了一个内网ipv4,不过这不重要

以下是重装前后的 ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether be:cc:c2:83:a6:7f brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    inet 146.190.164.110/20 brd 146.190.175.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.48.0.5/16 brd 10.48.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2604:a880:4:1d0::3e6:0/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::bccc:c2ff:fe83:a67f/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 1e:6a:55:ee:78:07 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    altname ens4
    inet 10.124.0.2/20 brd 10.124.15.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::1c6a:55ff:feee:7807/64 scope link
       valid_lft forever preferred_lft forever
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether be:cc:c2:83:a6:7f brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    inet 146.190.164.110/16 brd 146.190.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2604:a880:4:1d0::3e6:0/96 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::bccc:c2ff:fe83:a67f/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 1e:6a:55:ee:78:07 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    altname ens4

确实,掩码设置过大或过小都不合适,过小会导致安装程序可能找不到网关,过大会导致机器把非子网的机器当做子网,导致通信失败,但现在的问题是有些商家面板里用ip addr查到的ip后缀是32位或ipv6是128位,这很明显是错误的,我想解决的是这种情况下出现的问题

leitbogioro commented 1 year ago

给preseed配置静态IPv6网络的掩码部分不能给IPv6 prefix值,必须得转换成IPv6全写格式,这又得用一套算法来解决

隔壁 debi 好像不用这么搞

我没在他代码里找到获得ip等参数的功能,是我看错了?

leitbogioro commented 1 year ago

还有一个难题,是有些商家ipv4静态ip为公网,网关是一个本地ip 169.254.0.1,大部分情况下,把主机ip末尾去掉,换成1的话,能够确定其为真实网关,但在有些机器上,扫了整个主机ip d段也无法确定哪个网关是有效的,此时只能把网关定为169.254.0.1,掩码设置成128.0.0.0才能通过debian的网络检查,但就像你说的,这么设置也不对,会导致很多ip被当成内网ip而不可达

tanglu1323123 commented 1 year ago

还有一个难题,是有些商家ipv4静态ip为公网,网关是一个本地ip 169.254.0.1,大部分情况下,把主机ip末尾去掉,换成1的话,能够确定其为真实网关,但在有些机器上,扫了整个主机ip d段也无法确定哪个网关是有效的,此时只能把网关定为169.254.0.1,掩码设置成128.0.0.0才能通过debian的网络检查,但就像你说的,这么设置也不对,会导致很多ip被当成内网ip而不可达

就我dd过的vps而言, ip route/ip -6 route ifconfig 这两个命令足以查看vps的IP 子网掩码 网关 暂时没遇到过这两个参数填写完后无法成功dd的 唯一没有dd成功的scaleway 不知道是镜像问题 还是机器配置问题

leitbogioro commented 1 year ago

还有一个难题,是有些商家ipv4静态ip为公网,网关是一个本地ip 169.254.0.1,大部分情况下,把主机ip末尾去掉,换成1的话,能够确定其为真实网关,但在有些机器上,扫了整个主机ip d段也无法确定哪个网关是有效的,此时只能把网关定为169.254.0.1,掩码设置成128.0.0.0才能通过debian的网络检查,但就像你说的,这么设置也不对,会导致很多ip被当成内网ip而不可达

就我dd过的vps而言, ip route/ip -6 route ifconfig 这两个命令足以查看vps的IP 子网掩码 网关 暂时没遇到过这两个参数填写完后无法成功dd的 唯一没有dd成功的scaleway 不知道是镜像问题 还是机器配置问题

如果像你说的那么简单就好了,99%的情况是没问题,那是你还见得不够多,随便去欧洲那边小商家买台机器玩玩,保证能刷新你三观,用你说的命令直接获得的网关和掩码填进去重装,不加任何处理,保证出红框unreachable gateway

tanglu1323123 commented 1 year ago

如果像你说的那么简单就好了,99%的情况是没问题,那是你还见得不够多,随便去欧洲那边小商家买台机器玩玩,保证能刷新你三观,用你说的命令直接获得的网关和掩码填进去重装,不加任何处理,保证出红框unreachable gateway

如果可以的话 你可以列举一家,我去看看

leitbogioro commented 1 year ago

如果像你说的那么简单就好了,99%的情况是没问题,那是你还见得不够多,随便去欧洲那边小商家买台机器玩玩,保证能刷新你三观,用你说的命令直接获得的网关和掩码填进去重装,不加任何处理,保证出红框unreachable gateway

如果可以的话 你可以列举一家,我去看看

Godaddy Hetzner hostbrr arkecx tk-hosting 等等,都是坑逼

tanglu1323123 commented 1 year ago

Godaddy Hetzner hostbrr arkecx tk-hosting 等等,都是坑逼

我测试过hetzner和tk-hosting 就填写 ip routeifconfig就可以了 即使hz的比较奇怪,tkhosting也与控制台显示的不符

https://blog.tanglu.me/dd/#Hetzner https://blog.tanglu.me/dd/#tk-hosting

leitbogioro commented 1 year ago

Godaddy Hetzner hostbrr arkecx tk-hosting 等等,都是坑逼

我测试过hetzner和tk-hosting 就填写 ip routeifconfig就可以了 即使hz的比较奇怪,tkhosting也与控制台显示的不符

https://blog.tanglu.me/dd/#Hetzner https://blog.tanglu.me/dd/#tk-hosting

tk-hosting前两天刚测过一台,填从它系统里获取的网关必报错,比如主ip是89.163.208.5,网关是169.254.0.1,掩码是255.255.255.0,拿这个给debian preseed,重装必红框。那个169.254.0.1网段本来是dhcp配置失败后自动分配给机器的保留ip,按规范来说,不能当做网关来用。实际网关是89.163.208.1,这还是在web面板查到的,那些godaddy arkecx web后台networking里只给你一个主ip,实际网关是什么根本不告诉你,打电话给客服也不知道,这种情况你怎么处理?去他公司母机上看?

leitbogioro commented 1 year ago

Godaddy Hetzner hostbrr arkecx tk-hosting 等等,都是坑逼

我测试过hetzner和tk-hosting 就填写 ip routeifconfig就可以了 即使hz的比较奇怪,tkhosting也与控制台显示的不符

https://blog.tanglu.me/dd/#Hetzner https://blog.tanglu.me/dd/#tk-hosting

我昨天故意用一份错误的配置去安装红帽系,事实证明红帽系网络安装程序的纠错能力比debian和alpine强,比如原本正确的主ip是23.124.57.121,网关23.124.57.1,掩码255.255.255.0,网络上应该当内网处理的ip段是23.124.57.0-23.124.57.254,网关23.124.57.1也被包含其中,此时各种系统按静态配置都没问题,然而我故意把掩码设置成255.255.255.240,即根据主ip值,只允许网络上23.124.57.120-23.124.57.134按内网处理,debian和alpine就会报错,而红帽系就能自动跳过这个错误,完成安装,我的判断是由于debian和alpine的预安装环境都是busybox,默认调用udhcpc造成的,因为udhcpc会根据主机ip和掩码算出一个属于内网的ip段,如果发现网关不在其中就会报错,而红帽系的预安装环境是annaconda,跟busybox不一样,用的也不是udhcpc,所以udhcpc的bug也不会影响到红帽系的网络配置

leitbogioro commented 1 year ago

Godaddy Hetzner hostbrr arkecx tk-hosting 等等,都是坑逼

我测试过hetzner和tk-hosting 就填写 ip routeifconfig就可以了 即使hz的比较奇怪,tkhosting也与控制台显示的不符

https://blog.tanglu.me/dd/#Hetzner https://blog.tanglu.me/dd/#tk-hosting

现在的结论就是如果网关不在根据主ip和掩码算出的范围内,运行网络安装程序配置网络,红帽系不会出问题,debian alpine会出问题,由于安装Ubuntu需要先启动alpine dd,所以网络安装Ubuntu的问题也归在debian alpine里,如果是系统装好了,网络配置文件里怎么改都没问题,因为正式系统中的层级已经替代udhcpc接管了网络,不涉及udhcpc的检查自然就不会网关报错。所以我目前的解决方案是把原系统中获得的iPv4 iPv6掩码备份出来,单独存在变量里,安装时的掩码先根据主机ip和网关ip的A B C类等比对,给一个范围较大的值,确保先能过安装程序的网络检测,等重装后再把原系统里的掩码值给替换回来,避免上面说的DigitalOcean出现的ipv4掩码从20变成16,ipv6掩码从64变成96,造成对一些机器通信失败的情况

tanglu1323123 commented 1 year ago

现在的结论就是如果网关不在根据主ip和掩码算出的范围内,运行网络安装程序配置网络,红帽系不会出问题,debian alpine会出问题,由于安装Ubuntu需要先启动alpine dd,所以网络安装Ubuntu的问题也归在debian alpine里,如果是系统装好了,网络配置文件里怎么改都没问题,因为正式系统中的层级已经替代udhcpc接管了网络,不涉及udhcpc的检查自然就不会网关报错。所以我目前的解决方案是把原系统中获得的iPv4 iPv6掩码备份出来,单独存在变量里,安装时的掩码先根据主机ip和网关ip的A B C类等比对,给一个范围较大的值,确保先能过安装程序的网络检测,等重装后再把原系统里的掩码值给替换回来,避免上面说的DigitalOcean出现的ipv4掩码从20变成16,ipv6掩码从64变成96,造成对一些机器通信失败的情况

但是有些 IP和网关根本不和子网掩码匹配,没办法知道服务商怎么设置的,拿hetzner为例 IP 5.78.73.181 gateway 172.31.1.1 netmask 255.255.255.255 不过我对dd也不了解 只是单纯认为自己猜子网掩码是不正确的

leitbogioro commented 1 year ago

现在的结论就是如果网关不在根据主ip和掩码算出的范围内,运行网络安装程序配置网络,红帽系不会出问题,debian alpine会出问题,由于安装Ubuntu需要先启动alpine dd,所以网络安装Ubuntu的问题也归在debian alpine里,如果是系统装好了,网络配置文件里怎么改都没问题,因为正式系统中的层级已经替代udhcpc接管了网络,不涉及udhcpc的检查自然就不会网关报错。所以我目前的解决方案是把原系统中获得的iPv4 iPv6掩码备份出来,单独存在变量里,安装时的掩码先根据主机ip和网关ip的A B C类等比对,给一个范围较大的值,确保先能过安装程序的网络检测,等重装后再把原系统里的掩码值给替换回来,避免上面说的DigitalOcean出现的ipv4掩码从20变成16,ipv6掩码从64变成96,造成对一些机器通信失败的情况

但是有些 IP和网关根本不和子网掩码匹配,没办法知道服务商怎么设置的,拿hetzner为例 IP 5.78.73.181 gateway 172.31.1.1 netmask 255.255.255.255 不过我对dd也不了解 只是单纯认为自己猜子网掩码是不正确的

对,我的意思就是这种情况,主ip是公网的,网关ip是169.254.0.1这种按规范来说本来应该是dhcp分配失败后主机自动获得的私有地址,但不知道为什么有好多商家把它当网关用,它是实际网关ip在本地的一个代理,就像你在你家里路由器上ip是192.168.0.3,访问公网查到的ip又是另一个样,不依赖任何外部手段查询,这个转换互相是不可逆的,你有本地ip,不知道公网ip是什么,同样你只知道公网ip,也不知道对方在本地路由器上的ip是什么,如果不查它web后台正确的网关给的是什么,debian alpine重装网络配置这块就通过不了。

还有一种情况,主ip和网关都是公网的,且也能在系统里查到,但它们从A类起就不一样,这种情况也只能先给一个最大范围的掩码才行,装完了再改回来。

设置大掩码能通过网络程序安装检测,但后果是被当做内网通信的ip太多,安装时连接源会出现各种问题,有时候从十几个里才能挑到两三个有用的。虽然进正式系统内大掩码问题能改回来。

leitbogioro commented 1 year ago

现在的结论就是如果网关不在根据主ip和掩码算出的范围内,运行网络安装程序配置网络,红帽系不会出问题,debian alpine会出问题,由于安装Ubuntu需要先启动alpine dd,所以网络安装Ubuntu的问题也归在debian alpine里,如果是系统装好了,网络配置文件里怎么改都没问题,因为正式系统中的层级已经替代udhcpc接管了网络,不涉及udhcpc的检查自然就不会网关报错。所以我目前的解决方案是把原系统中获得的iPv4 iPv6掩码备份出来,单独存在变量里,安装时的掩码先根据主机ip和网关ip的A B C类等比对,给一个范围较大的值,确保先能过安装程序的网络检测,等重装后再把原系统里的掩码值给替换回来,避免上面说的DigitalOcean出现的ipv4掩码从20变成16,ipv6掩码从64变成96,造成对一些机器通信失败的情况

但是有些 IP和网关根本不和子网掩码匹配,没办法知道服务商怎么设置的,拿hetzner为例 IP 5.78.73.181 gateway 172.31.1.1 netmask 255.255.255.255 不过我对dd也不了解 只是单纯认为自己猜子网掩码是不正确的

172.31.1.1也是一个本地ip,实际没什么意义,你这个例子里,掩码是255.255.255.255,即规定本机ip的通信范围只包含它自己本身,也就是说网关也只能是机器它自己,这样你觉得有可能吗?

arloor commented 1 year ago

太酷啦哥,其实我之前也想提支持静态ip配置的,哈哈

leitbogioro commented 1 year ago

太酷啦哥,其实我之前也想提支持静态ip配置的,哈哈

酷来个star,感谢支持: https://github.com/leitbogioro/Tools/

leitbogioro commented 1 year ago

现在的结论就是如果网关不在根据主ip和掩码算出的范围内,运行网络安装程序配置网络,红帽系不会出问题,debian alpine会出问题,由于安装Ubuntu需要先启动alpine dd,所以网络安装Ubuntu的问题也归在debian alpine里,如果是系统装好了,网络配置文件里怎么改都没问题,因为正式系统中的层级已经替代udhcpc接管了网络,不涉及udhcpc的检查自然就不会网关报错。所以我目前的解决方案是把原系统中获得的iPv4 iPv6掩码备份出来,单独存在变量里,安装时的掩码先根据主机ip和网关ip的A B C类等比对,给一个范围较大的值,确保先能过安装程序的网络检测,等重装后再把原系统里的掩码值给替换回来,避免上面说的DigitalOcean出现的ipv4掩码从20变成16,ipv6掩码从64变成96,造成对一些机器通信失败的情况

但是有些 IP和网关根本不和子网掩码匹配,没办法知道服务商怎么设置的,拿hetzner为例 IP 5.78.73.181 gateway 172.31.1.1 netmask 255.255.255.255 不过我对dd也不了解 只是单纯认为自己猜子网掩码是不正确的

现在还有一个问题,是我项目里有人给我提的issue,原始信息是:

idcwiki的机器,ipv6地址是公网,网关是fe80::1那样的,dd默认配置进live cd直接报错gateway unreachable。

我推测补充一下他的环境,应该是纯ipv6栈机器,静态,掩码大概率是64,这种情况下他主机当做内网处理的ipv6地址范围应该始终是他主ipv6的开头,网关fe80::1肯定不在其中,所以debian还是会报错,我不理解debian安装程序在配置网络时,为什么非要做“网关是否包含在根据主ip和掩码计算出的范围内”这种校验,网关我想设置成什么就设置成什么,用得着你计算范围校验合不合法,而且最让人头疼的是这种不“合法”的设定在正式系统中设置是有效的,甲骨文ipv6部分静态也可以用公网ipv6,fe80网关,掩码64这样配置联网,之所以甲骨文这样的双栈机ipv6部分能这样配而不会报错的原因,是它ipv4部分的配置是规范的,不合“规范”的ipv6部分可以在late command阶段强制写入到/etc/network/interfaces中,但一旦你拿这个配置填到d-i netcfg/ 里去,安装程序就会提示网关不可达,这种按同样配置在安装时和正式系统里完全不同的表现是很致命的

leitbogioro commented 1 year ago

目前纯ipv6机器能成功通过debian刚开始安装时联网的案例有两种:

  1. 支持dhcp
  2. 原系统中主ipv6和网关在同一个网段

Debian preseed 官方给出的案例也印证了我以上的推论,且掩码部分需要用ffff:ffff这样的全写格式,不能填64这样的:

IPv6 example

d-i netcfg/get_ipaddress string fc00::2

d-i netcfg/get_netmask string ffff:ffff:ffff:ffff::

d-i netcfg/get_gateway string fc00::1

d-i netcfg/get_nameservers string fc00::1

d-i netcfg/confirm_static boolean true

leitbogioro commented 1 year ago

Debian 11 及以下安装程序无法识别静态公网 IPv6 + 内网 fe80::1 等组合的问题,可以参考硬刷不规则 IPv4 的方法,同样可以在 d-i preseed/early_command 阶段,先把 IPv6 配置写入,且不配置 fe80::1 网关,让安装程序联网,完成安装,最后再将网关刷回网络配置文件里。

bin456789 commented 11 months ago

现在除了用安装模式安装linux外,其他情况都支持静态ip、ipv6

包括dd win、iso安装win、安装 alpine、云镜像

dd win 的话,在登录前就设置好静态 ip、不挑镜像,遥遥领先

tangluya commented 11 months ago

现在除了用安装模式安装linux外,其他情况都支持静态ip、ipv6

包括dd win、iso安装win、安装 alpine、云镜像

dd win 的话,在登录前就设置好静态 ip、不挑镜像,遥遥领先

我刚刚用do机器测试了下 发现原debian11系统wget下载我dd包速度很快 在50MB/s以上 但是dd时下载的很慢

我的镜像 https://file.1323123.xyz/dd/windows/1keydd/win10ltsc_password_1keydd.gz https://file2.1323123.xyz/dd/windows/1keydd/win10ltsc_password_1keydd.gz

bin456789 commented 11 months ago

在原机器下载,没有解压和dd的过程,只需要写入镜像压缩后的大小 而真正dd可能要写入20g的数据,所以慢是正常的

tangluya commented 11 months ago

用安装模式安装 Linux 要有 DHCPv4 这个安装模式是什么意思呀

支持静态IP 从windows dd 到linux吗

bin456789 commented 11 months ago

安装模式就是安装模式咯 与之相对的是云镜像模式,类似dd,不过用的镜像是官方提供的

支持静态IP 从windows dd 到linux吗

支持,要加 --ci 参数强制使用云镜像

tangluya commented 11 months ago

了解

云镜像就是指你做的dd包吗?

脚本支持给云镜自动配置网卡吗

bin456789 commented 11 months ago

😥

我感觉我说得很清楚了啊

云镜像就是指你做的dd包吗?

官方的

脚本支持给云镜自动配置网卡吗

支持

tangluya commented 11 months ago

不太清楚dd需要什么 :)

--ci是通过官方源dd吗

那不指定--ci,直接 bash reinstall.sh centos 7,是怎么弄的呀,不指定--ci是用dd包吗

bin456789 commented 11 months ago

不添加 --ci 参数:1g内存用安装模式,小于1g用云镜像 添加 --ci 参数:无论内存大小,强制使用云镜像

无法指定源,也不需要指定云镜像用的dd包

bin456789 commented 11 months ago

linux dd包是官方的,所以不需要指定

tangluya commented 11 months ago

linux dd包是官方的,所以不需要指定

可以给个官方包链接看看嘛 想了解下

都是通过官方iso安装吗?我不太清楚这两个有什么区别 哈哈

bin456789 commented 11 months ago

可以给个官方包链接看看嘛 想了解下

谷歌搜索 centos 7 qcow2 debian 12 qcow

都是通过官方iso安装吗?我不太清楚这两个有什么区别 哈哈

就是iso安装win,和dd win的区别