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