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内でリアルサーバのようにネットワークの設定をすれば、通信できると思います。
参考



