根据检测到的流量在启动时重命名网络接口

根据检测到的流量在启动时重命名网络接口

我有一台 Devuan 系统,其物理网络接口数量多得不方便。我偶尔需要断开电缆,而且要确保它们重新连接到同一接口是一件很麻烦的事。

我还使用富有表现力的接口名称;而不是根据接口的用途使用诸如或或 之ethX类的名称。这些名称在防火墙规则等中被引用。intramgmtsomeprovider

我编写了一个在启动时运行的脚本,它能找出哪个接口插入了哪个接口,然后相应地重命名它们。我对这个解决方案不满意,因为它涉及大量自定义脚本;如果可能的话,我希望使用更主流的方法。

该脚本目前通过以下方式识别网络:

  • 它可以临时为接口配置一个地址,看看它是否可以 ping 或 arping 特定目的地(这适用于上行链路 - 我 ping 上游路由器)。
  • 它可以使用接口监听,tcpdump以查看是否有来自多个特定 MAC 地址的流量,其中至少一个可能会在几秒钟内发送一些流量。我知道这不是万无一失的,但对我来说已经足够好了。(我使用类似的东西timeout ... tcpdump -c 1 -i interfacename "(ether host foo) or (ether host bar) or ..."。)这对于内部网络非常有效,在内部网络中,我没有任何特定要 ping 的内容,但我可以预期几乎恒定的流量。
  • 它可以在接口上配置一个临时 IP,并nmap -sn -oG针对 IP 范围运行,以查看有多少主机存在且可从该范围访问。对于一些包含许多主机但我不知道具体是哪些主机的内部网络,这是一种有用的启发式方法。

我正在寻找一种最好将其与 集成的方法ifupdown。我查看了映射,但在我看来,使用映射脚本,我只能选择要应用于物理接口的逻辑配置,而不能重命名接口。interfaces(5)Lines beginning with "rename" are used to rename interfaces. It takes one or more arguments in the form of "CUR=NEW", where CUR is the name of an existing interface, and NEW is the new name. This becomes very powerful when combined with pattern matching for the CUR interface.;但是,模式匹配也帮不上忙。

如果可以以rename某种方式在语句中使用映射的结果,那么这可能会起作用。

我也看过这个whereami包裹,但它看上去不太有希望。

最想要的是ifupdown一种根据脚本if-pre-up或映射脚本输出的内容重命名网络接口的方法。

答案1

经过思考,我得出结论,我可以使用pre-up脚本来做到这一点,如下所示:

iface intra inet static
    pre-up find-interface intra
    address ...

然后,脚本find-interface会发挥其神奇的作用,发现应该是哪个ethX(或enX任何)接口intra,重命名它,然后ifupdown从那里获取它。

find-interfacehttps://gist.github.com/akorn/7b96e78c7d1b3ca70e35261f9b1a2f2b以防其他人发现它有用。

相关内容