web-dev-qa-db-ja.com

表示されるトラフィックに基づいて、起動時にネットワークインターフェイスの名前を変更します

不便なほど多数の物理ネットワークインターフェイスを備えたDevuanシステムがあります。私は時々ケーブルを外さなければならず、それらが同じインターフェースに再接続されることを確認するのは苦痛です。

表現力豊かなインターフェース名も使用しています。 ethXの代わりに、インターフェースの目的に基づいて、intraまたはmgmtまたはsomeproviderのような名前を付けています。これらの名前は、ファイアウォールルールなどで参照されます。

起動時に実行され、どのインターフェイスが何に接続されているかを把握し、それに応じて名前を変更するスクリプトを作成しました。このソリューションには多くのカスタムスクリプトが含まれているため、私はこのソリューションに満足していません。できればもっと主流のものが欲しいのですが。

スクリプトは現在、次の方法でネットワークを識別します。

  • アドレスを使用してインターフェイスを一時的に構成し、特定の宛先にpingまたはarpingできるかどうかを確認できます(これはアップリンクで機能します-アップストリームルーターにpingを実行します)。
  • tcpdumpを使用してインターフェイスでリッスンし、特定のMACアドレスのいずれかからのトラフィックがあるかどうかを確認できます。そのうちの少なくとも1つは、数秒以内に何かを送信する可能性があります。これが絶対確実ではないことは知っていますが、私にとっては十分です。 (私はtimeout ... tcpdump -c 1 -i interfacename "(ether Host foo) or (ether Host bar) or ..."のようなものを使用します。)これは、pingに固有のものはないが、ほぼ一定のトラフィックが期待できる内部ネットワークでうまく機能します。
  • インターフェイスに一時IPを構成し、IP範囲に対して_nmap -sn -oG_を実行して、その範囲から存在し到達可能なホストの数を確認できます。これは、多くのホストを含​​むが、どのホストかわからない一部の内部ネットワークにとって便利なヒューリスティックです。

できればこれを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パッケージも調べましたが、有望ではありませんでした。

私が最も望んでいるのは、_if-pre-up_スクリプトまたはマッピングスクリプトの出力に基づいて、ifupdownにネットワークインターフェイスの名前を変更させる方法です。

1
András Korn

それについて考えると、次のような_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 で公開しました。これは、他の誰かが役立つと思った場合に備えてです。

0
András Korn