Tech Sketch Bucket of Technical Chips by TIS Inc.

Linux/WindowsでTag VLANを使ってみよう

Pocket

 昨今、システムは大規模化がさらに進み、ネットワークに複数のシステムが接続されている。基本的にそれぞれのシステム、特にバックエンド部分は独立したネットワークセグメントとなっていることが多い。複数のシステムを集中監視を行おうとすると、監視サーバは多くのネットワークに接続する必要が発生する。
 2セグメント程度なら問題はないが、それを超えるとport vlan接続ではNIC(Network Interface Card)が不足となる状態が発生する。仮にVMware上の仮想マシンで構築したとしても1仮想マシンあたり10個までしか接続できない。
 その問題を解消するかつ、ネットワークセグメントが追加されても物理的な結線の変更を不要にする方法としてTag VLANを利用する方法がある。Tag VLANとは、IEEE 802.1で規定されており、通常のEthernet frameにTag VLANの情報を付与し、同一Tag VLANを送受信するインターフェース以外との通信を分離する技術である。さらにTag VLANを2重に利用する802.1Q-in-Qという規格も存在する。

png
出典:
CISCO IEEE 802.1Q-in-Q VLAN Tag Termination

通常、Tag VLANの情報は4byteで構成される。設定内容は以下となる。

使用bit数 用途 設定値
16bit TPID (Tag Protocol Identifier) Tag VLANの規格を設定する。IEEE 802.1Qの場合0x8100が設定される。
3bit PCP (Priority Code Point) 通信の優先度が0(最低)~7(最高)まで設定される。
1bit CFI (Canonical Format Indicator) MACアドレスのフォーマットが0:正規か1:非正規かを設定する。通常は0:正規が設定される。
12bit VID (VLAN Identifier) Tag VLANで利用するVLAN IDを設定する。0~4095まで設定可能だが、通常は1~4094までが利用される。


今回の検証でははLinuxではCentOS 6.xと7.x、Ubuntu server 14.04、Windows VISTA Business (!)にTag VLANを設定し通信を行ってみた。

 検証環境は下図の通り、L3スイッチにPort VLANを201~206までの6個作成し、それぞれにdefault gatewayを設定した。検証用サーバにはTag VLANで201~206をTrunkする形で接続した。使用するNICは1ポートとし、その1ポートでVLAN 6個を送受信できる状態を実現する。今回の各OSのTag VLANの設定はIPv4にのみ設定を行っており、IPv6は無効化している。

png


CentOS 6.xの場合

検証ではCentOS 6.7 x86_64をminimalインストールしたものを使用した。

CentOS 6.7でのTag VLAN設定の作業の流れは以下となる。

  1. Tag VLANを有効化
  2. 物理NICをパススルー化
  3. Tag VLANと接続する仮想NICを作成
  4. network serviceを再起動

1. Tag VLANを有効化

/etc/networkにVLANの有効化と仮想NIC設定を記述するコンフィグファイルのファイル名の書式の記述を追加する。

仮想NIC設定を記述するコンフィグファイルのファイル名の書式は以下のバリエーションが存在する。

パラメータ ファイル名の書式例 (VLAN ID=201)
VLAN_PLUS_VID ifcfg-vlan0201
VLAN_PLUS_VID_NO_PAD ifcfg-vlan201
DEV_PLUS_VID ifcfg-eth0.0201
DEV_PLUS_VID_NO_PAD ifcfg-eth0.201

今回はDEV_PLUS_VID_NO_PADを選択したのでコンフィグファイル名はifcfg-eth0.[VLAN ID]となる。

2. 物理NICをパススルー化

Tag VLANで接続を行う物理NICの設定はIPアドレス等を設定しないパススルー状態に設定する必要がある。以下が設定例となる。

3. Tag VLANと接続する仮想NICを作成

Tag VLANで通信を行うためには、通信するTag VLANごとに仮想NICの設定ファイルを作成する必要がある。 以下はVLAN ID 201で固定IPを使用した場合の設定例となる。

Tag VLANであってもDHCPでIPを取得することも可能である。Default Gatewayを設定することもできる。設定は方法は物理NICの設定と全く変わらない。

コンフィグファイルの書式設定のパラメータにDEV_PLUS_VID / DEV_PLUS_VID_NO_PAD を選択した場合、はDEVICEの書式を以下に変更する必要がある。基本的にDEVICE行にはifcfg-*****の*****の部分を、PHYSDEVにはパススルーする物理NICのデバイス名を記載する。

上記をVLAN 201~206まで繰り返し、以下のファイルを作成・編集する。

4. network serviceを再起動

設定が完了したらnetwork serviceの再起動を行う。

全てのインターフェースが活性化されるとTag VLANへの通信が可能となる。
一度、Tag VLAN有効化の時点でnetwork service restartを実行しておけば、ifupコマンドで起動させることもできる為、初めての場合は一気に全VLANを設定せずに、1個ずつ追加していくことをお勧めする。

再起動が完了したら、設定が正常に行われているかを確認する。

