【初心者向け】FRRのために Apple silicon な Mac で Ubuntu Sever を動かす

## クイックガイド（Apple Silicon, M1とか向け）
1. [Virtual Box](https://www.virtualbox.org/wiki/Downloads) のインストール
1. [Ubuntu](https://ubuntu.com/download/server/arm) のダウンロード
1. VMの作成
1. Ubuntu のセットアップ

## はじめに
M1 などの Mac で OSPF や BGP をシミュレートしたいなと思った時に、FRR を使うことにしました。

FRR をセットアップするためにはいくつかのVMが必要なので、今回はUbuntuのVMを複数台用意することにします。

:::note info
ネットワークの名前空間を利用すれば実は複数台なくてもできるのですが、初学者の方には分かりにくいかもしれないので、複数台のVMを利用することにします。
:::

## Virtual Box のインストール
今回はわかりやすさを重視し、 Virtual Box を使うことにします。もちろん他のハイパーバイザーでもOKです！

https://www.virtualbox.org/wiki/Downloads

上記のリンクをクリックし、ダウンロードします。
M1~ チップの方は、`macOS / Apple Silicon hosts`を選びましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613783/19d8f13f-7466-1360-9c2a-54baa0757368.png)

自分の Mac が Apple Silicon かどうかわからないときは、左上のリンゴマークから`このMacについて`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613783/adac65fe-85f4-4e68-6bfb-0fbac1eb63cb.png)
チップのところに`M1`とか書いてあれば Apple Silicon です。
Intel は `Intel` って書いてるあるはず。

ダウンロードした `dmg` をダブルクリックして、Virtual Box をインストールします。

## Ubuntu Server のダウンロード
LTSの最新版（緑色のボタン）をクリックしてダウンロードします。

:::note warn
Apple Silicon の方は Arm 版をダウンロードしましょう。
https://ubuntu.com/download/server/arm
:::

それ以外の方はほとんどが通常のものになると思います。
https://ubuntu.com/download/server

## VM のセットアップ
### VM とは
Virtual Box 上では、MacBookなどの実機（ホスト）の上に、仮想的な1つ1つのPC（ゲスト）を作ることができます。
この仮想PCをバーチャルマシン（VM）といいます。

- ゲストとホストは通常分離されている
    - ゲストで実行した結果や破壊はホストに通常は影響しない
        - 特別な設定を入れれば互いに影響を与えるようにすることもできる
        - ハイパーバイザーの脆弱性で分離が侵害されていることがたまにある
- ゲストはホストのリソース（メモリやCPU、ストレージなど）を利用する
    - ホストのリソースに余裕がある限り、いくつでもゲストを作ることができる

万が一ゲストを壊しても基本的にはホストには問題がないため、なんの心配もせずいろんなシミュレートをすることができます！


### VMの作成
では Virtual Box を開き「新規」ボタンから VM を作成しましょう。
`ISOイメージ` は先ほどダウンロードした Ubuntu を指定します。

サーバー版のシステムの最低要件は
- 1GB Memory
- 5GB free storage space

となっています。今回はシミュレート用で複数作るので、ギリギリを攻めたいところです。
とはいえ不安なので 2048MB, 8GB くらい割り当てておきました。

- 名前：Ubuntu1 とかわかりやすい名前
- ISOイメージ：先ほどダウンロードしたISO
- 自動インストールはスキップ
- メモリー：2048MB
- プロセッサー数：1
- ハードディスク
    - 仮想ハードディスクを作成する
    - サイズ：8GB

必ず`仮想ハードディスクを作成する` を選択しておきましょう。
名前など一通り入力したら完了して保存します。

### ネットワークアダプターの変更と追加

作成したVMを右クリックし、設定を開きます。
ネットワーク設定のアダプター1を開き、`ポートフォワーディング`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613783/0bf81d09-f25a-e556-7d0a-acf4dab5b359.png)

以下のように設定し、終わったら保存します。
- プロトコル：TCP
- ホストIP：127.0.0.1
- ホストポート：20022
- ゲストIP：（空欄）
- ゲストポート：22
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613783/50c29964-04ed-bc19-8fa9-3767e7538bb5.png)

ホストIPをループバックアドレス（127.0.0.1）にすることで、VMへのアクセスを今使っているホスト（MacBookなど）からのみに制限することができます。
（ホストIPを空欄にしておくと、同じLAN上の他のPCなどからアクセス可能になってしまいます）

次に、アダプター2を開き有効化します。

