V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Comphuse
V2EX  ›  Linux

踩坑: systemd 的网卡命名规则

  •  
  •   Comphuse · 2018-03-26 20:46:28 +08:00 · 4534 次点击
    这是一个创建于 2461 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://chaoticvoid.net/posts/systemd-network-interface-naming/

    踩到这个坑的起源是在 Vultr 上开了一个 Debian 9 的机器,运行过初始化脚本,结果发现脚本中的 iptables 规则没有生效。检查了规则,一切正常; ifconfig 后发现问题所在:

    ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
     inet x.x.x.x netmask 255.255.254.0 broadcast x.x.x.x
     inet6 x::x:x:x:x prefixlen 64 scopeid 0x20<link>
     ether 56:00:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
     RX packets 172 bytes 19821 (19.3 KiB)
     RX errors 0 dropped 0 overruns 0 frame 0
     TX packets 175 bytes 18906 (18.4 KiB)
     TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
     inet 127.0.0.1 netmask 255.0.0.0
     inet6 ::1 prefixlen 128 scopeid 0x10<host>
     loop txqueuelen 1 (Local Loopback)
     RX packets 0 bytes 0 (0.0 B)
     RX errors 0 dropped 0 overruns 0 frame 0
     TX packets 0 bytes 0 (0.0 B)
     TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    

    网卡名称竟然不是 eth0。好吧,“竟然”这个词用的不准确。这两年用 Linux 作为自己唯一桌面系统,早就发现网卡名称变了。之前折腾用的虚拟机用的都是 CentOS 7,自己 kickstart 出来的虚拟机模板和 DigitalOcean 上的机器网卡名都是 eth0,就默认 Debian 9 也是了。

    搜索一番找到了源头,systemd 在 v197 之后采用了区别与 ethX 的新命名策略[1]。传统命名策略的缺陷在于在多网卡情况下会出现重启后网卡命名混乱,比如之前的 eth0 和 eth1 换了名字。<del>贫穷限制了我的想象力</del>。细读下来还发现 Debian 和 CentOS/Fedora 用的竟然还是不同的新的命名策略,有心的可以自己试试。这套新的命名策略在 VPS 上显然没有意义。

    解决方案:

    1. /etc/default/grub 里的启动参数加上 net.ifnames=0,然后 update-grub
    2. 把配置文件里用到的网卡名称都改掉,grep -R stupid_if_names /etc
    3. 开 ticket 建议 Vultr 改虚拟机模板
    4. 这里赞一下 Vultr,十分钟内回复了 ticket,说已经反馈给开发团队。

    [1] https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

    10 条回复    2018-03-27 14:02:19 +08:00
    kiwi95
        1
    kiwi95  
       2018-03-26 20:55:36 +08:00 via iPhone
    新的命名策略明显更清晰明了,当然要是就一个 interface 是没有必要,但也算不上坑吧
    dbw9580
        2
    dbw9580  
       2018-03-26 21:03:11 +08:00 via Android
    udev .link 了解一下
    wwqgtxx
        3
    wwqgtxx  
       2018-03-27 00:06:03 +08:00   ❤️ 1
    对于某些有双网卡的 VPS 还是很有意义的,比如国内某云
    miyuki
        4
    miyuki  
       2018-03-27 00:14:28 +08:00 via Android
    有的记得要去 /etc/network/interfaces 里改下名字
    mephisto
        5
    mephisto  
       2018-03-27 01:04:31 +08:00
    兄 dei,链接里的 release-note 了解一下,里面有解释,叫我雷锋。好像是从某个版本的内核开始,网卡的命名机制就变了。https://www.debian.org/releases/stretch/amd64/release-notes/ch-whats-new.en.html#new-interface-names
    Showfom
        6
    Showfom  
       2018-03-27 01:15:41 +08:00
    很久很久以前就这样了啦
    OscarUsingChen
        7
    OscarUsingChen  
       2018-03-27 01:16:34 +08:00 via iPhone
    msg7086
        8
    msg7086  
       2018-03-27 12:29:51 +08:00   ❤️ 1
    这玩意儿对于虚拟机来说比较麻烦,可预测接口名称会变得完全不可预测。
    比如说你 ESXi 下的小鸡,开三个网卡,很可能一个叫 ens160,一个叫 ens192,一个叫 ens256,因为命名是按照虚拟机上插槽的编号来计算的。你多插一块或者少插一块 SAS 控制器,网卡的插槽就变了……
    zhjits
        9
    zhjits  
       2018-03-27 12:43:48 +08:00 via iPhone
    @msg7086 实体机也比较麻烦,换了个 CPU,网卡名字就变了
    tomychen
        10
    tomychen  
       2018-03-27 14:02:19 +08:00
    唉...我是不支持 systemd 的那波人中的一个.

    搞得我现在感觉我原来学的 linux 和我现在认识的 linux 不是一个东西。

    我现在一直在坚持不用 systemd 的系统,除非没办法在要特定的版本环境上测试演示。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2812 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:54 · PVG 14:54 · LAX 22:54 · JFK 01:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.