あとは各VLANのDefault Gatewayに対してpingを実行し、通信が可能かを確認を行い、正常に通信ができれば完了である。


CentOS 7.xの場合

検証ではCentOS 7.1 x86_64をminimalインストールしたものを使用した。

CentOS 7.1でのTag VLAN設定の作業の流れは以下となる。

  1. 物理NICのインターフェース名変更とNICをパススルー化
  2. Tag VLANの有効化
  3. Tag VLANを登録
  4. Tag VLANと接続する仮想NICを作成
  5. serviceのNetwork_Manager とnetworkを再起動

1. 物理NICのインターフェース名変更とNICをパススルー化

実際にOSをインストールして起動させてみると、NICのコンフィグファイルがifcfg-ethではなく、ifcfg-emやifcfg-pci****やifcfg-eno******などの名前になっている。emはオンボードNIC、pciはpci-express等の拡張スロットに接続したNICで使用されるようである。ただ、/var/log/dmesgを読むと、普通にeth0、eth1と認識されているのを、わざわざrenameしていることが判る。

ifcfg-******のファイルはrenameされた名前で作成される。この状態のNICに対してTag VLANを設定しようとすると、Tag VLANの仮想NICが自動起動しない状況が発生した、そのため、renameをさせないような設定を行った。同時に物理NICのパススルー化の設定も行っている。その設定例は以下となる。

完了後にOSの再起動を行うと、ネットワークインターフェース名がeth0に変更され、パススルー化も完了する。

2. Tag VLANの有効化

まずTag VLANを使用する為の8021qのモジュールがロードされているかを確認する。今回の検証ではminimalインストールでも8021qのモジュールは標準でインストールされており、インストールは実施しなかったが、"not found."等のエラーになる場合は、インストールが必要となる。

/etc/networkにVLANの有効化と仮想NIC設定を記述するコンフィグファイルのファイル名の書式の記述を追加を行う。その設定例は以下となる。

仮想NIC設定を記述するコンフィグファイルのファイル名の書式はCentOS 6.xと同一である。
CentOS 7.xでもDEV_PLUS_VID_NO_PADを選択したのでコンフィグファイル名はifcfg-eth0.[VLAN ID]となる。

3. Tag VLANの登録

各Tag VLANとインターフェース名はCLIで登録を行う。そのコマンド実行例は以下となる。

登録が完了すると /proc/net/vlanに設定ファイルが生成される。

ファイルのサイズは0byteだが、設定自体は記載されている。この設定をエディタで修正することはできない。

4. Tag VLANと接続する仮想NICを作成

Tag VLANで通信を行うためには、通信するTag VLANごとに仮想NICの設定ファイルを作成する必要がある。 以下はVLAN ID 201で固定IPを使用した場合の設定例となる。

Tag VLANであってもDHCPでIPを取得することも可能である。Default Gatewayを設定することもできる。設定は方法は物理NICの設定と全く変わらない。
上記をVLAN 201~206まで繰り返し、以下のファイルを作成・編集する。

5. serviceのNetworkManager とnetworkを再起動

設定を有効化させるためにserviceのNetworkManagerとnetwerkを再起動する。

再起動が完了したら、設定が正常に行われているかを確認する。

あとは各VLANのDefault Gatewayに対してpingを実行し、通信が可能かを確認を行い、正常に通信ができれば完了である。

補足: nmtuiツール

CentOS 7.xでは上記のようなネットワークの設定をGUIで設定が行えるnmtuiというツールが提供されている。 日本語環境で実行すると文字化け等で表示が崩れるため、LANG=cで英語環境での利用をお勧めする。コマンドの実行例は以下となる。

設定ファイルの生成や設定反映後のサービスの再起動も自動で行われる為、なかなか便利な機能であり、本ツールについてもいずれ、解説を行いたいと考えている。

png


Ubuntu server 14.04.xの場合

検証ではUbuntu server 14.04.3 LTSを標準インストールしたものを利用した。

Ubuntu 14.04.3でのTag VLAN設定の作業の流れは以下となる。

  1. Tag VLANの有効化
  2. Tag VLANを登録
  3. ネットワーク設定の変更
  4. serviceのnetworkingを再起動

1. Tag VLANの有効化

Ubuntu server標準インストールではTag VLANは有効になっていない。まずはvlanパッケージを以下のコマンドでインストールする。

2. Tag VLANを登録

vconfigコマンドを使用し、Tag VLANの登録を行う。コマンドの実行例は以下となる。

登録が完了すると /proc/net/vlanに設定ファイルが生成される。

ファイルのサイズは0byteだが、設定自体は記載されている。この設定をエディタで修正することはできない。

4. Tag VLANと接続する仮想NICを作成

Tag VLANで通信を行うためには、通信するTag VLANごとに仮想NICの設定をネットワークインターフェスの設定ファイルに記述する必要がある。以下はVLAN ID 201~202で固定IPを使用した場合の設定例となる。201にはDefault gatewayとDNSも設定している。

