logo NodeSeekbeta

史上最强,支持 Debian 12 raid 0 Ubuntu 24.04(测试中);512MB 内存安装 AlmaLinux/RockyLinux;CentOS 9 Fedora 39 AlpineLinux Kali Linux Windows 重装程序功能更新、bug反馈贴(长期更新)

  • 非常好用

  • @Not-Oles #199 I think you should use default port(probably 22), default password(LeitboGi0ro), recommended ssh client(Xshell or Putty) to reinstall and connect to the server again, if it still failed, don't attempt to mount it and insert any files, tell me the IP, root password by email, I try to connect it.

  • 支持大佬,感谢分享

  • 啊这……

    很多欧洲 oneman 小商家,甚至 Hetzner Godaddy 等大厂,由于网管的技术水平极其业余,其模板系统自带的静态网络掩码设置都有致命缺陷,比如 IPv4 设置为 255.255.255.255,IPv6 prefix 设置为 128,导致重启后 Debian installer 等网络安装内核寻找的 IP 地址范围过窄,触发网关不可达(unreachable gateway)报错,如果按原样从原系统内读取,不根据主 IP 和网关 IP 加以对比计算和修正,得出适合的掩码,或者是默认模板基于红帽系,用其他同类脚步重装一定会出现此类问题且不可解决。

    请教大佬这个v6掩码的问题。
    比如一个商家,给日本区小鸡划分的是2001:0db8:9999::/48网段,给每个小鸡/64,
    那么小鸡获得的是 2001:0db8:9999:0001::1这个IP,那么掩码也是48吗?
    因为我好像试过,改成48、64、128都能用,而我倾向于改成128,这样的话访问2001:0db8:9999:0001::/64这个段里面不存在的IP就不会环路……

    HE套隧道的默认配置文件给的64的子网,

    auto he-ipv6
    iface he-ipv6 inet6 v4tunnel
    address 2001:470:XXXX:X::2
    netmask 64
    endpoint HE的IP4
    local X.X.X.X
    ttl 255
    gateway 2001:470:XXXX:X::1

    这个address改成he给的段内的任何一个IP都能通,netmask设为128好像也能用……
    因为ipv6好像有歧义,比如 2001:470:1888::/64,我不知道这个段都路由给我了,还是单纯告诉我,我的服务器位于这个/64网段内?有点绕,希望大佬解答一下。

  • @Just纱世里 #204

    就拿IPv6举例,我目前的做法是将主ip和网关同样扩展成全写格式(排除::这样的缩写,补全0000等),然后将它们的网段做比较,IPv6部分一共有8段,用冒号隔开,从A类开始,一直到A:B:C:D:E:F:G:H这样的,比如说两者从A就不一样,就给掩码1,除非网关是fe80这样的内网地址,那掩码就给64,如果主ip和网关A和B类相同,掩码给16,以此类推,直到给到112,以下是代码实现:

    function ipv6SubnetCertificate() {
    # If the IP and gateway are in the same IPv6 A class, not in the same IPv6 B class, the prefix of netmask should less equal than "16",
    # transfer to whole IPv6 subnet address is ffff:0000:0000:0000:0000:0000:0000:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/16 is 2603:0000:0000:0000:0000:0000:0000:0000 - 2603:ffff:ffff:ffff:ffff:ffff:ffff:ffff, the gateway 2603:... can be included.
      [[ `echo $1 | cut -d':' -f 1` == `echo $2 | cut -d':' -f 1` ]] && tmpIp6Mask="16"
    # If the IP and gateway are in the same IPv6 A B class, not in the same IPv6 C class, the prefix of netmask should less equal than "32",
    # transfer to whole IPv6 subnet address is ffff:ffff:0000:0000:0000:0000:0000:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/32 is 2603:c020:0000:0000:0000:0000:0000:0000 - 2603:c020:ffff:ffff:ffff:ffff:ffff:ffff, the gateway 2603:... can be included.
      [[ `echo $1 | cut -d':' -f 1,2` == `echo $2 | cut -d':' -f 1,2` ]] && tmpIp6Mask="32"
    # If the IP and gateway are in the same IPv6 A B C class, not in the same IPv6 D class, the prefix of netmask should less equal than "48",
    # transfer to whole IPv6 subnet address is ffff:ffff:ffff:0000:0000:0000:0000:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/48 is 2603:c020:0008:0000:0000:0000:0000:0000 - 2603:c020:0008:ffff:ffff:ffff:ffff:ffff, the gateway 2603:... can be included.
      [[ `echo $1 | cut -d':' -f 1,2,3` == `echo $2 | cut -d':' -f 1,2,3` ]] && tmpIp6Mask="48"
    # If the IP and gateway are in the same IPv6 A B C D class, not in the same IPv6 E class, the prefix of netmask should less equal than "64",
    # transfer to whole IPv6 subnet address is ffff:ffff:ffff:ffff:0000:0000:0000:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/64 is 2603:c020:0008:a19b:0000:0000:0000:0000 - 2603:c020:0008:a19b:ffff:ffff:ffff:ffff, the gateway 2603:... can be included.
      [[ `echo $1 | cut -d':' -f 1,2,3,4` == `echo $2 | cut -d':' -f 1,2,3,4` ]] && tmpIp6Mask="64"
    # If the IP and gateway are in the same IPv6 A B C D E class, not in the same IPv6 F class, the prefix of netmask should less equal than "80",
    # transfer to whole IPv6 subnet address is ffff:ffff:ffff:ffff:ffff:0000:0000:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/80 is 2603:c020:0008:a19b:0000:0000:0000:0000 - 2603:c020:0008:a19b:0000:ffff:ffff:ffff, the gateway 2603:... can be included.
      [[ `echo $1 | cut -d':' -f 1,2,3,4,5` == `echo $2 | cut -d':' -f 1,2,3,4,5` ]] && tmpIp6Mask="80"
    # If the IP and gateway are in the same IPv6 A B C D E F class, not in the same IPv6 G class, the prefix of netmask should less equal than "96",
    # transfer to whole IPv6 subnet address is ffff:ffff:ffff:ffff:ffff:ffff:0000:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/96 is 2603:c020:0008:a19b:0000:0000:0000:0000 - 2603:c020:0008:a19b:0000:0000:ffff:ffff, the gateway 2603:... can be included.
      [[ `echo $1 | cut -d':' -f 1,2,3,4,5,6` == `echo $2 | cut -d':' -f 1,2,3,4,5,6` ]] && tmpIp6Mask="96"
    # If the IP and gateway are in the same IPv6 A B C D E F G class, not in the same IPv6 H class, the prefix of netmask should less equal than "112",
    # transfer to whole IPv6 subnet address is ffff:ffff:ffff:ffff:ffff:ffff:ffff:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/112 is 2603:c020:0008:a19b:0000:0000:ffff:0000 - 2603:c020:0008:a19b:0000:0000:ffff:ffff, the gateway 2603:c020:0008:a19b:0000:0000:0000:ffff can't be included.
      [[ `echo $1 | cut -d':' -f 1,2,3,4,5,6,7` == `echo $2 | cut -d':' -f 1,2,3,4,5,6,7` ]] && tmpIp6Mask="112"
    }
    

    当然,这个掩码是一个临时值,仅用于能通过Debian installer安装阶段的合法性校验,至于正式系统中的掩码,我还是倾向于遵从主机商默认模板系统中的设定,原样是什么就还原回什么,不妄自修改,包括IPv4部分也一样:

    ReplaceActualIpPrefix="$1 sed -ri \"s/address $ipAddr\/$ipPrefix/address $ipAddr\/$actualIp4Prefix/g\" /etc/network/interfaces; $1 sed -ri \"s/netmask $ip6Mask/netmask $actualIp6Prefix/g\" /etc/network/interfaces;"
    
  • @leitbogioro #205

    好强啊,我不懂脚本……
    我问的可能是最最基本的网络问题,因为平时划分网络都是划一个段的IP,而不是给设备直接分配一个网段,只是不知道什么时候用哪个掩码……
    终端分配的ipv6,有状态的掩码就是128,无状态是64,我不知道这是为什么……而且好像用起来也没影响,结果对于dd这种环境影响这么大?

  • @Just纱世里 #204

    Debian安装程序有个致命的缺陷,就是它在给定静态配置网络时,会对主ip和掩码做一个范围计算,如果侦测到网关ip不在这个范围内,就会报unreachable gateway,我被这个问题折磨得死去活来。然而如果你在一台安装好的Debian上修改/etc/network/interfaces文件,违背以上原则,网络也是能正常运作的,这种不一致性很让人头疼。

    掩码你知道的,v4范围是1-32,v6是1-128,它们都可以通过计算,得出对应的全写ip格式。

    它规定了一台计算机应该和哪些计算机当做内网通信,除了这个范围之外的ip当做外网通信,这个值本应该由网管做一个合理的设置,不能给太大,否则内网范围过窄,一些本来应该当内网通信的机器会被当做外网处理,导致访问出错,反之亦然,也不能给太小,否则内网范围过大,导致一些公网的机器无法访问。但很多小厂网管很糊涂,不知道该设多少,范围也不一定对,但你不按他们的来,自己去试,猜,又能得到哪个是对的?

    红帽系annaconda安装程序相比之下就很智能,不管你掩码给的对不对,只要ip和网关正确(商家模板系统里这两个值必须给对,否则联不了网,会被用户投诉),网络都能正常配置。

    所以为了通过Debian安装程序的网络检测,我决定引入以上谈到的算法,v4部分也是一样,如果发现目标机器采用的是公网ip和本地网关地址这种组合,就必须根据公网ip和对应的掩码来计算出对应的ip地址范围,尝试把该范围内的第一个ip当做网关(如果目标机器掩码为32,那么网关极大概率就是机器ip自身),如果你按萌咖等脚本那样公网ip和本地网关那样给,Debian极大概率安装时死亡红框(网关不可达),而且Debian还有一个坑,就是纯v6静态机器配置v6时,掩码必须转换成全写,给1-128这种的就报错。

    v6公网ip加fe80这种本地网关,掩码之所以给64而非1,是因为我观察了大量这类机型的默认网关都是64,且这样配置能通过Debian的网络检查,才得出的经验。

    比如有些大厂,digitalocean给的v4网关是20,但我脚本v4安装阶段支持的掩码档位只有1 8 16 24,所以这时候就应该在系统快安装完阶段,把掩码16给改回来,避免错误的掩码设置造成跟某些网段中主机通信丢失。

  • @Just纱世里 #206 这玩意要算的,很复杂,原则上来说正确的掩码就应该能从商家模板系统里被正确读出来,但事实远没你想象的那么好。比如我给你提供最典型的两个例子,首先是Akile家的纯ipv6机器:

    root@800-2023051710313146:~# cat /etc/network/interfaces.d/50-cloud-init
    # This file is generated from information provided by the datasource.  Changes
    # to it will not persist across an instance reboot.  To disable cloud-init's
    # network configuration capabilities, write a file
    # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
    # network: {config: disabled}
    auto lo
    iface lo inet loopback
        dns-nameservers 168.95.1.1 168.95.192.1 2001:B000:168::1 2001:B000:168::2
        dns-search 800-2023051710313146
    
    auto eth0
    iface eth0 inet6 static
        address 2001:A630:A42D:5D3B::FFFF:166/128
        gateway 2001:A630:A42D:5D3B::FFFF
    

    主ip和网关显然A B C D E F范围都是相同的,但掩码却给了范围最窄的128,此时很明显可以看出,内网通信范围仅包含主ip本身,网关并不能被包含在内,这种情况下Debian安装必出现死亡红框(网关不可达),所以我联系了他们技术,让他们改了一下,把掩码设置成64,问题才得到解决。

    按我脚本计算,这种案例下的掩码只要给96,就能顺利通过Debian安装程序的检测,即使他们技术不改,掩码还是128,我目前的版本也能在Debian主系统装完,后续安装late command部分用sed把那个临时的96掩码给改回128。

    IPv4的问题也是同理,这是tk-hosting家的一台机器的ipv4部分网络配置:

    root@vps2416605:~# cat /etc/network/interfaces
    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).
    source /etc/network/interfaces.d/*
    # The loopback network interface
    auto lo
    iface lo inet loopback
    # The primary network interface
    auto ens3
    iface ens3 inet static
    	address 89.163.208.5
    	netmask 255.255.255.0
    	broadcast +
    	up ip -f inet route add 169.254.0.1 dev ens3
    	up ip -f inet route add default via 169.254.0.1 dev ens3
    

    ipv4是公网,掩码似乎也很标准(255.255.255.0 转换成简写就是24),但网关是一个dhcp配置失败后系统给分配的默认ip,你直接拿这三样填到Debian安装程序里,也必然死亡红框。

    后来查到他们web面板后台的真实网关应该是89.163.208.1,所以我脚本加入了一个处理这种情况的方法,一旦主ip是公网,网关是内网ip,就会根据主ip 89.163.208.5和掩码255.255.255.0,计算出机器当内网通信的范围应该是89.163.208.1 - 89.163.208.254,然后把89.163.208.1尝试当做网关。

    同理,godaddy的一些机型的自带模板系统中的ipv4掩码甚至窄到到了32(255.255.255.255),即通信范围仅包含主ip本身,网关同样也是169.254.0.1,你直接拿这套配置写到Debian安装文件里,安装时必然弹红框,那台机器是别人的,还未成功通过测试就被回收了,我只能推测这种情况下,真实网关只能是机器本身。

    以上这些毛病在安装红帽系的时候完全不会有,但红帽系安装内存要求太高,几百m内存的机器只能装Debian,所以这个头疼的问题必须要解决。

  • @Just纱世里 #206 除非你坐飞机去他们实地机房,看看他们上游的网络拓扑是什么样的,不然真别迷信商家模板系统内的掩码是对的,你自己试或许能试出来绝对正确的,能完美区分出他们内网和外网的掩码,但问题是我们没这个条件,物力、时间成本太大,不按那个填,你又能信谁的?所以实际掩码和安装时的临时掩码这两个要分开,临时掩码用来通过Debian安装程序的网络检查,实际掩码用于填写到正式系统中。实际掩码它模板里是啥,就用啥吧,不然没别的办法。

  • @Just纱世里 #206 你在已经装好的系统上怎么改都行,但改完了掩码范围过大还是过窄的后果就像我上面所说的,你自己评估风险,如果只需要和公网通信,不需要跟内网通信,掩码范围设置的窄一些(1-128中数值更大)其实问题不大,重装层面我脚本自有另一套处理逻辑,但尤其是原版系统中,ipv4公网加本地网关这种组合,我的建议还是不要把网关设置的过窄,否则会影响到脚本获取到真实的网关地址,ipv6部分目前如果是公网ip和内网fe80这种组合,或者是公网ip和公网网关这种组合,脚本都能在安装阶段进行自动修复,先通过debian安装程序的网络检查,顺利装完再说,影响不大。

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72280位seeker

🎉欢迎新用户🎉