ESXiの内部ネットワークをVyOSでつくる

#はじめに
こんにちは。Mikumiraiです。:sunny:
ESXiの仮想マシン向けにLANを作ろうと思ったので、VyOSで作ってみることにしました。
内部向けにLANをつくるアドバンテージといえば、WAN側のIPアドレスを食いつぶさなくてよくなるので、いちいち物理ルータとかの設定を変えたりアドレス範囲を広げなくて済むのでとても良いです。

それでは、私のESXiホストでLANを構築したときの設定例などを書いていきます。:tada:
#環境
- ESXi: 7.0U3b-18905247
- VyOS: 1.3.0-rc6

#VM構成・設定
VyOSを入れるための仮想マシンの構成は以下のとおりにしました。

1 vCPU、512MBメモリ、8GB HDD。
NICはWAN側とLAN側で1つずつ。

仮想HDDは8GB割り当てていますが、シンプロビジョニングにしてあるので、実際は500～600MBぐらい使用されています。(すごくコンパクトだよね:star2:)

#インターフェースの設定
各インターフェースにIPアドレスを割り当てます。

この場合はeth0をWAN側(Internetに繋がってるLAN)をDHCPで取得するように、
eth1は内部のLAN側(VMを繋げる)として設定しています。
>:no_entry: 本来、WAN側のIPアドレスを固定にしないのはあまり良くありませんが、
WAN側の環境が変わったときでも適応できる(?)のでこのような設定にしてみました。
~~(ルータの設定するのがめんどう)~~

```
set interfaces ethernet eth0 address 'dhcp'
set interfaces ethernet eth0 description 'WAN'

set interfaces ethernet eth1 address '172.20.0.1/16'
set interfaces ethernet eth1 description 'LAN'
```
eth1(LAN側)に割り当てるIPアドレスの範囲はあくまでも例です。
ご自身で設定するときは適切なものに変更してくださいね。

`description` は各インターフェースに説明みたいなものをつけるコマンドなので、
わけわからんくなる前に、つけておくと良いと思います。
#DHCPサーバ
今回は、172.20.0.0/16のネットワークをつくり、..1.2～..99.254の範囲をDHCPで貸し出すという割と変な感じの設定にしてみます。
他の範囲は必要になったときに備えて予約したということにしておきます。

```
set service dhcp-server shared-network-name LAN authoritative
set service dhcp-server shared-network-name LAN subnet 172.20.0.0/16 default-router '172.20.0.1'
set service dhcp-server shared-network-name LAN subnet 172.20.0.0/16 dns-server '172.20.0.1'
set service dhcp-server shared-network-name LAN subnet 172.20.0.0/16 lease '86400'
set service dhcp-server shared-network-name LAN subnet 172.20.0.0/16 range 0 start '172.20.1.2'
set service dhcp-server shared-network-name LAN subnet 172.20.0.0/16 range 0 stop '172.20.99.254'
```
1行目の`authoritative`では、「このLAN内の唯一のDHCPサーバですよー」と宣言するコマンドなので、何らかの拍子で他のDHCPサーバが生えたとしても`DHCPNAK`を送信してくれます。

4行目の`lease`は、IPアドレスのリース期間を設定するコマンドです。
リース期間は**秒単位で指定**でき、`1`～`4294967295`(約136年)まで設定することができます。
デフォルト値は`86400`(1日)です。

#DNS
単純にInternetに出るときに名前解決ができるように設定します。

```
set service dns forwarding system
set service dns forwarding allow-from '172.20.0.0/16'
set service dns forwarding listen-address '172.20.0.1'
set service dns forwarding cache-size '0'
```
1行目の`forwarding system`は、`system name-server`で設定したDNSサーバのアドレスを使用するように設定できます。
今回の設定例では、eth0(WAN側)のDHCPでDNSサーバのアドレスなどの情報も降ってくるので、system name-serverは設定していません。

4行目の`cache-size '0'`では、DNSのキャッシュエントリの最大数を指定することができます。
今回は「0」に設定しておいて、DNSサーバの実験とかでレコードをがちゃがちゃ変えるときでもキャッシュしないので便利(?)です。
キャッシュサイズのデフォルト値は`10000`で、公式ドキュメントでは`CPUのコア数 × 100万`を推奨しています。
#NAT
これも単純にLAN側からWAN(Internet側)に出られるように設定します。
SNAT、DNAT、双方向NATも設定することができます。

```
set nat source rule 10 outbound-interface 'eth0'
set nat source rule 10 source address '172.20.0.0/16'
set nat source rule 10 translation address 'masquerade'
```
1行目の`outbound-interface 'eth0'`では、アウトバウンド側にするインタフェースを指定することができます。
この設定例では`172.20.0.0/16`(LAN側)から`eth0`(WAN側)に出れるように設定しています。
#ここまでの設定まとめ
ここまでに設定したコマンドを以下にまとめておきます。

<details><summary>展開してください</summary><div>

```
set interfaces ethernet eth0 address 'dhcp'
set interfaces ethernet eth0 description 'WAN'

set interfaces ethernet eth1 address '172.20.0.1/16'
set interfaces ethernet eth1 description 'LAN'

set service dhcp-server shared-network-name LAN authoritative
set service dhcp-server shared-network-name LAN subnet 172.20.0.0/16 default-router '172.20.0.1'
set service dhcp-server shared-network-name LAN subnet 172.20.0.0/16 name-server '172.20.0.1'
set service dhcp-server shared-network-name LAN subnet 172.20.0.0/16 lease '86400'
set service dhcp-server shared-network-name LAN subnet 172.20.0.0/16 range 0 start '172.20.1.2'
set service dhcp-server shared-network-name LAN subnet 172.20.0.0/16 range 0 stop '172.20.99.254'

set service dns forwarding allow-from '172.20.0.0/16'
set service dns forwarding listen-address '172.20.0.1'
set service dns forwarding system
set service dns forwarding cache-size '0'

set nat source rule 10 outbound-interface 'eth0'
set nat source rule 10 source address '172.20.0.0/16'
set nat source rule 10 translation address 'masquerade'
```
</div></details>

#:rotating_light:お忘れなく！:bomb:
**最後に`commit`と`save`をお忘れなく！！**
#SSHで設定するときは
ESXiのコンソールなどで一行ずつコマンドを打っていくのはめんどうなので、SSHターミナルを使うとコピペできたり便利なので、VyOSのSSHサービスを設定しておくと良いです。

```
set service ssh port '22'
set service ssh listen-address 172.20.0.1
```
`port '22'`でSSH接続を受け付けるポートを、
`listen-address 172.20.0.1`でリッスンするIPアドレスを指定することができます。
この場合は、LAN側のIPアドレスからしか繋がらないはずです。

#こんな力技もできる
仮想スイッチなどの設定を適切にして、ESXiのホスト機からLANケーブルを伸ばしてスイッチなどに挿せば...あら不思議！
お手軽なんちゃってLANのできあがり！(おすすめはしません。)

---
以上になります。
みなさんもVyOSでLAN作ってみてくださいね！