TenForward

技術ブログ。はてなダイアリーから移転しました

OpenVZ で仮想イーサネットデバイス(1)

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 環境です.

  1. HN のインターフェースの proxy arp を有効化します.eth0 の場合.
    # sysctl -w net.ipv4.conf.eth0.proxy_arp=1
    # sysctl -w net.ipv4.conf.eth0.forwarding=1
  2. CT の仮想インターフェースの設定を行います.
    # vzctl set 50 --netif_add eth0 --save
  3. 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)
  4. 仮想インターフェースに対しても proxy arp の設定.
    # sysctl -w net.ipv4.conf.veth50/0.proxy_arp=1
    # sysctl -w net.ipv4.conf.veth50/0.forwarding=1
  5. CT へのルーティングの設定.
    # ip route add 192.168.0.100 dev veth50.0
  6. 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