Namespace(netns)を使ってネットワークを構築する必要がでてきた。調べているとnetnsを使ってネットワークを構築するにはシェルスクリプトを使うしかなくてだる~っとなっていた。それは可搬性が低いので、他のツールはないか調査してみた。結果として、私の要件に合うものがなかったのでnetnsplanというツールを自作した。github.comnetnsplanはnetnsを使ったネットワークを簡単に構築するためのツールである。名前からもわかるとおりnetplanに似せてつくっている。これは単に私がnetplanに慣れているからという理由である。複数ファイルがある場合は1つのYAMLにマージして、結果を適用する。/etc/netnsplan/example.yamlを用意してこれを適用してみる。/etc/iptables/rules.v4この例ではexampleという名前でnetnsを作成し、そこにeth1を紐づけする。eth1には192.168.20.1/24というIPを設定し、デフォルトゲートウェイとして192.168.20.254を設定する。post-scriptとしてsysctlとiptables-restoreを実行している。post-scriptはnetnsplan特有の機能で、netnsの設定が終わったあとに任意のスクリプトを実行する。実行されるスクリプトはnetns上で実行されるので、サンプルのようにsysctlやiptablesを設定したりするのに使える。applyを実行する。-nvL\n"applyが成功すると記述したとおりの設定が行われているはず。foreverapplyは複数回実行でき、すでに設定されている項目はスキップされる。post-scriptは実行されない。post-scriptも実行したい場合は--always-run-post-script(-R)をつける必要がある。-nvL\n"destroyを実行するとnetnsの設定を破棄し元に戻る。netns$対応しているデバイスタイプ使用例ではethernetsのみを紹介したが、netnsplanでは現在以下のタイプに対応している。dummyデバイス(dummy-devices)vethデバイス(veth-devices)他のデバイスタイプにも対応したいので乞うご期待...インストール方法netnsplanは今のところamd64/arm64なLinux向けのバイナリを提供している。netnsはLinuxでしか使えないので、他OSでのサポートはしていない。debやrpmも用意しているのでDebian系やRedHat系のディストリであれば簡単にインストールできるはず。execしたときに/etc配下のファイルを読み替えてくれる。/etc/hostsしたときにそのファイルに置き換えられる。execしたときのみに有効になるので、例えばsystemdから起動した場合は読み替えがおこなれないので注意が必要だ(一敗)。systemd経由で起動するnetns上で特定のサービスを起動したいとなったときに、そのサービスが起動する前にnetnsplanを実行しないとならない。その場合、netnsplanもsystemdから起動し、対象のサービスをnetns上で実行するように変更する必要がある。その方法について解説する。netnsplanをsystemdのサービス化する。/etc/systemd/system/netnsplan.serviceとして保存する。multi-user.target保存したらnetnsplanを起動する。ここでは対象のサービス名をexample.servicceとする。Afterにnetnsplan.servieを設定することで、netnsplan起動後にexample.serviceを起動するように指定している。NetworkNamespacePathで使用するnetnsを指定することができる。設定を変更したら、example.serviceを再起動するとnetns配下で起動するようになるはず。netns配下の物理デバイス(ethernets)がdestroy後に消失するapply/destroyを繰り返していると、稀に物理デバイス(ethernets)で設定したデバイスが消失することがある...。これについてip-netnsのmanには以下の記載がある。物理デバイスを失う可能性があります。SOME_PROCESS_IN_BACKGROUNDが終了またはキルされた後にのみ、eth0はデフォルトのnetnsに表示されます。destroyではこの問題を回避するためにnetns上で動いているプロセスが存在した場合エラーになるようになっている。消失が発生したらOSを再起動するしかない、つらい。4参加グループガジェットプログラミング個人の日記ネットワーク(Network)はてなブログをはじめよう!buty4649さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。