pusuke0418’s diary

異常にマルチタスクな社内SEのブログ

Linux Network Namespaceで使う/etc以下のファイル

Linux Network Namespaceは、基本的に「ネットワーク」の名前空間。仮想的な。最初は簡単に何でもかんでも独立させられるのかと思って勘違いしていたけど。

ip netns execコマンドでネームスペース上で何かコマンドを実行できる。manコマンドでip netnsを見てみると、"applications that are aware of network namespaces, the convention is to look for global network configuration files first in /etc/netns/NAME/ then in /etc/."とまず記載がある。

ネットワークに関わるものは、どのコマンド or applicationまでなのかは正確にわからなくて調べているけれども、/etc/netns/[name]/以下に設定ファイルを置けば優先して読み込むようだ。ちょっと少しhostsファイルをいじってためしてみる。環境はUbuntu14.04にて、カーネルは3.13.0-45。

まず、ネームスペースの準備。alphaとbetaというものを作る。

$ sudo ip netns add alpha
$ sudo ip netns add beta

作っただけではネットワークインタフェースはダウンしているので、上げておく。因みに作った段階ではループバックしか存在しませんものね。今回は気にしない。

$ sudo ip netns exec alpha ip link set lo up
$ sudo ip netns exec beta ip link set lo up

そして、それぞれのネームスペースが使うetc以下を作成。その下に/etc/hostsをコピーしておく。

$ sudo mkdir -p /etc/netns/alpha
$ sudo mkdir /etc/netns/beta
$ sudo cp /etc/hosts /etc/netns/alpha/
$ sudo cp /etc/hosts /etc/netns/beta/

下記のような形でそれぞれのhostsファイルを編集。それぞれのネームスペースでは自分の名前のみループバックに投げるようにすることが目的。

[/etc/netns/alpha/hosts]
127.0.0.1       localhost
127.0.1.1       alpha

[/etc/netns/beta/hosts]
127.0.0.1       localhost
127.0.1.1       beta

この状態で各々ping打ってみる。ネームスペースalphaではalphaは解決できるが、betaは解決できないことが、ネームスペースbetaではbetaは解決できるが~、と各々のhostsを読んでいることがわかる。

[alpha]
$ sudo ip netns exec alpha ping alpha
PING alpha (127.0.1.1) 56(84) bytes of data.
64 bytes from alpha (127.0.1.1): icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from alpha (127.0.1.1): icmp_seq=2 ttl=64 time=0.037 ms
64 bytes from alpha (127.0.1.1): icmp_seq=3 ttl=64 time=0.035 ms
64 bytes from alpha (127.0.1.1): icmp_seq=4 ttl=64 time=0.039 ms
^C
 --- alpha ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 0.035/0.038/0.041/0.002 ms
$
$ sudo ip netns exec alpha ping beta
ping: unknown host beta

[beta]
$ sudo ip netns exec beta ping beta
PING beta (127.0.1.1) 56(84) bytes of data.
64 bytes from beta (127.0.1.1): icmp_seq=1 ttl=64 time=0.060 ms
64 bytes from beta (127.0.1.1): icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from beta (127.0.1.1): icmp_seq=3 ttl=64 time=0.037 ms
64 bytes from beta (127.0.1.1): icmp_seq=4 ttl=64 time=0.040 ms
^C
 --- beta ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 0.036/0.043/0.060/0.010 ms
$ 
$ sudo ip netns exec beta ping alpha
ping: unknown host alpha