BIG-IPでRoute Domainを使う

# はじめに
このページは、F5 BIG-IPの機能である「Route Domain」について、自習した内容をまとめたものです。

# Route Domainとは
一言で言うなら「バーチャルルータ」。
Cisco(IOS)のVRF、LinuxのNetwork NameSpaceに似た機能です。

以下のように、１台のBIG-IPにルートドメインを複数作成することにより、複数の独立したルーティングテーブルでネットワークを制御できます。

![Route_Domain_image_1(1).png](https://qiita-image-store.s3.amazonaws.com/0/157891/9f4d9dfb-be8b-7294-35c9-92eda43febb7.png)

VRFやNetwork Namespaceと同じく、Route Domainでも、ルートドメインが異なれば、同じIPアドレスを利用することも可能です。

![Route_Domain_image_2.png](https://qiita-image-store.s3.amazonaws.com/0/157891/4a44a46c-8d2c-dd1d-24a6-50c3da20c9fe.png)

ちなみに、BIG-IPでは、実際には複数のルーティングテーブルを持つのではなく、ルーティングのレコードに**ドメインID**という識別子を持たせることで、実装してるようです。'(tmsh) show net route' コマンドでルーティングテーブルを表示してみると、ちょっと気持ち悪い感じがします。

```bash
root@(bigip-ve)(cfg-sync Standalone)(Active)(/Common)(tmos)# show net route 
                        
--------------------------------------------------------------------------------------------------
Net::Routes             
Name                      Destination               Type       NextHop                   Origin
--------------------------------------------------------------------------------------------------
172.16.0.0%200/12         172.16.0.0%200/12         interface  /Common/VLAN_201          connected
172.16.0.0%100/12         172.16.0.0%100/12         interface  /Common/VLAN_101          connected
10.0.0.0%200/8            10.0.0.0%200/8            interface  /Common/VLAN_200          connected
10.0.0.0%100/8            10.0.0.0%100/8            interface  /Common/VLAN_100          connected
127.1.1.0%200/24          127.1.1.0%200/24          interface  tmm%200                   connected
127.1.1.0%100/24          127.1.1.0%100/24          interface  tmm%100                   connected
・・・
```

一つのルーティングテーブル上に、「x.x.x.x%ID」という形でレコードが表示されます。上記の場合、172.16.0.0%200/12 は「ルートドメイン200上の、172.16.0.0/12」という意味になります。ルーティングテーブルを分けているつもりが、１つのテーブル内で表示されるのが気持ち悪い上に、とても読みにくい。これはなんとかして欲しいところ・・・

# Route Domainの利点
上記の通り、複数の、独立したルーティング情報を持つことができます。ルートドメインを分けることで、それぞれ個別に、論理的にはトラフィックが混ざることなく、ネットワークを設計・構築することができます。

ネットワークアドレスが重複することもできるので、いわゆるマルチテナントにも利用できます。

# Route Domain 0
Route Domain 0は、最初から存在するルートドメインです。ルートドメインを作っていなければ、全てのVLANはこのドメインに属します。このルートドメインは削除できません。

# Route Domainの設定
Route Domainを利用する場合は、まず、新しいRoute Domainを作成することが必要です。ドメインはID（番号）で区別されているので、各ドメインのIDは重複できません。また、そのRoute Domainに所属させるVLANを設定します。

```bash
(tmos)# create net route-domain RD100 { id 100 vlans add { VLAN_100 VLAN_101 } }
(tmos)# create net route-domain RD100 { id 200 vlans add { VLAN_200 VLAN_201 } }
(tmos)# list net route-domain
net route-domain 0 {
    id 0
    vlans {
        http-tunnel
        socks-tunnel
    }
}
net route-domain RD100 {
    id 100
    vlans {
        VLAN_101
        VLAN_100
    }
}
net route-domain RD200 {
    id 200
    vlans {
        VLAN_200
        VLAN_201
    }
}
```

Route Domainを作成したら、そのドメイン上に作成する各種オブジェクト（Self IP, Node, Virtual Server, Routing, SNAT 等々）を作成します。この時、**IPアドレスの後ろに『％ID』を付与します。**

例えば、Route Domain 100上VLAN 100に、10.0.0.1/24 というSelf IPを作成する場合は、次のようになります。

```bash
(tmos)# create net self vlan100_self { address 10.0.0.1%100/8 vlan VLAN_100 } 
(tmos)# list net self
net self vlan100_self {
    address 10.0.0.1%100/8
    traffic-group traffic-group-local-only
    vlan VLAN_100
}
```

# Route Domainを超える通信

Route Domain作成時、設定に「Strict Isolation」と「Parent Domain」という設定欄があり、それぞれ、デフォルトでは「Strict Isolation は Enabled」、「Parent Domain は None」と設定されています。

![Route_Domain_Config_SS.png](https://qiita-image-store.s3.amazonaws.com/0/157891/a4a06757-a956-88eb-2797-fb5f4433e585.png)


このデフォルト状態の設定であれば、他のドメインへの通信は行いません。

## Strict Isolationと、Parent Domainについて
**Strict Isolationが無効な場合**、通信が自ドメインのルーティングにヒットしない場合は、単純に他のドメインのルーティングに回されます。この機能を無効にする場合は、注意が必要です。（個人的には、Strict Isolationを無効にする状態で、複数のRoute Domainを使う必要性がわかりません。）

**Strict Isolationが有効な場合**、パケットの宛先が自ドメイン内のルーティングにヒットしない場合にはParent Domainに指定したドメイン（親ドメイン）のルーティングが参照されます。そして、ヒットする経路がある場合は、親ドメイン上の宛先VLANへパケットを送信します。

![Route_Domain_Parent_Domain.png](https://qiita-image-store.s3.amazonaws.com/0/157891/3f91ca85-022d-dbe3-9493-52c795cbc195.png)

Parent Domainが「**None**」になっているということは、そのドメインは親ドメインがないことを表します。

このParent Domainの仕組みは何に使えるのだろうと考えたのですが、例えば、インターネットとLANの境界にBIG-IPが設置されているときは、次のように使えるのかなと思います。（あくまで想像です）

![Route_Domain_2.png](https://qiita-image-store.s3.amazonaws.com/0/157891/9fffac4f-0ef1-6c79-3dce-720bdd738271.png)

この場合、Route Domain100では送信元IPが重複する可能性があるので、SNATも使用する必要があります。

# Route DomainとPartition
Route Domainは便利ですが、設定の都度、IPアドレスの後ろに「%ID」をつけなければならないのが辛いところです。

Route Domainはネットワークを分離しますが、Partitionを使うと、設定の管理を分離できます。

Partitionを使用すると、Partitionごとに"Default Route Domain" を設定でき、そのPartition内の操作をするとき、Route Domainを意識する必要が（かなり）なくなります。Route Domainを使うときは、Partitionとあわせて使うのが良いのではないでしょうか。

# 参考URL
- [Manual: BIG-IP TMOS Routing Administration](https://support.f5.com/kb/en-us/products/big-ip_ltm/manuals/product/tmos-routing-administration-12-1-0.html)

# 免責事項
本ページの内容に誤り等があり、参考にされた方がなんらかの損害を被った場合、一切の責任は負いません。