我有一台 Devuan 系统,其物理网络接口数量多得不方便。我偶尔需要断开电缆,而且要确保它们重新连接到同一接口是一件很麻烦的事。
我还使用富有表现力的接口名称;而不是根据接口的用途使用诸如或或 之ethX
类的名称。这些名称在防火墙规则等中被引用。intra
mgmt
someprovider
我编写了一个在启动时运行的脚本,它能找出哪个接口插入了哪个接口,然后相应地重命名它们。我对这个解决方案不满意,因为它涉及大量自定义脚本;如果可能的话,我希望使用更主流的方法。
该脚本目前通过以下方式识别网络:
- 它可以临时为接口配置一个地址,看看它是否可以 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-interface
在https://gist.github.com/akorn/7b96e78c7d1b3ca70e35261f9b1a2f2b以防其他人发现它有用。