ProxmoxでFortiGate VM検証環境を構築する

## はじめに
**※これは KWC Advent Calendar 2022 の2日目の記事です。**

こんにちは、[(株)KDDIウェブコミュニケーションズ](https://www.kddi-webcommunications.co.jp/)でインフラエンジニアをやっている[葛生(くずう)](https://twitter.com/h_kuzuu)と申します。初アドカレです。
今回はタイミングよく、FortiGate VMを無償のハイパーコンバージドインフラのProxmoxVE上に展開し検証環境を作ってたので、そちらのネタでQiitaに書いてみようと思います。

## なぜやろうと思った？
- FortiGate VMの評価版ライセンスの15日制限がなくなったと聞いて
- AnsibleのFortiOSモジュールを試す環境を作りたい
- 手持ちのハードウェア(FG-60C)のOSが5系までしか対応していない
- ProxmoxにFortiGate VMをデプロイする記事がQiitaにはなかったので
- 物理環境のLANケーブル差し替えを減らしたかった

## 環境、機器構成
- サーバ、Proxmox Virtual Environment 7.1-10
- FortiGate VM v7.2.3
- DHCPでIPアドレスが割り当てられるネット環境(ライセンス認証、初期設定に必要)

![nw_topology.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/77a24475-c8fb-02b3-eb0e-044c25b1a176.jpeg)

## 前提条件
- Proxmox VEの環境は構築済み
- FortiCloudからKVM版のFortigateVMイメージはダウンロード済み
- scp、ftp等でサーバ内の任意のディレクトリにqcow2ファイルを展開済み

## 構築手順

### ProxmoxのWebUI上で空のVMを作成する

ProxmoxのダッシュボードでCreate:Virtual Machine (作成: 仮想マシン)」ウィンドウを開き新規VM作成を選択していきます。
※ここで作成した仮想マシンID(VM ID:)はイメージ取り込み時に使用しますので書き取っておいてください。

![img00_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/fc5a1b7e-8431-3441-03fd-55ca4653f982.jpeg)

VMを新規作成しOSタブで「メディアを使用しない(Do not use any media)」を選択します。
![img00_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/f2614f73-b796-1c5e-7e08-f56890291b29.jpeg)

HDDはログ保存などのデータ領域として使用するのでデフォルトの32GBでそのまま作成します。
![img00_3.jp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/3eb8daf7-1825-9db5-4fa2-c9797cd9936c.jpeg)

VMが作成されると以下のような画面になります。

![img03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/97b0868a-b0a9-58db-a198-0c145efd4676.jpeg)

### VMイメージをLocal-LVMに取り込む

前提条件にあるように、Proxmox上の任意のディレクトリにKVM用のFortiGate VMイメージがアップロードされてるものとします。
![img00_0.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/6463c000-6fc8-0688-72d0-ff6513b3742c.jpeg)


ホストコンソールに移動し、`qm importdisk <vmid> fortios.qcow2 namestoragepool` コマンドを実行します。`vmid`と`fortiose.qcow2`,`namesstoragepool`の部分は環境に応じて変更してください。

```
fortios.qcow2
root@kz-pve01:/home/h_kz# qm importdisk 109 fortios.qcow2 local-lvm
```

成功メッセージを確認し、ハードウェア ダッシュボードでディスクを特定します。

```
importing disk 'fortios.qcow2' to VM 109 ...
  WARNING: You have not turned on protection against thin pools running out of space.
  WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full.
  Logical volume "vm-109-disk-2" created.
  WARNING: Sum of all thin volume sizes (1.26 TiB) exceeds the size of thin pool pve/data and the size of whole volume group (<1.09 TiB).
transferred 0.0 B of 2.0 GiB (0.00%)
transferred 21.5 MiB of 2.0 GiB (1.05%)
~ 省略 ~
transferred 2.0 GiB of 2.0 GiB (100.00%)
Successfully imported disk as 'unused0:local-lvm:vm-109-disk-2'
```
  


「Unused Disk 0 (未使用ディスク 0)」がインポートされた状態
![img01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/635b295e-ca94-c7c3-9eae-12209d781393.jpeg)

Unused Diskを追加します。「Add (追加)」をクリックすると新しい「Hard Disk (scsi2)」が表示されます。
※デフォルトで追加されている「Hard Disk (scsi 0) size=2G」は使わないので削除します。
![img02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/0989b3ad-e318-1ab0-f045-0d130eb79f03.jpeg)

先ほど追加したディスクからBootできるよう設定を変更します。
![img04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/dc507ec0-5b31-0c30-b4db-59275c2bce48.jpeg)

先ほど新たに追加したHDDを選択します。
![img05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/b2fe8ef5-10f7-7322-b98f-bb12312227d0.jpeg)

### 初回起動とデバイス認識プロセス
WebUIで仮想マシンを起動すると、新たに認識されたストレージがマウントされ再起動が走ります。
![img07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/3232b221-3e4d-ce9d-53c4-11d5aaf4c8a3.jpeg)

#### コンソールログイン
起動完了するとコンソールのログイン画面が立ち上がります。
- 初回ログインは、user: admin を入力、password: <未入力> を入力
- ログインが完了するとパスワードの変更を求められるので、任意のパスワードに変更＆確認入力

![img06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/1c864c19-afa1-eb4e-e0eb-ab4838c65057.jpeg)

#### 管理ポートのIPアドレスを確認する
起動した後に下記のコマンドを入力し管理ポートにDHCPで割り当てられているIPアドレスを確認します。
```
# get system interface physical
```
![img09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/160bd4b0-e548-a404-f0c0-7e332a83fef0.jpeg)

#### WebUIに接続する
管理ポートに割り当てられたIPアドレスをブラウザに入力しWebUIにログインします。
- ユーザー名は admin を入力
- パスワードは先ほどコンソール画面で更新したものを入力
![img08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/3970d8b5-4db3-cf2b-7d50-1603f9266c92.jpeg)

### ライセンス認証画面
**※FortiGateのライセンス認証については[nw-engineerさんの記事](https://qiita.com/nw-engineer/items/353958334b65356baa5a
)を参考にしてもらったほうがより詳しくがいてあるのでオススメです。**


![img11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/a9875a45-e93b-52fb-eb33-06cba3c59def.jpeg)

![img12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/170b7d66-351f-cb52-69ee-9b3d1f5fa56c.jpeg)

### 導入完了
![img13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003759/33df5007-362c-5bfb-72f4-b7fbf2636db9.jpeg)

## 確認された制限事項
- コア数、メモリなどはProxmox上で追加しても認識されない(既知の仕様通り)
- VPN周りはDESのみでAESなど高度な暗号化は使えない

## 所感
今回の環境は、Proxmoxに仮想マシンをインポートしたことある人なら30分もあれば構築できるくらい簡単でした。ProxmoxはデフォルトのネットワークがLinux BridgeなのでできればOpen vSwitch(OVS Bridge)をインストールして仮想NICはそちらに繋いだ方が、コンテナにFW機能を提供する際などで便利かと思います。
今回のFortiGate VMはトライアル版なのにHA構成も組めるので、構成を勉強するインフラエンジニアにとっては申し分無い機能を提供してくれていると思います。


## 参考

Fortigate VM（制限機能付き評価版）を利用するまでの流れ
https://qiita.com/nw-engineer/items/82519ed8516aabc51893

Fortigate VMトライアルライセンス永続化
https://qiita.com/nw-engineer/items/353958334b65356baa5a

## おわりに
ここまで読んで頂いた方ありがとうございました。ほぼ手順書みたいな内容でしたが、エンジニアの皆様の一助となれれば幸いです。
[KWC Advent Calendar 2022](https://qiita.com/advent-calendar/2022/kwc) はまだまだ続きます！明日もお楽しみに！！