VyOS を使ってみる

# 前書き
Vyatta (VyOS) を使って簡単な動作確認をしたいと思います。
インストール手順や、動作確認に際しては下記サイトの内容を参考にさせていただきました。

https://changineer.info/network/vyatta/vyatta_os_install.html

VyOS 1.4.x sagitta の公式ドキュメント (Users Guide) は下記で参照可能です。

https://docs.vyos.io/en/latest/

# 環境
自宅の ESXi 7.0 環境を利用します。

# インストール
[vyos.io](https://vyos.io/) から ISO イメージをダウンロードし、仮想マシンにマウントします。
仮想マシンは、下記サイジングで構成。

| 構成 | サイズ |
|:-:|:-:|
| CPU | 1 vcpu |
| Memory | 1GB |
| HDD | 4GB |

仮想マシンに設定するゲストOSの種類は、「Debian 64bit」を選択しておけば大丈夫です。
私は、選択可能な中で最新の「Debian GNU/Linux 11 (64bit)」を選択しました。

[https://vyos.io/solutions/vyos-on-vmware](https://vyos.io/solutions/vyos-on-vmware)
> VyOS is a Debian GNU/Linux-based network OS ～ 


ISO イメージから起動すると、vyos が起動します。
アカウント/初期パスワードは、**vyos** / **vyos** でログイン可能です。

ISO イメージをディスクにインストールするには **install image** コマンドを実行して、対話形式でインストール作業を進めます。

```
VYOS@vyos:~$ install image ▼
```

インストールが終わったら、 **poweroff** コマンドでシャットダウンできます。

```
VYOS@vyos:~$ poweroff ▼
```

# 設定の確認
現在の設定状況を一覧で確認するには、**show configuration** コマンドで確認できます。
初期設定では、下記のように設定されています。
```
vyos@vyos:~$ show configuration ▼
interfaces {
    ethernet eth0 {
        hw-id 00:50:56:8d:fe:9c
    }
    ethernet eth1 {
        hw-id 00:50:56:8d:a7:86
    }
    ethernet eth2 {
        hw-id 00:50:56:8d:0e:77
    }
    ethernet eth3 {
        hw-id 00:50:56:8d:fa:5d
    }
    loopback lo {
    }
}
system {
    config-management {
        commit-revisions 100
    }
    conntrack {
        modules {
            ftp
            h323
            nfs
            pptp
            sip
            sqlnet
            tftp
        }
    }
    console {
        device ttyS0 {
            speed 115200
        }
    }
    host-name vyos
    login {
        user vyos {
            authentication {
                encrypted-password ****************
                plaintext-password ****************
            }
        }
    }
    ntp {
        server time1.vyos.net {
        }
        server time2.vyos.net {
        }
        server time3.vyos.net {
        }
    }
    syslog {
        global {
            facility all {
                level info
            }
            facility protocols {
                level debug
            }
        }
    }
}
vyos@vyos:~$
```
**show configuration commands** を実行すると、set文の形式で設定の一覧を表示します。
```
vyos@vyos:~$ show configuration commands
set interfaces ethernet eth0 hw-id '00:50:56:8d:fe:9c'
set interfaces ethernet eth1 hw-id '00:50:56:8d:a7:86'
set interfaces ethernet eth2 hw-id '00:50:56:8d:0e:77'
set interfaces ethernet eth3 hw-id '00:50:56:8d:fa:5d'
set interfaces loopback lo
set system config-management commit-revisions '100'
set system conntrack modules ftp
set system conntrack modules h323
set system conntrack modules nfs
set system conntrack modules pptp
set system conntrack modules sip
set system conntrack modules sqlnet
set system conntrack modules tftp
set system console device ttyS0 speed '115200'
set system host-name 'vyos'
set system login user vyos authentication encrypted-password '$6$bKeetMhEI.EFpc1A$FK2uXSnbslJ7CjedIQJad1Yskq1uve2FzZdh/OFj99RKTO3ZsPConnj2mFOu7macCAEeIB98vyFRwP.mVBMYw.'
set system login user vyos authentication plaintext-password ''
set system ntp server time1.vyos.net
set system ntp server time2.vyos.net
set system ntp server time3.vyos.net
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'
vyos@vyos:~$
```

# 初期設定
### Configuration mode への移行
設定変更するには、**configuration mode** へ移行します。
```
vyos@vyos:~$ configure ▼
[edit]
vyos@vyos# 
```
**exit** で通常のモードに戻れます。
```
vyos@vyos# exit ▼
exit
vyos@vyos:~$
```

### 使用可能なコマンドの一覧表示
タブキーで補完が可能ですので、コマンドプロンプトでタブキーを押下するとコマンド一覧が表示されます。
```
vyos@vyos:~$ [タブキーを押下]
Possible completions:
  add                   Add an object to a service
  clear                 Clear system information
  clone                 Clone an object
  configure             Enter configuration mode
  connect               Establish connection
  copy                  Copy an object
  delete                Delete an object
  disconnect            Take down a connection
  force                 Force an operation
  format                Format a device
  generate              Generate an object
  import                Import an object
  install               Install a new system
  monitor               Monitor system information
  ping                  Send Internet Control Message Protocol (ICMP) echo request
  poweroff              Poweroff the system
  reboot                Reboot the system
  release               Release specified variable
  rename                Rename an object
  renew                 Renew specified variable
  reset                 Reset a service
  restart               Restart individual service
  set                   Set operational options
  show                  Show system information
  telnet                Telnet to a node
  traceroute            Trace network path to node
  update                Update data for a service
  wake-on-lan           Send Wake-On-LAN (WOL) Magic Packet


vyos@vyos:~$
```

### IPアドレスの設定
IPアドレスは、**set** interfaces ethernet コマンドで設定できます。
```
vyos@vyos# set interfaces ethernet eth0 address '192.168.1.104/24' ▼
```
逆に設定を削除するときは、**delete** interfaces ethernet コマンドで設定を削除できます。
```
vyos@vyos# delete interfaces ethernet eth0 address '192.168.1.104/24' ▼
```

### SSH の有効化 (オプション)
SSH を有効にするには、下記を実行します
```
vyos@vyos# set service ssh ▼
[edit]
vyos@vyos#
```

### デフォルトゲートウェイの設定 (オプション)
例えば、**192.168.1.254** を Next hop としてデフォルトゲートウェイを設定する場合は、下記のように設定します。
```
vyos@vyos# set protocols static route 0.0.0.0/0 next-hop 192.168.1.254 ▼
```

### ホスト名の変更 (オプション)
ホスト名は、**set system host-name** コマンドで変更できます。
```
vyos@vyos# set system host-name hostname.subdomain.com ▼
```

### ユーザの追加作成 (オプション)
デフォルトのvyosユーザ以外でユーザ作成するには、**set system login user** コマンドで追加します。
下記はユーザ名を「hoge」、パスワードを「P@ssw0rd」で作成した例です。
```
vyos@vyos# set system login user hoge authentication plaintext-password P@ssw0rd ▼
```

### 設定の反映
**compare** コマンドで、未反映の設定をdiff形式で確認できます。
```
vyos@vyos# compare ▼
 :
```

最後に **commit** コマンドで設定を反映させ、**save** コマンドでディスクに設定を保存します。
```
vyos@vyos# commit ▼
[edit]
vyos@vyos# 
vyos@vyos# save ▼
Saving configuration to '/config/config.boot'...
Done
[edit]
vyos@vyos# 
```

ちなみに、設定を反映させずに破棄する場合は、commit ではなく **discard** コマンドを実行します。
```
vyos@vyos# discard ▼
 
  Changes have been discarded
 
[edit]
vyos@vyos# 
```

# L2ブリッジ設定
## 構成イメージ
下記のようなネットワーク構成で vm1 と vm2 のネットワークを繋ぐ L2ブリッジ を構成します。

```
+---------+        +-------------+       +---------+ 
|   vm1   |        |   VyOS      |       |   vm2   |
|         |        | eth1   eth2 |       |         |
+----+----+        +--+------+---+       +----+----+
     |.31             |      |                |.32
     |                |      |                |       192.168.1.0/24
 ----+----------------+-    -+----------------+----------------------
             vSwitch1                  vSwitch2   
```

:::note alert
**ネットワークのループに注意**
上記例では、eth1 と eth2 を別々の仮想スイッチ(vSwitch1/vSwitch2) に接続しています。
eth1 と eth2 で Bridge を構成し、且つ、eth1 と eth2 を同じ仮想スイッチに接続してしまった場合はループの構成となり、大量のトラフィックが流れるためネットワークがダウンします。
ループ構成とならないよう、くれぐれもご注意ください。
:::

:::note info
留意事項
仮想スイッチでは、無差別モード (promiscuous mode) を有効にしておいてください。
:::

## 1. Bridge の作成
Bridge は **set interfaces bridge** コマンドで作成します。
Bridge名は、brXXX という命名規則で作成する必要があります。

```
vyos@vyos# set interfaces bridge [タブキー押下]
Possible completions:
 > brN ★               Bridge interface name 
 >


[edit]
vyos@vyos#
```

ここでは、**br00** という名称とします。
```
vyos@vyos# set interfaces bridge br00
```

次に、作成したBridge **br00** にインタフェースをメンバーとして登録します。

```
vyos@vyos# set interfaces bridge br00 member interface eth1
vyos@vyos# set interfaces bridge br00 member interface eth2
```

**show configuration** コマンドでは、該当設定部分は下記のように見えます。

```
interfaces {
    bridge br00 {
        member {
            interface eth1 {
            }
            interface eth2 {
            }
        }
    }
    ethernet eth0 {
        address 192.168.1.10/24 ※これはSSH接続用に設定しているので任意で。
        hw-id 00:50:56:8d:fe:9c
    }
    ethernet eth1 {
        hw-id 00:50:56:8d:a7:86
    }
    ethernet eth2 {
        hw-id 00:50:56:8d:0e:77
    }
    ethernet eth3 {
        hw-id 00:50:56:8d:fa:5d
    }
    loopback lo {
    }
}
```

仮想スイッチは、下記のように構成しています。
VyOS は、eth1 を Closed_pg-1 に、eth2 を Closed_pg-2 に接続しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873527/75168a9f-1bf8-7cfb-49c2-f3eefcae16b0.png)

### 2. 動作確認
:::note info
留意事項
Windows 端末同士で Ping 疎通確認を行う場合は、ファイアウォール設定で **受信の規則** にて「**ファイルとプリンターの共有 (エコー要求 - ICMPv4受信)**」を**有効化**しておいてください。
:::

ping にて正常に Bridge 経由で疎通確認できました。
これで vSphere HA や vSAN などのスプリットブレインの動作検証などが出来ますね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873527/1481f6d0-1c81-403e-a424-952c06684562.png)