ESXのポートグループ間での通信をVyOSで


# 目的
1台のESX上の1つの標準仮想スイッチ上に、複数のポートグループ(それぞれ別のVLANをアサインする体)を作成し、互いに疎通できるようにする。また、外のネットワークからもアクセスできるようにする。

以前NATのためにVyOSを導入したので、そのルーティング機能を使う。以下が公式のユーザーガイド。
https://wiki.vyos.net/wiki/User_Guide#Routing
ただ、今回やりたかったことに関しては、結局不要でした。

![image](https://qiita-image-store.s3.amazonaws.com/0/159980/ac31073c-ae02-f1c7-4944-967cd0180370.png)

①外部ネットワーク間(クライアントPC - vCenter間)
②ポートグループ間(PSC - AD/DNS間)
③外部ネットワークに足を出しているVMと完全なインターナルのポートグループ間(vCenter - PSC間)
④外部ネットワーク - 内部ネットワーク間(クライアントPC - PSC間)

表現がうまくないですが、例えばvCenter,VyOSの外部IPアドレス(10.62.130.242,243)は会社等から払い出されるもの、すなわち特に何もしなくてもお互い疎通できるアドレスで、その裏にプライベートな環境を作ろうとしているイメージです。そのため①はVyOSなしでもできます。

# 設定
## ESX環境セットアップ
ESX上にポートグループを3つ作成します。
- VM Network(外部ネットワークに相当, 10.62.130.0/24)
- VLAN0100(内部ネットワークその1, 192.168.4.0/23)
- VLAN0200(内部ネットワークその2, 192.168.20.0/24)

これらのポートグループ、もしくはその親になる仮想スイッチにて、Promiscuous(無差別)モードを有効にすることを忘れずに。
VMを構築し、各VM内で各々のNICにIPアドレス、D/G等を設定します。さらに、ESX上でそれぞれのNICを対応するポートグループにアサインします。

| VM | NIC | IP address | Default Gateway |
|:-----------|:------------|:------------|:------------|
| vCenter    | NIC1        | 10.62.130.242     | 10.62.130.1 |
| PSC    | NIC1        | 192.168.5.1     | 192.168.5.254 |
| AD    | NIC1        | 192.168.20.1     | 192.168.20.254 |

この状態では、①の通信は可能ですが他はNGです。

## VyOSインストール
インストールについては[こちら](http://qiita.com/KI1208/items/584e306c15a30807d6b0)で実施済としています。

### インターフェースの追加
OVFのデプロイでは、1つのNICしか作成されないので、VMの情報を編集してNICを必要なだけ追加する。
![image](https://qiita-image-store.s3.amazonaws.com/0/159980/37898ba3-8ed1-1468-a068-c8a462b0d109.png)

追加したインターフェースにIPアドレスを振る。
※最初に作成したインターフェースにはコンソールから設定する必要有。今回は割愛。

```shell-session
vyos@vyos:~$ configure
[edit]
vyos@vyos# set interfaces ethernet eth1 address '192.168.5.254/23'
[edit]
vyos@vyos# set interfaces ethernet eth1 description 'VLAN3902'
[edit]
vyos@vyos# set interfaces ethernet eth2 address '192.168.20.254/24'
[edit]
vyos@vyos# set interfaces ethernet eth2 description 'VLAN3914'
[edit]
vyos@vyos# commit
[edit]
vyos@vyos# save
Saving configuration to '/config/config.boot'...
Done
[edit]
vyos@vyos#
[edit]
```

直接接続されたネットワーク間に関しては、これだけでルーティングが学習される。

```shell-session
vyos@vyos# exit
exit
vyos@vyos:~$
vyos@vyos:~$
vyos@vyos:~$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

S>* 0.0.0.0/0 [1/0] via 10.62.130.1, eth0
C>* 10.62.130.0/24 is directly connected, eth0
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.4.0/23 is directly connected, eth1
C>* 192.168.20.0/24 is directly connected, eth2
```

この時点で、②が可能になります。

### vCenterにNIC2を追加
vCenterを以下のように変更します。

| VM | NIC | IP address | Default Gateway |
|:-----------|:------------|:------------|:------------|
| vCenter    | NIC1        | 10.62.130.242     | N/A |
|     | NIC2        | 192.168.5.2     | 192.168.5.254|
| PSC    | NIC1        | 192.168.5.1     | 192.168.5.254 |
| AD    | NIC1        | 192.168.20.1     | 192.168.20.254 |

この状態では、③はおろか、元々できていた①もNGとなります。
始めはVyOSにクライアントPC向けのStatic Routeがないためかと考え、以下のように追加しましたが結果は変わらず。

```shell-session
vyos@vyos:~$ configure
[edit]
vyos@vyos# set protocol static route 152.62.23.0/24 next-hop 10.62.130.1
[edit]
vyos@vyos# 
[edit]
vyos@vyos# commit
[edit]
vyos@vyos# save
Saving configuration to '/config/config.boot'...
Done
[edit]
vyos@vyos# exit
exit
vyos@vyos:~$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

S>* 0.0.0.0/0 [1/0] via 10.62.130.1, eth0
C>* 10.62.130.0/24 is directly connected, eth0
C>* 127.0.0.0/8 is directly connected, lo
S>* 152.62.23.0/24 [1/0] via 10.62.130.1, eth0
C>* 192.168.4.0/23 is directly connected, eth1
C>* 192.168.20.0/24 is directly connected, eth2
```

基本的にNIC1に来た通信はNIC1から帰っていくため、上記ではNGでした。
このケースでは、vCenterだけはVM上でStatic Routeを切って対応しました。

```shell-session
C:\Windows\system32>route add -p 152.62.23.0 mask 255.255.255.0 10.62.130.1 if 13
OK
C:\Windows\system32>route print
===========================================================================
Interface List
 13...00 0c 29 f2 0b 0a ......Intel(R) 82574L Gigabit Network Connection #2
 12...00 0c 29 f2 0b 00 ......Intel(R) 82574L Gigabit Network Connection
  1...........................Software Loopback Interface 1
 14...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
 15...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0    192.168.5.254    192.168.5.200    266
      10.62.130.0    255.255.255.0         On-link     10.62.130.242    266
      152.62.23.0    255.255.255.0      10.62.130.1    10.62.130.242     11
      192.168.4.0    255.255.254.0         On-link     192.168.5.200    266
===========================================================================
Persistent Routes:
  Network Address          Netmask  Gateway Address  Metric
          0.0.0.0          0.0.0.0    192.168.5.254  Default
```

これで①②③がOKとなります。

# SNATの設定
④に関してはSNAT, DNATを設定することで可能になります。こちらは[以前](http://qiita.com/KI1208/items/584e306c15a30807d6b0)カバーしたので割愛します。

# まとめ
これである程度複雑なネットワークパターンでも実装できそうです。
ただ今回はVLANを実際には振っていないので、そこは次回以降の宿題とします。