OpenVZ でコンテナ (CT) を作るとき,何も考えずに
# vzctl set 100 --ipadd 192.168.0.100 --save
などとやると,venet という仮想ネットワークデバイスが作成されます.CT 内だと venet0 とか venet0:0 とか言うインターフェースが上がっていて,それに vzctl で設定したアドレスが割当たります.これはホスト OS (HN) と CT 間を Layer 3 で直接接続しているようなイメージになっているようです (ホスト OS にも venet0 というデバイスがある).これがデフォルトであり,普通はコレを使います.
ですが,CT を HN と同じネットワークに所属させて,例えば DHCP でアドレスを割り振りたいというような事もあります.このような場合に CT に仮想イーサネットデバイスを作成することも可能です.
今まで使ったことがなかったのですが,ちょっとしたきっかけでやってみようかなという気になったので,試してみました.CentOS 5 ベースの OpenVZ 環境です.
- HN のインターフェースの proxy arp を有効化します.eth0 の場合.
# sysctl -w net.ipv4.conf.eth0.proxy_arp=1
# sysctl -w net.ipv4.conf.eth0.forwarding=1 - CT の仮想インターフェースの設定を行います.
# vzctl set 50 --netif_add eth0 --save
- CT をスタートさせます.すると HN 上にも仮想インターフェースが現れます.
# vzctl start 50
# ifconfig
: (snip)
veth50.0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet6 addr: fe80::xxx:xxx:xxx:xxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:3 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) - 仮想インターフェースに対しても proxy arp の設定.
# sysctl -w net.ipv4.conf.veth50/0.proxy_arp=1
# sysctl -w net.ipv4.conf.veth50/0.forwarding=1 - CT へのルーティングの設定.
# ip route add 192.168.0.100 dev veth50.0
- CT のネットワークの設定は,普通に物理マシンに対して行うのと同様に設定します.
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.100
BROADCAST=192.168.0.255
NETMASK=255.255.255.0
TYPE=Ethernet