- 1 ip netnsコマンドとは?
- 2 検証環境
- 3 オプション一覧
- 4 ネームスペースを表示する方法(list)
- 5 ネームスペースを追加する方法(add)
- 6 ネームスペースを削除する方法
- 7 ネームスペースの追加/削除をモニタする方法(monitor)
- 8 指定したネームスペースでコマンドを実行する方法(exec)
- 9 プロセスが動作しているネームスペースを調べる方法(identify)
- 10 ネームスペースで動作しているプロセスのPIDを調べる方法(pids)
- 11 ネームスペースを使ったネットワーク環境構築
- Z 参考情報
1 ip netnsコマンドとは?
ネットワークネームスペース(以降、ネームスペースと略)を操作するコマンドです。netnsはipコマンドのOBJECTの1つです。1つの仮想マシンの中で、ホストーブリッジーホストといった環境を構築することができます。
IP(8) Linux IP(8) NAME ip - show / manipulate routing, devices, policy routing and tunnels SYNOPSIS ip [ OPTIONS ] OBJECT { COMMAND | help } ip [ -force ] -batch filename OBJECT := { link | address | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm | netns | l2tp | tcp_metrics | token | macsec } -snip-
2 検証環境
CentOS版数は以下のとおりです。
[root@server ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
カーネル版数は以下のとおりです。
[root@server ~]# uname -r 3.10.0-1160.el7.x86_64
3 オプション一覧
[root@server ~]# ip netns help Usage: ip netns list ip netns add NAME ip netns set NAME NETNSID ip [-all] netns delete [NAME] ip netns identify [PID] ip netns pids NAME ip [-all] netns exec [NAME] cmd ... ip netns monitor ip netns list-id
4 ネームスペースを表示する方法(list)
listはネームスペースを表示するオプションです。まだネームスペースが登録されていないので、何も表示されていません。
[root@server ~]# ip netns list [root@server ~]#
5 ネームスペースを追加する方法(add)
addはネームスペースを追加するオプションです。
host1という名前のネームスペースを追加してみます。
[root@server ~]# ip netns add host1
ネームスペースを確認します。host1が追加されたことがわかります。
[root@server ~]# ip netns list host1
次に、host2という名前のネームスペースを追加します。
[root@server ~]# ip netns add host2
ネームスペースを確認します。host2が追加されたことがわかります。
[root@server ~]# ip netns list host2 host1
6 ネームスペースを削除する方法
6.1 個別に削除する方法(delete)
ネームスペースを確認します。host1,host2が存在することがわかります。
[root@server ~]# ip netns list host2 host1
host1を削除します。
[root@server ~]# ip netns delete host1
ネームスペースを確認します。host1が削除されたことがわかります。
[root@server ~]# ip netns list host2
次に、host2も削除します。
[root@server ~]# ip netns delete host2
ネームスペースを確認します。host2も削除されたことがわかります。
[root@server ~]# ip netns list [root@server ~]#
6.2 一括削除する方法(-all)
ネームスペースを確認します。host1,host2が存在することがわかります。
[root@server ~]# ip netns list host2 host1
存在するネームスペースを一括で削除します。
[root@server ~]# ip -all netns del
ネームスペースを確認します。host1,host2が削除されたことがわかります。
[root@server ~]# ip netns list [root@server ~]#
7 ネームスペースの追加/削除をモニタする方法(monitor)
monitorオプションを使うと、ネームスペースに対する操作をモニタすることができます。ターミナル1で操作をモニタします。ターミナル2でネームスペースに対して操作をします
ターミナル1でmonitorオプションを実行します。
[root@server ~]# ip netns monitor
ターミナル2でネームスペース(host1)を追加します。
[root@server ~]# ip netns add host1
ターミナル1のモニターに"add host1"が表示され、ネームスペースが追加されたことがわかります。
[root@server ~]# ip netns monitor add host1
ターミナル2でネームスペース(host1)を削除します。
[root@server ~]# ip netns delete host1
ターミナル1のモニターに"delete host1"が表示され、ネームスペースが削除されたことがわかります。
[root@server ~]# ip netns monitor add host1 delete host1
8 指定したネームスペースでコマンドを実行する方法(exec)
host1という名前のネームスペースを追加します。
[root@server ~]# ip netns add host1
ネームスペースを確認します。host1が追加されたことがわかります。
[root@server ~]# ip netns list host1
ネームスペース(host1)に入ります。
[root@server ~]# ip netns exec host1 bash
ネームスペース(host1)でipコマンドを実行します。
[root@server ~]# ip l 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
ネームスペース(host1)から抜けます。
[root@server ~]# exit exit
9 プロセスが動作しているネームスペースを調べる方法(identify)
プロセスのPIDから、プロセスが動作しているネームスペースを確認してみます。
ターミナル1でネームスペースを確認します。host1が存在することがわかります。
[root@server ~]# ip netns list host1
host1に入ります。
[root@server ~]# ip netns exec host1 bash
bashプロセスのPIDを確認します。bashプロセスのPIDは8787であることがわかります。
[root@server ~]# echo $$ 8787
ターミナル2でbashプロセスが動作しているネームスペースを確認します。bashプロセスは、host1で動作していることがわかります。
[root@server ~]# ip netns identify 8787 host1
host1から抜けます。
[root@server ~]# exit exit
10 ネームスペースで動作しているプロセスのPIDを調べる方法(pids)
ターミナル1でネームスペース(host1)に入ります。
[root@server ~]# ip netns exec host1 bash
host1でbashのPIDを確認します。PIDは8356であることがわかります。
[root@server ~]# echo $$ 8356
ターミナル2で次のことを確認します。host1で動作しているプロセスのPIDを確認します。host1で動作しているbashプロセスのPID(8536)を確認することができます。
[root@server ~]# ip netns pids host1 8356
host1でsleepコマンドを実行します。sleepプロセスのPIDは8420であることがわかります。
[root@server ~]# sleep 600& [1] 8420
ターミナル2でhost1で動作しているプロセスのPIDを確認します。host1で動作しているsleepプロセスのPID(8420)を確認することができます。
[root@server ~]# ip netns pids host1 8356 8420
11 ネームスペースを使ったネットワーク環境構築
11.1 host-router-host環境構築
ip netnsコマンドの使い方(host-router-host環境構築編) - hana_shinのLinux技術ブログ
11.2 host-bridge-host環境構築
ip netnsコマンドの使い方(host-bridge-host環境構築編) - hana_shinのLinux技術ブログ
11.3 NAT環境構築
未稿
11.4 OVS環境構築
未稿
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