以下のように内部ネットワークにします。
終わったら保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613783/eb74fb9c-364b-1a69-b797-c5e864e6757d.png)


### Ubuntu のセットアップ

まず起動ですが、起動ボタンの横にある矢印を押し、**デタッチモード**で起動しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613783/89d34b68-aff6-7910-83b2-d441e5e9cb2a.png)

起動後は画面に従ってインストールします。初めての方に向けてざっくり書いておくと
- 起動直後は try or install を選択
- 言語は English
- without updating（後でまとめてやります）
- Layout は 自分のものを（Japaneseとか）
- それ以外は何もせず Done で

途中、画面のような警告が出ますが、これは既存のデータを破壊するかもしれない、と言うものです。
先ほどの手順で仮想ハードディスクを専用に作っておけば問題ありませんので続行します。
*他のデータに全く影響しないのが仮想マシンの利点です :)*

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613783/935b1cdc-8eb7-eeb6-87e4-31496856fa96.png)

その後、
- User name
- Password

が聞かれます。後で使いますので覚えておきます。

インストールが終わったら Reboot に変化するので、それでエンターキーを押します。
その後に `cdrom` のエラーが出たら再度エンターキーを押しましょう。

### SSH で接続
今のコンソール画面のままだと小さすぎて大変なので、なんとかしたいですね。
SSHをインストールします。

```bash
sudo apt install ssh
```

次に、**Macなど、手元の端末**を開き、以下のようにSSHで接続します。
`127.0.0.1` はポートフォワーディングのところで入力したループバックアドレス（自分自身）ですね。
```bash
MacBook-Air ~ % ssh <Ubuntuのユーザー名>@127.0.0.1 -p 20022
```
初回の場合は下記が聞かれますので `y` を入力してエンターです。
```
The authenticity of host '[127.0.0.1]:20022 ([127.0.0.1]:20022)' can't be established.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 
```
次にUbuntuセットアップの際に入力したパスワードを入力してエンターを押します。
するとSSHで接続できました。これの方が断然やりやすい！
**デタッチモードで起動していれば**、今までのUbuntu の小さい画面は閉じてしまっても構いません。`バックグラウンドで継続`を選びましょう。

### クローン
BGP などのシミュレーションは2台以上で繋いで実施します。つまりもう1台必要です。
手っ取り早くクローン（複製）します。

まず、今の Ubuntu をシャットダウンします。
```bash
sudo shutdown now
```
Virtual BoxのUbuntuのアイコンを右クリックして、`クローン`をクリックします。

:::note info
MACアドレスのポリシーは、`すべての〜生成`を選びます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613783/4007b575-a3f4-3e2d-4317-3a9c1988ad9f.png)

クローンを完了させると、全く同じものができあがります。一回セットアップしておくと、簡単に検証機を増やすことができます。

クローン後、新しい方のVM設定を開き、再びポートフォワーディングの設定を開きます。

すると、**ホストポートがクローン元と同じ 20022 になっている**と思います。それもコピーされているんですね。
重複するとエラーになるので、30022 とか少し違う値に変えておきましょう。

- プロトコル：TCP
- ホストIP：127.0.0.1
- ホストポート：30022
- ゲストIP：（空欄）
- ゲストポート：22

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613783/132b9963-8510-7c2d-a821-a3b8d99a0949.png)

これはホスト上のアドレス`127.0.0.1` の`30022`ポートで観測した通信を、ゲストの`22`ポートに転送する、と言う意味です。そのためゲストポートの設定は変更する必要はありません（SSHの接続受けは基本的に22ポートで固定です。）。

終わったらOKを押し閉じて、設定画面もOKを押して保存します。

### クローンしたVMにSSH

クローンしたVMを**ヘッドレス**モードで起動してみましょう。
こうすると、バックグラウンドでVMが起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613783/ab2fb139-d684-5766-3f4a-a1479f657a28.png)

その後、**Macなど、手元の端末**を開き、以下のようにSSHで接続します。ポート番号が変わっているのに注意です。

```bash
MacBook-Air ~ % ssh <Ubuntuのユーザー名>@127.0.0.1 -p 30022
```

接続できました！
ただ、クローンなのでホスト名すら一緒です。
紛らわしいときは変更しておきましょう。

```bash
sudo vim /etc/hostname
# 名前を変える
# 保存したあと sudo reboot
```

以上でシミュレート用のUbuntu Serverを複数台用意することができました。
次回はこちらです。

https://qiita.com/hana-chan/items/d86b3aa1ede039e4826a