5. serviceのnetworkingを再起動

設定を有効化させるためにnetwerkingのサービスを再起動する。
Ubuntuの場合、/etc/network/interfacesの設定に不備があると、ネットワーク全てが使用不可能となる可能性がある。再起動前に十分な確認が必要となる。

再起動が完了したら、設定が正常に行われているかを確認する。

あとは各VLANのDefault Gatewayに対してpingを実行し、通信が可能かを確認を行い、正常に通信ができれば完了である。


Windows OSの場合

今回、検証に使用したのはWindows VISTA Business x86_64である。正直、今更感はあるが、基本的な設定方法は、client/server問わず、どのバージョンのWindowsでも大きな差は無い。

png

WindowsでTag VLANを利用する為には、搭載されているNICのドライバがTag VLANをサポートしている必要がある。Intel製のNICがTag VLAN対応となっている製品が多い。対応製品の一覧は以下となる。

 今回の検証はVMware ESXi上の仮想マシンで行っている。構築時にe1000のNICを選択すると、OS上はでIntel PRO/1000 MT Desktop Adapterとして認識され、e1000Eを選択するとIntel 82574L Gigabit Ethernet Controllerとして認識される。双方とも上記一覧に存在し、Tag VLANの利用が可能である。
 ただ、標準ドライバではTag VLANは使用できず、Intel PROSet Windowsデバイス・マネージャーが搭載されたドライバを上書きインストールする必要がある。

Windows OS上でのTag VLAN設定の作業の流れは以下となる。

  1. ドライバのダウンロード
  2. ドライバの上書きインストール
  3. 物理NICのパススルー化
  4. Tag VLANの作成
  5. IPアドレスの設定

1. ドライバのダウンロード

インテルダウンロードセンタにアクセスし、製品名に対応したドライバを検索してダウンロードする。
2015年10月16日現在は以下からダウンロードが可能だ。

Windows VISTA用
Windows 7用
Windows 8用
Windows 2008R2用
Windows 2012用

2. ドライバの上書きインストール

ダウンロードしたインストーラを実行し、上書きインストールを行う。インストール終了後にOSを再起動する。

png

3. 物理NICのパススルー化

Tag VLANを使用する物理NICのプロパティを起動し、以下の3項目を有効化し、それ以外を全て無効化する。

(1) Microsoft ネットワーク用クライアント (2) Microsoft ネットワーク用ファイルとプリンタ共有 (3) Inter(R) Advanced Network Service Protocol

png

4. Tag VLANの作成

Tag VLANの作成はネットワークのプロパティではなく、デバイスマネージャ上で行う。
デバイスマネージャを起動し、ネットワークアダプタ・Inter(R) PRO/1000 MT Network Connectionでプロパティを起動する。Intel PROSet Windows デバイス・マネージャーがインストールされているとVLANの設定タブが表示される。

png

VLAN ID 201~206を新規作成で登録する。

png

設定が完了すると設定されたVLAN IDのTag VLANと通信可能な仮想NICが生成される。

png

5. IPアドレスの設定

ネットワーク接続から各NICのプロパティを起動し、IPアドレスの設定を行う。 仮想NICであっても設定は物理NICと全く同一で、Default GatewayやDNSの設定も可能となっている。

png

完了したらipconfigコマンドで設定結果を確認する。

png

あとは各VLANのDefault Gatewayに対してpingを実行し、通信が可能かを確認を行い、正常に通信ができれば完了である。

補足1:Windowsの仮想NICの管理

仮想NICを大量に生成すると、命名が連番な為、どのNICがどこに接続されているか非常にわかりにい。

png

Windowsでは仮想NICの名前を変更できるので、接続場所が判るようにして置くことで、混乱を防ぐことができる。

png


VMwareでTag VLANを仮想マシンのNICにTrunkする方法

VMware上の仮想マシンでもスイッチからのTag VLANでの通信が可能である。その場合に使用する仮想NICははVLAN IDに「すべて(4095)」を指定したネットワークを割り当てる必要がある。

png

Tag VLAN使用のメリットとデメリット

Tag VLANを使用することにより以下のメリットが発生すると考えられる。

  1. 1つの物理NICで多くのネットワークセグメントに接続できる。
  2. 仮想NICが使用できることで物理的な制約を超えて接続ができる。
  3. ネットワークの物理結線を変更することなく、接続先をサーバ内部の設定で変更できる。
  4. ルーティングの機能を使わなくても複数セグメントへの通信が可能

ただし、以下のデメリットも存在する。

1.あまり多くの仮想NICを接続すると、サーバの起動・停止に時間がかかるようになる。 2.不用意に全てのTag VLANをTrunkすると、アクセスしてはいけないサーバもアクセスが可能となる。

非常に便利なTag VLANだが、サーバ側にTrunkするVLAN IDについては、必要な物に制限を行うと共に、必要最低限の仮想NICを起動させる等の対策を忘れずに行いたい。

エンジニア採用中!私たちと一緒に働いてみませんか?