【2023年8月版】VyOSを使ったESXi内ルーティング

# はじめに

ESXi内部、複数PortGroup間で通信したいな。。。
そうだ、VyOSでESXiにルーター構築しよう！


（いままで、Ubuntu22.04のiptablesでNATやNAPTしてたけど、
ルーターOS使ってみたかったというのが本音）

# 目的

VyOSをルータとして、ESXiのPortGroup間で通信できる、インターネットに接続できるように構築する

# 環境

インターネット接続ネットワークは `192.168.0.0/24`
デフォルトゲートウェイは `192.168.0.1`
内部ネットワークは2つ `Inner10(VLAN110): 10.10.10.0/24`、`Inner20(VLAN120): 10.10.20.0/24` を PortGroup として用意する
内部ネットワークからインターネット接続ネットワークへは VyOS上で、NAPT(IPマスカレード) を使用
EXSi上でVyOS1.3をインストールし、`vyos01` とする
VyOSのインストールは以下の記事を参照
  →　[【2023年8月版】VyOSインストールiso作成から、ESXi7/8へのインストール](https://qiita.com/nouernet/items/a41b40dad2efea7b0efc)
`vyos01` 上には、インターネット接続ネットワークとして `eth0`、内部ネットワークとして `eth1`, `eth2` を割り当てる
ユーザは `vyos` を利用
DNSは `Google(8.8.8.8)` を利用
NTPは `ntp.nict.jp` を利用
IPv6は利用しない

```plantuml
@startuml
cloud "internet" as internet
rectangle "home network (192.168.0.0/24)" {
node "宅内ルーター\n192.168.0.1" as home_router
node "宅内PC\n192.168.0.X" as home_pc
rectangle "ESXi" as esxi {
  node "VyOS(vyos01)\neth0:192.168.0.10\neth1:10.10.20.254\neth2:10.10.20.254" as vyos01
  rectangle "内部ネットワーク1\nPortGroup inner10\n10.10.10.0/24" as inner_network1{
    node "Ubuntu22.04(host01)\n10.10.10.10" as host01
    node "Alpine3.18(host02)\n10.10.10.11" as host02
    node "Redhut9.2(host03)\n10.10.10.12" as host03
  }
  rectangle "内部ネットワーク2\nPortGroup inner20\n10.10.20.0/24" as inner_network2 {
    node "Ubuntu22.04(host04)\n10.10.20.10" as host04
    node "Alpine3.18(host05)\n10.10.20.11" as host05
    node "Redhut9.2(host06)\n10.10.20.12" as host06
  }
}
}
home_router -- internet
vyos01 -- home_router : eth0\n\n\n
home_pc - home_router
inner_network1-- vyos01 : \n\neth1
inner_network2-- vyos01 : \n\neth2
@enduml
```

# インターフェイスの設定

eth0, eth1, eth2 にIPアドレスを設定
デフォルトゲートウェイを設定
DNSを設定

```terminal
$ conf
# set system host-name vyos01
# set interfaces ethernet eth0 address 192.168.0.10/24
# set interfaces ethernet eth1 address 10.10.10.254/24
# set interfaces ethernet eth1 address 10.10.20.254/24
# set protocols static route 0.0.0.0/0 next-hop 192.168.0.1
# set system name-server '8.8.8.8'
# commit
# save
# exit
```

# IPv6の無効化

```terminal
$ conf
# set system ipv6 disable
# commit
# save
# exit
```

# タイムゾーンの設定

```terminal
$ conf
# set system time-zone 'Asia/Tokyo'
# commit
# save
# exit
```

# SSH の設定

ssh を有効化
ssh のポートを変更
vyos ユーザの公開鍵を設定
vyos ユーザの公開鍵を ssh-rsa に設定
ssh のパスワード認証を無効化

```terminal
$ conf
# set service ssh
# set service ssh port 20221	
# set system login user vyos authentication public-keys 'admin' key 'AAA...='
# set system login user vyos authentication public-keys 'admin' type 'ssh-rsa'
# set service ssh disable-password-authentication
# commit
# save
# exit
```

# NAPT(IPマスカレード) の設定

NAPTの外側インターフェイスを eth0 に設定
受け付けるアドレスを設定
マスカレードを設定

```terminal
$ conf
# set nat source rule 1 outbound-interface eth0
# set nat source rule 1 source address 10.10.10.0/24
# set nat source rule 1 translation address masquerade 
# set nat source rule 2 outbound-interface eth0
# set nat source rule 2 source address 10.10.20.0/24
# set nat source rule 2 translation address masquerade 
# commit
# save
# exit
```

# NAT の設定（必要であれば）

SSHを ProxyCommand で多段接続できるなら必要ない
NATの内側インターフェイスを eth0 に設定
受け付けるポートを設定
受け付けるプロトコルを設定
転送先アドレスを設定
転送先ポートを設定

```terminal
$ conf
# set nat destination rule 2 inbound-interface 'eth0'
# set nat destination rule 2 destination port '22'
# set nat destination rule 2 protocol 'tcp'
# set nat destination rule 2 translation address '10.10.10.10'
# set nat destination rule 2 translation port '22'
# commit
# save
# exit
```

# NAT の状況確認

```terminal
$ show nat source translations detail
$ show nat destination translations detail
```

# NTP の設定

```terminal
$ conf
# delete system ntp server
# set system ntp server ntp.nict.jp
# commit
# save
# exit
$ show ntp
```

# 静的ホストマッピング

/etc/hostsに記入と同じく、IPアドレスとホスト名をマッチングさせる
ここでは `host1` を `192.168.0.101` にマッピング
```terminal
$ conf
# set system static-host-mapping host-name host1 inet 10.10.10.10
# set system static-host-mapping host-name host2 inet 10.10.10.11
# set system static-host-mapping host-name host3 inet 10.10.10.12
# set system static-host-mapping host-name host4 inet 10.10.20.10
# set system static-host-mapping host-name host5 inet 10.10.20.11
# set system static-host-mapping host-name host6 inet 10.10.20.12
# commit
# save
# exit
```

# 静的ルーティング

```terminal
$ conf
# set protocols static route 10.10.10.0/24 next-hop 10.10.10.254
# set protocols static route 10.10.20.0/24 next-hop 10.10.20.254
# commit
# save
# exit
```

# 構成のバックアップとレストア

- 手動によるバックアップとレストア
- save / load コマンドによるバックアップとレストア

## 手動によるバックアップとレストア
### バックアップ
```terminal
$ show configuration commands > configuration.20230809
```
### レストア
```terminal
$ conf
#
configuration.20230809の内容をペースト
 :
 :
# commit
# save
# exit
```
## save / load コマンドによるバックアップとレストア
### バックアップ
```terminal
$ conf
# save configuration.20230809
# exit
```
### レストア
```terminal
$ conf
# load configuration.20230809
# exit
```

# さいごに

かんたんでしたね