一時的なLinuxホストを2つ作成し、仮想ケーブルで接続し、そのトラフィックをテストした後、サーバーのネットワークカードを変更することなく削除します。
ルート、アドレス、またはサービスのテストを実施する必要がありますが、SSHセッションを持つネットワークカードは即興で操作する場所ではありません。ip netnsを使用すると、Linuxは同じマシン上に独立したネットワーク空間を作成することができます。各空間には、独自のインターフェース、アドレス、ルーティングテーブルがあります。
次の方法では、コンソールを持つラボVMを使用します。2つの空間をvethペアで接続し、その間でpingを確認し、マウントを削除します。物理インターフェースを移動せず、運用中のネットワークルールには影響を与えません。

ラボを作成する前にホストを確認
まず、マシンで使用するインターフェースとルートを確認します。特に、SSHアクセスを持つインターフェースに注目してください。ガイドip addr sous Linuxは、ネットワークを変更する前にこれらの情報を再確認するのに役立ちます。
ip -brief link
ip -brief addr
ip route
ip route get 1.1.1.1
ネットワーク内で使用されていない2つのドキュメントアドレスを選択します。ここでは、192.0.2.1/24と192.0.2.2/24は仮想ペアに confined しています。また、既存の空間も確認してください:
sudo ip netns list
このコマンドで表示された名前は再利用しないでください。コンソールのないリモートマシンでは、テストをVMに保ちながら行います。コマンドは逆行可能ですが、ターゲットの誤りや一般的すぎる名前のスクリプトを実行することは避けられます。
vethで接続された2つの仮想ホストを作成
インターフェースvethはペアで機能します。片方から送信されたパケットは、ケーブルの短いイーサネットのようにもう一方に到達します。両端は異なる空間に接続されます。
sudo ip netns add lab-a
sudo ip netns add lab-b
sudo ip link add veth-a type veth peer name veth-b
sudo ip link set veth-a netns lab-a
sudo ip link set veth-b netns lab-b
ネームスペースは、ループバックインターフェースが無効の状態で開始します。それを有効にし、2つのテストアドレスを割り当て、仮想インターフェースをマウントします:
sudo ip -n lab-a link set lo up
sudo ip -n lab-b link set lo up
sudo ip -n lab-a addr add 192.0.2.1/24 dev veth-a
sudo ip -n lab-b addr add 192.0.2.2/24 dev veth-b
sudo ip -n lab-a link set veth-a up
sudo ip -n lab-b link set veth-b up
各コマンドip -n <name>は指定された空間で実行されます。同じ結果はip netns exec lab-a ...で得ることができ、これによりDNSクライアント、curl、またはテストサーバーを通常のシェルを出ずに起動する便利な方法です。
インターフェースを読み取り、隔離されたトラフィックを確認
pingを実行する前に、各側から実際の状態を再確認します。この出力には、予想されるアドレスを持つ1つのvethインターフェースとloが表示されるべきです。
sudo ip -n lab-a addr show
sudo ip -n lab-b addr show
sudo ip -n lab-a route
sudo ip -n lab-b route
sudo ip netns exec lab-a ping -c 3 192.0.2.2
応答するpingは、ペアがアクティブであり、両方の空間がテストサブネットに接続できることを証明します。ファイアウォール、DNS、または本番アプリケーションが機能していることは証明されません。実際のホストの経路を確認するには、対象マシンでip routeを使用してください。
これで、ルートを追加したり、nftablesルールをテストしたり、lab-b内で小さなサービスを開始したりできます。領域を狭めておくことが重要です。ネームスペースはネットワークの実験を隔離するには非常に優れていますが、クラスター全体を再現するためのものではありません。
ラボを削除し、正しい隔離を選択
空間を削除すると、そのインターフェースとネットワーク構成も削除されます。まず名前を確認してから、2つのラボを削除します:
sudo ip netns list
sudo ip netns del lab-a
sudo ip netns del lab-b
sudo ip netns list
最後のコマンドでlab-aとlab-bの名前が表示されないはずです。テストがスイッチ、実際のVLAN、別のハードウェアに接続する必要がある場合は、予想されるネットワークに接続されたVMやコンテナ、またはテスト環境を選択します。Ubuntuでの持続的アドレス変更については、netplan tryでの確認がより適切です。
ip netnsは、サーバーのネットワークに触れる前にローカル経路を検証するための私の第一選択です。その制限は明確です:ネットワークスタックを隔離しますが、カーネル、ディスク、またはホストの共有サービスは隔離しません。
ip-netns(8)の完全な構文では、利用可能なサブコマンドとip netns execの動作が詳述されています。