Cumulus Linuxを使ったネットワーク構築(導入編)

# はじめに
この記事は、[MicroAd Advent Calendar 2017](https://qiita.com/advent-calendar/2017/microad)の16日目の記事です。

MicroAdでは、ホワイトボックススイッチと[Cumulus Linux](https://www.cumulusnetworks.com/)を使ってネットワークの一部を構成しています。
今日から何回かに分けて、構築した際の設定方法などを少し公開します。

今回は、Cumulus Linuxの導入部分を書いていきます。
自動化している箇所も、あえて手動での設定方法を書いてますが、
今後の記事で自動化についても書いていく予定です。

# 完成予定図
![spine-leaf.jpg](https://qiita-image-store.s3.amazonaws.com/0/20794/8e847845-d976-4130-d010-1a70b3442c7d.jpeg)

- Spine-Leaf間は、10Gを4本束ねて40Gbpsで接続
- Spine-Leaf間は、eBGP(unnumberd)で設定
- メンテナンス性を考慮しLeaf01,02とLeaf03,04でセットとし、サーバのNICをbondingする

# 必要なもの
1. ホワイトボックススイッチ（6台） 
2. Cumulus Linuxのライセンス
3. ネットワークケーブル
4. 設置する場所

# インストール
## インストール環境の準備
DHCPサーバを使って、Cumulus Linuxをネットワークインストールする環境の準備します
LinuxをPXEインストールする際には、DHCP+TFTPが必要ですが、
ONIEは後述するDHCPのオプションに従ってOSイメージをHTTPダウンロード可能です。
その為、インストール環境で必要なものはDHCPサーバとHTTPサーバのみです。

### HTTPサーバの設定
設定方法は割愛します。この後配置するCumulus Linuxのイメージが
HTTPでダウンロードできるようになっていればOKです。

### Cumulus Linuxイメージを配置
Cumulus Linuxのイメージを[ダウンロードサイト](https://cumulusnetworks.com/downloads/#product=Cumulus Linux)から落としてきます。
※事前にアカウントを作成しておく必要があります。
ONIEでインストールする場合、ファイル名を”onie-installer-x86_64”にして
ファイルをHTTPでダウンロードできる場所に保存します。

```test:配置例
/var/www/html/cumulus/os/onie-installer-x86_64
```

### DHCPサーバの設定
dhcpd.confの設定を行い、Cumulusインストール用のオプションを追記しておきます。

```text:/etc/dhcp/dhcpd.conf
subnet 10.0.0.0 netmask 255.255.255.0 {
    pool {
        range 10.0.0.10 10.0.0.240;
    }
    option default-url = "http://10.0.0.1/cumulus/os/onie-installer-x86_64";

}
```

optionで、default-urlにイメージファイルのURLを指定するだけです。
設定変更後、dhcpdを再起動して反映させます。

## Cumulus Linuxのインストール
ここまでの準備ができていればインストールは簡単

1. スイッチのマネージメントポートをDHCPサーバと同じセグメントのネットワークに接続します
2. 電源ON！**あとは待つだけ！**
3. DHCPサーバからIPを取得して、オプションで設定したURLからOSをダウンロード
4. インストーラーがイメージを展開（インストール）して、勝手に再起動

インストールが完了すると、デフォルトで”cumulus”ユーザでログイン可能です。
デフォルトのパスワードは”CumulusLinux!”になっています。
管理者権限が必要な場合はsudoで対応できるように初期状態では設定されています。
また、ライセンスを投入するまではフロントのポートは接続できません。


# 設定
## 基本的な設定
この部分は**Debian系の設定方法と同じ**です。
設定をスクリプト化して、DHCPのオプション項目でインストール時に読み込ませることも可能です。
スクリプト化と具体的な設定方法は次回以降で記述します。

### マネージメントポートの設定
まずはマネージメントポートの設定を行います。
マネージメントポートは、eth0として認識されるので、
/etc/network/interfacesファイルを編集してeth0の記述を行うことで設定できます。

```
cumulus@cumulus$ sudo vi /etc/network/interfaces
```
```text:/etc/network/interfaces
auto eth0
iface eth0
  address 10.0.0.10/24
  gateway 10.0.0.1
```

設定を反映

```
cumulus@cumulus$ sudo ifreload -a
```

### ホスト名の設定
#### ホスト名をspine01に変更
hostnameコマンドと、/etc/hostnameを変更することでホスト名を変更できます。

```
cumulus@cumulus$ sudo hostname spine01
```

再起動後も戻らないように/etc/hostnameを変更しておきます。

```text:/etc/hostname
cumulus@spine01$ echo "spine01" > /etc/hostname
```

### Timezone,NTPの設定
####TimezoneをAsia/Tokyo（JST）に変更
ログ等の調査時に、時刻がUTCになってると不便なので、
Timezoneを変更します。

```
cumulus@spine01$ echo "Asia/Tokyo" > /etc/timezone
cumulus@spine01$ sudo dpkg-reconfigure --frontend noninteractive tzdata
```

####NTPの設定
Timezoneの設定同様に、NTPを設定して時刻同期します
/etc/ntp.confを設定して、ntpdを起動します

```text:/etc/ntp.conf
### Cumulus Switch
driftfile /var/lib/ntp/ntp.drift

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

server 10.0.0.1 iburst

restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopper noquery

restrict 127.0.0.1
restrict ::1
```

```CumulusLinux2.5系の場合
cumulus@spine01$ sudo /etc/init.d/ntp restart
```

```CumulusLinux3.3系の場合
cumulus@spine01$ sudo systemctl restart ntp.service
```

### resolv.confの設定
resolv.confにnameserverのIPアドレスを設定します

```text:resolv.conf
cumulus@spine01$ sudo echo "nameserver 10.0.0.1" > /etc/resolv.conf
```

### ライセンスの投入
ライセンスを投入しないと肝となるswitchdが起動できないので、このタイミングで投入します。
なお、switchdが起動できないと、フロントのポートにはアクセスできません。
ここでは、/root/license.txtにライセンス情報を保存してそのファイルを読み込んでいます。

```
cumulus@spine01$ sudo cl-license -i /root/license.txt
```

**ここまで設定したらスイッチを再起動**

```
cumulus@spine01$ sudo reboot
```

再起動すると、switchdが起動してフロントのポートにアクセスできるようになります。

# 今回のまとめ
今回はCumulus Linuxの導入部分を書いてみました。
基本的にはDebianベースなので、ここまでの基本的な導入部分の設定は、
Linuxに慣れている人なら簡単にセットアップができると思います。
次回は、フロントポートの設定とL2のセットアップについての記事を書いていく予定です。