OpenVZのネットワーク(1)

前回はVEを作成しました。

ハードウェアノードからVE101の中に入ってみます。

$ vzctl enter 101
entered into VE 101


$ pwd
/


$ ls
bin dev home lib media opt root selinux sys usr
boot etc initrd lib64 mnt proc sbin srv tmp var

カレントディレクトリは、ハードウェアノードからは/vz/root/101になります。/vz/root/101にchrootしているイメージです。

$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 19:05 ? 00:00:00 init [3]
root 16011 1 0 19:05 ? 00:00:00 syslogd -m 0
root 16033 1 0 19:05 ? 00:00:00 /usr/sbin/sshd
root 20636 1 0 19:22 ? 00:00:00 vzctl: pts/0
root 21661 20636 0 19:22 pts/0 00:00:00 -bash
root 21680 21661 0 19:22 pts/0 00:00:00 ps -ef

表示できるプロセスが少なくなっていると思います。
VE101内で動作しているプロセスだけが表示されているからです。


ネットワークを見てみます。

$ ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3293 errors:0 dropped:0 overruns:0 frame:0
TX packets:3293 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:12999680 (12.3 MiB) TX bytes:12999680 (12.3 MiB)


venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

IPアドレスは振られていないようです。venet0という見慣れないネットワークインターフェースが表示されますが、これはOpenVZ特有のものです。


このままですとネットワークが使えないので、IPアドレスの設定をしてみます。一度ログアウトして、ハードウェアノードから設定します。

$ exit
logout
exited from VE 101


$ vzlist
VEID NPROC STATUS IP_ADDR HOSTNAME
101 3 running -


$ vzctl set 101 --ipadd 192.168.0.3
Adding IP address(es): 192.168.0.3
WARNING: Settings were not saved and will be resetted to original values on next start (use --save flag)

メッセージを見ると設定されたようです。ただし、セーブはされてないので次回の起動時にはリセットされるという警告が出ています。
セーブするには、

$ vzctl set 101 --ipadd 192.168.0.3 --save


というように「--save」をつけると、/etc/sysconfig/vz-scripts/101.confに設定が反映され、次回起動にもこのIPアドレスが使用できるようになります。

ハードウェアノードからインターフェースを調べてみます。

$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:14:C2:59:F6:C1
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2921836 errors:0 dropped:0 overruns:0 frame:0
TX packets:202341 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:495094450 (472.1 MiB) TX bytes:41491281 (39.5 MiB)
Interrupt:25


lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3296 errors:0 dropped:0 overruns:0 frame:0
TX packets:3296 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:13000016 (12.3 MiB) TX bytes:13000016 (12.3 MiB)


venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:90009 errors:0 dropped:0 overruns:0 frame:0
TX packets:91024 errors:0 dropped:6 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:31045857 (29.6 MiB) TX bytes:65440357 (62.4 MiB)


$ ip addr
2: lo: mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
4: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:14:c2:59:f6:c1 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
1: venet0: mtu 1500 qdisc noqueue
link/void

192.168.0.3が設定されているインターフェースはありません。


VE101内ではどのようになっているでしょうか。

$ vzctl enter 101
entered into VE 101

$ ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3303 errors:0 dropped:0 overruns:0 frame:0
TX packets:3303 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:13000800 (12.3 MiB) TX bytes:13000800 (12.3 MiB)


venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)


venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.0.2 P-t-P:192.168.0.2 Bcast:192.168.0.2 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1


$ ip route
191.255.255.0/24 dev venet0 scope host
169.254.0.0/16 dev venet0 scope link
default via 191.255.255.1 dev venet0

設定したIPアドレスはvenet0のエイリアスvenet0:0として設定されています。しかも、ルーティングテーブルを見ると191.255.255.1という正体不明のアドレスがデフォルトゲートウェイに設定されています。
このアドレスについては何を意味しているのかよくわかりませんが、venet0インターフェースを使ったときのOpenVZの仕様のようです。
ただし、デフォルトゲートウェイを191.255.255.1以外のものに変更することは可能です。


ネットワークの疎通を確認してみます。

$ ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=0 ttl=254 time=0.552 ms


$ traceroute 192.168.0.1
traceroute to 192.168.0.1 (192.168.0.1), 30 hops max, 46 byte packets
1 192.168.0.2 (192.168.0.2) 0.063 ms 0.029 ms 0.019 ms
2 192.168.0.1 (192.168.0.1) 0.063 ms 0.028 ms 0.020 ms

192.168.0.2はハードウェアノードのeth0に設定したアドレスなので、
eth0を経由して外部と通信できているようです。


VE101のネットワークの設定ファイルは次のようになっています。


/etc/sysconfig/network-scripts/ifcfg-lo
>>
DEVICE=lo
IPADDR=127.0.0.1
NETMASK=255.0.0.0
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback