LoginSignup
3
8

More than 5 years have passed since last update.

CentOSで特定のVLAN IDの通信だけをopenvswitchへブリッジしたい

Posted at

一台のLinuxホスト上で、VLAN単位で、openvswitchベースのVLANと、Linux標準のVLANの二つを使い分ける方法について記載します。
自分の勉強用環境のために作ったものです。

環境(使用したソフトウェア)

  • CentOS: 7.3
  • openvswitch: 2.6.1

やりたいこと

  • 物理ポートが1つしかないサーバで、openswitchを使って、複数のVLANをKVMの通信に利用したい
    • VLANタグなしの通信 ⇒ 仮想マシンホスト自体の管理接続用
    • VLANタグ(ID=100)の通信 ⇒ NASとの接続用
    • VLANタグ(ID=1000, 1001)の通信 ⇒ 仮想マシン(KVM Guest)が利用。ホストはその通信はスルーするだけ
      • 仮想マシンのネットワーク管理に、openvswitchを使用
  • 管理接続用とNASとの接続用の通信については、openvswitchでは制御しない

イメージは、次のような感じです。
ホストのNICは「ens1」、openvswitchで作成する仮想スイッチは「ovsbr0」という名前にしています。
ovsbr0は、シンプルな仮想L2SWです。VMWare ESXi(無償版)でいうところの「仮想スイッチ」に該当するかと思います。

20170812_01.png

メリット

openvswtichを使用したい通信とopenvswitchが動かない場合でも使いたい通信を分離したため、(セキュリティではなく、オペレーションの面で)安全性が高い。

デメリット

openvswitchに通したいVLANを増やす度、eno1.Xというサブインタフェースを作らなければなりません。そのため、大量のVLANを使うような環境には向いていません。仮に物理インタフェース自体をopenvswitchに紐づけた場合、タグ付きVLANを一括でopenvswitchの仮想スイッチで捌くことが可能です。そのほうが便利で、また一般的かと思われます。

参考にしたサイト

設定

まずeno1(タグなし)インターフェスの設定。
openvswitchに接続せず、タグVLANも使用しない、標準的な設定です。

/etc/sysconfig/network-scripts/ifcfg-eno1.
# cat /etc/sysconfig/network-scripts/ifcfg-eno1 
DEVICE=eno1
TYPE=Ethernet
BOOTPROTO=static
IPV6INIT=no
ONBOOT=yes
HWADDR=XX:XX:XX:XX:XX:XX
IPADDR=192.168.0.1
NETMASK=255.255.255.0
GATEWAY=192.168.0.xxx
IPV6INIT=no

つぎに、タグVLAN(VLANID=100)を受けるサブインタフェースの設定。
このインタフェースは、openvswitchには繋ぎません。

/etc/sysconfig/network-scripts/ifcfg-eno1.100
# cat /etc/sysconfig/network-scripts/ifcfg-eno1.100
DEVICE=eno1.100
VLAN=yes
ONBOOT=yes
IPADDR=192.168.100.1
NETMASK=255.255.255.0
IPV6INIT=no

openvswitchについては、まず仮想スイッチ自体を作成します。

/etc/sysconfig/network-scripts/ifcfg-ovsbr0.
# cat /etc/sysconfig/network-scripts/ifcfg-ovsbr0 
DEVICE=ovsbr0
NAME=ovsbr0
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=none
ONBOOT=yes
IPV6INIT=no

仮想スイッチに、接続するサブインタフェースを、VLANごとに作成します。
以下はVLANID=1000のサブインタフェースの例ですが、DEVICEで「インタフェース名.VLANID」を指定し、OVS_OPTIONSに、ポートのVLAN IDを指定する以外、他のVLANでも同様です。

/etc/sysconfig/network-scripts/ifcfg-eno1.1000
# cat /etc/sysconfig/network-scripts/ifcfg-eno1.1000
DEVICE=eno1.1000
VLAN=yes
DEVICETYPE=ovs
TYPE=OVSPort
ONBOOT=yes
OVS_BRIDGE=ovsbr0
OVS_OPTIONS="tag=1000"
IPV6INIT=no

ホスト内部とホスト外部のVLAN IDについて

この部分の厳密な内容については未確認です。

今回のような設定の場合、サブインタフェース「eno1.XXXX」は、openvswitchから見た場合、アクセスポート的な扱い(eno1と同じ)となっています。これは、VLANタグを外すのは、Linux kernelの(openvswitchではない)ネットワーク機能となるため、openvswitch(ovsbr0)へは、VLANタグのつかない形のパケットが転送されていると考えられます。

試しに設定ファイル内の「tag=1000」を「tag=10」に変更し、仮想マシンをopenvswitch内のvlan10に接続した場合も、外部のvlan1000と通信が出来ました。

今回の環境を構築する上では、VLANIDをホスト外とホスト内で異なるものにする必要はありませんが、この構成の仕組みとしては、VLANIDが内外で一致する必要はありません。

以上です。

3
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
8