「仮想化」というキーワードから連想する物にVMwareやXenなどあると思いますが、今回は少しレイヤを下げて、ネットワークの仮想化について書きたいと思います。これはVLAN(Virtual LAN)だけではなく、VRF(Virtual Routing and Forwarding)も使って社内ネットワークを論理的に分けた時のお話です。
■背景
もともとlivedoorのオフィス拠点は都内2箇所に別れていました。
データセンターを中心とした活動を行う事業拠点と、主にポータルサイトのコンテンツ開発を行う事業拠点です。もちろん、この2拠点は専用線で接続し、互いにイントラ通信を可能としていましたが、業務特性の違いがあるため、運用ポリシーを別とし、物理的には分けたネットワークを構築していました。
(データセンター拠点を含んでいませんが、ここでは割愛します)
![]() |
| 構成図 - 1 |
しかしビデオ会議システムを導入する程の拠点数と距離ではなく、会議の度に移動していた偉い人達は面倒になったのでしょうか(いや、もちろん違う理由だと思いますが)、2009年秋に、この2拠点が集約される事になりました。
そこで、新オフィスのイントラ構成を考えていた時にあがった議題が、デフォルトゲートウェイの問題です。
■検討
"構成図-1"の通り、以前は拠点ごとにゲートウェイ装置を設置していた為、オフィスの端末からインターネットに出ていく際のソースIPアドレスは、拠点ごとで異なりました。
一般企業の場合、ソースIPアドレスが何であろうと、さほど問題にはならないかと思います。しかしlivedoorの場合、ソースIPアドレスが変更になると、複数箇所で設定変更が必要になる事が予め分かっていました。インターネット上の管理サーバに、ソースIPアドレスでのアクセス制限を適用しているからです。
解決策として次の案を検討しました。
o 設定変更の手間はあきらめて、ゲートウェイ装置を集約?
やはり手間がかかるので、できれば別の方法で…
o ゲートウェイ装置は集約して、管理サーバにアクセスしたい場合はVPN?
業務の度に、VPN経由でアクセスするのも面倒…
o 新オフィス内でも物理的に分けたネットワークを構築する?
物理機器が増え過ぎるのも…
ハードウェアの保守費用もばかになりませんし…
o VRF?
ソースIPアドレスが維持できる Good!!
サーバ側の設定変更がいらない Good!!
物理的には最少構成で構築できる Good!!
しかし、VRF社内での運用実績はないため多少の不安(機能としての不安ではなく、今後運用していけるかどうかという不安)がありましたが、現時点での問題点を全て解決してくれるVRFを使って構築する事にしました。
★VRF(Virtual Routing and Forwarding) について
VRFの技術概要については、Googleやlivedoor等で検索して頂ければと思いますが、1台の物理装置内に、論理的に分離された複数のルーティングテーブルを保持し、各ルーティングテーブルに従ってパケット転送が行われる機能だと理解しています。
VRF自体はもともと、ISPのMPLS網などで利用されている機能であり、新しい技術ではないのですが、いくら企業内ネットワークに使用したいと考えても、VRF(もといMPLS)を実装するルータは非常に高価(家が買えるくらい…)で、イントラネットの為に購入できる金額ではありません。しかし、現在はメーカー問わず比較的安価なL3スイッチでもVRFが使えるようになってきているので、今回のような、
o クライアントによってデフォルトゲートウェイを分けたい
(クライアントによって参照するルーティングテーブルを分けたい)
o 物理構成は最少にしたい
といった要件を実現する場合には、非常に便利な機能です:)
■ 設定
概要構成とConfiguration内容です。
今回は、Router-AとRouter-BにてVRFを動かしてみました。
機種は、Cisco Catalyst 3650シリーズです。
| 構成図 - 2 |
* 補足
Native は Router-A、VRF Buser はRouter-Cにてデフォルトルートを生成し、OSPFで再配信しています。
【Router-Aの設定内容】(抜粋)
★ VRFの定義 ※今回は旧B拠点ネットワークをVRFのインスタンスとして定義
!
ip vrf Buser
!
★ loopback は、NativeとVRF、それぞれで設定
!
interface Loopback0
ip address 10.0.0.1 255.255.255.255
!
interface Loopback1
ip vrf forwarding Buser
ip address 10.0.255.1 255.255.255.255
!
★ ゲートウェイ装置向けの物理インターフェース
!
interface FastEthernet0/1
description "Gateway-A"
switchport access vlan 50
switchport mode access
!
★ Router-B 向けの物理インターフェース
!
interface GigabitEthernet0/1
description "Router-B"
switchport trunk encapsulation dot1q
switchport trunk allowed vlan 10,20
switchport mode trunk
!
★ Router-C 向けの物理インターフェース
!
interface GigabitEthernet0/2
description "Router-C"
switchport trunk encapsulation dot1q
switchport trunk allowed vlan 30,40
switchport mode trunk
!
★ Router-A〜Router-B間の接続用 interface vlanを、NativeとVRF、それぞれで設定
!
interface Vlan10
description "Router-B-Native"
ip address 10.0.10.253 255.255.255.252
!
interface Vlan20
description "Router-B-VRF-Buser"
ip vrf forwarding Buser
ip address 10.0.20.253 255.255.255.252
!
★ Router-A〜Router-C間の接続用 interface vlanを、NativeとVRF、それぞれで設定
!
interface Vlan30
description "Router-C-Native"
ip address 10.0.30.253 255.255.255.252
!
interface Vlan40
description "Router-C-VRF-Buser"
ip vrf forwarding Buser
ip address 10.0.40.253 255.255.255.252
!
★ Router-A〜Gateway間の接続用 interface vlanを作成
!
interface Vlan50
description "Router-C-Native"
ip address 10.0.50.2 255.255.255.252
!
★ Native サーバ収容 interface vlanを作成
!
interface Vlan100
description "vlan100-Native"
ip address 10.0.100.1 255.255.255.0
!
★ NativeとVRF、それぞれでOSPFを動かす
!
router ospf 1
router-id 10.0.0.1
log-adjacency-changes
default-information originate
passive-interface Vlan100
network 10.0.0.1 0.0.0.0 area 0
network 10.0.10.253 0.0.0.0 area 0
network 10.0.30.253 0.0.0.0 area 0
network 10.0.50.2 0.0.0.0 area 0
network 10.0.100.1 0.0.0.0 area 0
!
router ospf 2 vrf Buser
router-id 10.0.255.1
log-adjacency-changes
network 10.0.20.253 0.0.0.0 area 0
network 10.0.40.253 0.0.0.0 area 0
network 10.0.255.1 0.0.0.0 area 0
!
!
★ Native 用の default route を設定
!
ip route 0.0.0.0 0.0.0.0 10.0.50.1
!
!
【Router-Bの設定内容】(抜粋)
★ VRFの定義
!
ip vrf Buser
!
★ loopback は、NativeとVRF、それぞれで設定
!
interface Loopback0
ip address 10.0.0.2 255.255.255.255
!
interface Loopback1
ip vrf forwarding Buser
ip address 10.0.255.2 255.255.255.255
!
★ Router-A 向けの物理インターフェース
!
interface GigabitEthernet0/1
description "Router-A"
switchport trunk encapsulation dot1q
switchport trunk allowed vlan 10,20
switchport mode trunk
!
★ Router-A〜Router-B間の接続用 interface vlanを、NativeとVRF、それぞれで設定
!
interface Vlan10
description "Router-A-Native"
ip address 10.0.10.254 255.255.255.252
!
interface Vlan20
description "Router-A-VRF-Buser"
ip vrf forwarding Buser
ip address 10.0.20.254 255.255.255.252
!
★ Native ユーザ収容用 interface vlanを作成
!
interface Vlan101
description "vlan101-Native"
ip address 10.0.101.1 255.255.255.0
!
interface Vlan102
description "vlan102-Native"
ip address 10.0.102.1 255.255.255.0
!
★ VRF ユーザ収容用 interface vlanを作成
!
interface Vlan201
description "vlan201-VRF-Buser"
ip vrf forwarding Buser
ip address 10.0.201.1 255.255.255.0
!
interface Vlan202
description "vlan201-VRF-Buser"
ip vrf forwarding Buser
ip address 10.0.201.1 255.255.255.0
!
★ NativeとVRF、それぞれでOSPFを動かす
!
router ospf 1
router-id 10.0.0.2
log-adjacency-changes
passive-interface Vlan101
passive-interface Vlan102
network 10.0.0.2 0.0.0.0 area 0
network 10.0.10.254 0.0.0.0 area 0
network 10.0.101.1 0.0.0.0 area 0
network 10.0.102.1 0.0.0.0 area 0
!
router ospf 2 vrf Buser
router-id 10.0.255.2
log-adjacency-changes
passive-interface Vlan201
passive-interface Vlan202
network 10.0.20.254 0.0.0.0 area 0
network 10.0.201.1 0.0.0.0 area 0
network 10.0.202.1 0.0.0.0 area 0
network 10.0.255.2 0.0.0.0 area 0
!
■ 結果
Router-Bのルーティングテーブルを確認
【Native側】
Router-B#sh ip route
Gateway of last resort is 10.0.10.253 to network 0.0.0.0
10.0.0.0/8 is variably subnetted, 11 subnets, 3 masks
C 10.0.0.2/32 is directly connected, Loopback0
O 10.0.0.1/32 [110/2] via 10.0.10.253, 00:15:43, Vlan10
O 10.0.60.0/30 [110/7] via 10.0.10.253, 00:15:43, Vlan10
O 10.0.50.0/30 [110/2] via 10.0.10.253, 00:15:43, Vlan10
O 10.0.100.0/24 [110/2] via 10.0.10.253, 00:15:43, Vlan10
O 10.0.40.252/30 [110/7] via 10.0.10.253, 00:15:43, Vlan10
O 10.0.20.252/30 [110/8] via 10.0.10.253, 00:15:43, Vlan10
O 10.0.30.252/30 [110/2] via 10.0.10.253, 00:15:44, Vlan10
O 10.0.255.1/32 [110/8] via 10.0.10.253, 00:15:44, Vlan10
O 10.0.255.2/32 [110/9] via 10.0.10.253, 00:15:44, Vlan10
C 10.0.10.252/30 is directly connected, Vlan10
O*E1 0.0.0.0/0 [110/12] via 10.0.10.253, 00:15:44, Vlan10
【VRF側】
Router-B#sh ip route vrf Buser
Gateway of last resort is 10.0.20.253 to network 0.0.0.0
10.0.0.0/8 is variably subnetted, 11 subnets, 3 masks
O 10.0.0.2/32 [110/9] via 10.0.20.253, 00:16:11, Vlan20
O 10.0.0.1/32 [110/8] via 10.0.20.253, 00:16:11, Vlan20
O 10.0.60.0/30 [110/7] via 10.0.20.253, 00:16:11, Vlan20
O 10.0.50.0/30 [110/8] via 10.0.20.253, 00:16:11, Vlan20
O 10.0.100.0/24 [110/8] via 10.0.20.253, 00:16:11, Vlan20
O 10.0.40.252/30 [110/2] via 10.0.20.253, 00:16:11, Vlan20
C 10.0.20.252/30 is directly connected, Vlan20
O 10.0.30.252/30 [110/7] via 10.0.20.253, 00:16:12, Vlan20
O 10.0.255.1/32 [110/2] via 10.0.20.253, 00:16:12, Vlan20
C 10.0.255.2/32 is directly connected, Loopback1
O 10.0.10.252/30 [110/8] via 10.0.20.253, 00:16:13, Vlan20
O*E1 0.0.0.0/0 [110/12] via 10.0.20.253, 00:16:13, Vlan20
上記の通り、同じ経路向けの宛先アドレスも、それぞれ異なるアドレスを学習しています。
インターネット向けの traceroute を確認
Router-B#traceroute 203.131.***.***
Type escape sequence to abort.
Tracing the route to 203.131.***.***
1 10.0.10.253 0 msec 0 msec 0 msec
2 10.0.50.1 0 msec 0 msec 0 msec
3 203.131.***.*** 0 msec 0 msec 9 msec
4 203.131.***.*** 0 msec 0 msec 8 msec
Router-B#traceroute vrf Buser ip 203.131.***.***
Type escape sequence to abort.
Tracing the route to 203.131.***.***
1 10.0.20.253 0 msec 0 msec 0 msec
2 10.0.40.253 0 msec 0 msec 0 msec
3 10.0.60.1 0 msec 0 msec 0 msec
4 203.174.***.*** 8 msec 9 msec 0 msec
5 203.131.***.*** 8 msec 0 msec 8 msec
それぞれ別の経路でインターネットにでている事が確認できました。
■ 終りに
VRF自体の設定は結構簡単にできますが、こと運用面に関しては、VRFという依存関係が加わる事によってネットワークが複雑化するため、障害時の事を考えると、それはそれで悩ましかったりします。
しかし某展示会ネットーワークモデルのように、VRFを使うと、同じ物理網を使って用途別に、容易に、ネットワークを構築する事ができるので、今後は(要望があれば)、検証用、IPv6用、人事用など、VRFの追加をおこなって、運用ノウハウをためていきたいと思います。VRF、おすすめです:)

