システムのすべての物理インターフェイスが「物理」という特定のネットワーク名前空間内にあることを望みます。ip link set enp2s0 netns physical
また、同じコマンドを使用してデバイスを手動で移動するのは非常に簡単ですが、iw phy phy0 set netns name physical
起動時に実行時に接続されているすべてのデバイスに対してこのタスクが自動的に実行されることを願っています。
これを達成するための最良の方法は、udevルールまたはいくつかのシステム魔法を使用するようです。
私の最初の考えは、適切なコマンドを実行するudevルールを作成することでしたが、検索では答えられないいくつかの質問に遭遇しました。
- 物理インターフェイスと仮想インターフェイスをどのように区別しますか?
iw
コマンドの代わりにコマンドを実行できるようにWLANインターフェイスをどのように区別できますかip
?- コマンドに渡すためにWLAN phyの名前をどのように取得しますか
iw
?
上記は比較的単純であることを願っていますが、明確な差別化要因は見えませんudevadm info
。
ベストアンサー1
ABの答えに基づいて、次の規則を思い出しました。
SUBSYSTEM=="net", ACTION=="add", DEVPATH!="/devices/virtual/*", TAG+="systemd", ENV{SYSTEMD_WANTS}="[email protected]"
DEVPATH!="/devices/virtual/*
物理デバイスだけをキャッチすることが重要です。インターフェイスを必須の名前空間()[email protected]
に移動するワンタイムサービス。physical
[Unit]
Description=Move interface to physical namespace
[email protected]
[email protected]
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/move-netif %I physical
([email protected]
与えられた名前でネットワーク名前空間を作成するだけです。)
最後に、move-netif
インターフェイスの移動方法を理解するのはユーザーの役割です。
#!/bin/bash
devpath="$1"
target_ns="$2"
if [[ -e "$devpath/phy80211" ]]; then
phy="$(basename "$(readlink "$devpath/phy80211")")"
iw phy "$phy" set netns name "$target_ns"
else
ifname="$(basename "$devpath")"
ip link set "$ifname" netns "$target_ns"
fi