OpenVZのネットワーク(3) veth + vlan + bridge

異なるネットワークのVEをひとつのHNで共存させる際には、VZのデフォルトのネットワークインターフェースであるvenetではなくvethを使用します。実際には、既存のリアルサーバを仮想環境に集約するという場面があると思います。

以下のような条件の場合を取り上げて、実際に設定してみます。
もちろん、対抗側にはVLANスイッチがあると仮定します。


HNのインターフェース   eth0

VE100のVEID 100
VE100のVLANのタグID 100
VE100のIPアドレス 192.168.100.2/24
VE100のVE内インターフェース eth0
VE100のveth veth100

VE200のVEID 200
VE200のVLANのタグID 200
VE200のIPアドレス 192.168.200.2/24
VE200のVE内インターフェース eth0
VE200のveth veth200

まず、VLANインターフェースのコンフィグファイルを作成します。
VLANのカーネルモジュールをインストールします。


[root@node1 ~]# modprobe 8021q

/etc/sysconfig/network-scripts/ifcfg-eth0.100


DEVICE=eth0.100
BOOTPROTO=static
IPADDR=192.168.100.2
NETMASK=255.255.255.0
ONBOOT=yes

/etc/sysconfig/network-scripts/ifcfg-eth0.200


DEVICE=eth0.200
BOOTPROTO=static
IPADDR=192.168.200.2
NETMASK=255.255.255.0
ONBOOT=yes

eth0はIPアドレスをつけずにインターフェースをアップだけしておきます。
(よって設定するHNにはリモートアクセス用のeth1が必要かもしれません。)

/etc/sysconfig/network-scripts/ifcfg-eth0


DEVICE=eth0
BOOTPROTO=static
IPADDR=0.0.0.0
ONBOOT=yes

ネットワークをリスタートします。


[root@node1 ~]# /etc/rc.d/init.d/network restart

最終的にVLANインターフェースとvethをブリッジさせる必要があるので、
ブリッジインターフェースを作成してVLANインターフェースを登録しておきます。


[root@node1 ~]# brctl addbr vzbr100
[root@node1 ~]# brctl addif vzbr100 eth0.0100
[root@node1 ~]# brctl addbr vzbr200
[root@node1 ~]# brctl addif vzbr200 eth0.0200

次にvethの設定をします。
まずはvethのカーネルモジュールをインストールします。


[root@node1 ~]# modprobe vzethdev

vethではHNのインターフェースにIPアドレスを設定していないので、IP forwardingの設定をします。また、proxy arpの設定をします。


[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp

venet用に設定していたIPアドレスコメントアウトします。
「VETH」で設定されているMACアドレスは適当です。実MACアドレス・他のVEのveth設定とバッティングしないものを設定します。

/etc/sysconfig/vz-scripts/100.conf


#IP_ADDRESS="192.168.100.2"
VETH="veth100.0,00:12:34:56:78:9A,eth0,00:12:34:56:78:9B "

/etc/sysconfig/vz-scripts/200.conf


#IP_ADDRESS="192.168.200.2"
VETH="veth200.0,00:12:34:56:78:9C,eth0,00:12:34:56:78:9D "

VEを起動してvethインターフェースを立ち上げた後、forwardingと
proxy arpの設定をします。


[root@node1 ~]# vzctl start 100
[root@node1 ~]# ifconfig veth100.0 0

ブリッジに登録します。
「xx:xx:xx:xx:xx:xx」はHNのeth0のMACアドレスを入力します。


[root@node1 ~]# brctl addif vzbr100 veth100.0
[root@node1 ~]# ifconfig vzbr100 hw ether xx:xx:xx:xx:xx:xx
[root@node1 ~]# ifconfig vzbr100 0
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0.0100/forwarding
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0.0100/proxy_arp
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/veth100.0/forwarding
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/veth100.0/proxy_arp
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/vzbr100/forwarding
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/vzbr100/proxy_arp
[root@node1 ~]# ip route add 192.168.100.2 dev veth100.0

同じようにVE200も設定します。


[root@node1 ~]# vzctl start 200
[root@node1 ~]# ifconfig veth200.0 0
[root@node1 ~]# brctl addif vzbr200 veth200.0
[root@node1 ~]# ifconfig vzbr200 hw ether xx:xx:xx:xx:xx:xx
[root@node1 ~]# ifconfig vzbr200 0
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0.0200/forwarding
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0.0200/proxy_arp
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/veth200.0/forwarding
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/veth200.0/proxy_arp
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/vzbr200/forwarding
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/vzbr200/proxy_arp
[root@node1 ~]# ip route add 192.168.200.2 dev veth200.0

これで、VE内でリアルサーバのようにネットワークの設定をすれば、通信できると思います。


参考
http://wiki.openvz.org/Virtual_Ethernet_device