Cloudflare Magic WAN と FITELnet をつなぐ

公式ページによると、[Cloudflare Magic WAN](https://www.cloudflare.com/ja-jp/network-services/products/magic-wan/) とは

> 従来のWANアーキテクチャをCloudflareネットワークに置き換え、グローバルな接続、クラウドベースのセキュリティ、パフォーマンス、制御を1つのシンプルなユーザーインターフェイスで実現します。

ということで、[主な特徴](https://blog.cloudflare.com/ja-jp/magic-wan-firewall-ja-jp/)としては

- 地球上に点在する自分の組織の端末たちを、縦横無尽に通信させる
    - East/West プライベートネットワーク間の接続と制御
        - Cloudflare バックボーン上につくられる組織のプライベート空間
        - Cloudflare バックボーン上の高速転送
        - 拠点間通信の許可・拒否の制御やゴミパケットを捨てるIDSなどの[ファイアウォール機能](https://www.cloudflare.com/ja-jp/network-services/products/magic-firewall/)
    - South/North インターネットへの乗り入れ口
        - 下記のようなオプションと組み合わせ、組織の端末たちをインターネットを介してパブリックやプライベートなリソースにつなげる
        - [組織専用のインターネット向けセキュリティポリシー](https://www.cloudflare.com/ja-jp/zero-trust/products/gateway/)（DNSやHTTP、L3トラフィックの制御）
        - [組織の秘匿なリソースへの認証認可](https://www.cloudflare.com/ja-jp/zero-trust/products/access/)
- Simple/Global 地球上どこの拠点でも同じ構成
    - 拠点から Cloudflare までは地球上 95% のインターネット接続人口が 50ms 以下で接続する[近さ](https://blog.cloudflare.com/speed-week-2023-network-performance-update/)
        - ザックリ測るのであれば拠点から ping 1.1.1.1 の RTT を半分に割ってみる
        - ちなみに執筆中の東京での手元ISPだと 2ms!
    - トンネル対向のIPアドレスは地球上で同じ（[エニーキャストIPSec](https://blog.cloudflare.com/ja-jp/anycast-ipsec-ja-jp/)）
        - 共通化でルーターの設定管理がより楽、ミス軽減
    - お客様側のルータやファイアウォールを[ベンダーを問わず](https://developers.cloudflare.com/magic-wan/third-party/)接続
- 上記のサービスが Cloudflare 各都市、各データセンターの各サーバーで共通に動作するという統合された[アーキテクチャ](https://www.cloudflare.com/ja-jp/cloudflare-one/)
    - そのアーキテクチャが生む管理のしやすさ、設定反映の速さ
    - 多くのセルフサーブ利用実績で鍛え上げられるダッシュボードと API

などがあるかと思います。

本記事では、そんな Magic WAN と[古河電気工業株式会社製 FITELnet](https://www.furukawa.co.jp/fitelnet/)との接続情報を記載します。
[古河ネットワークソリューション株式会社](https://www.fnsc.co.jp/)から寄稿いただきました。誠にありがとうございます。

別途、Magic WAN の説明および Vyos の接続例については、[こちらの記事](https://qiita.com/khayama/items/20a0b49458a2296f92dc)もありますので、ぜひご参照ください。

なお、本記事の範囲外ではありますが、FITELnet とはゼロタッチプロビジョニング（FITELnet に電源投入で自動的に Magic WAN に接続してくれる）の相互接続検証を [Interop Tokyo 2022](https://www.interop.jp/2022/) で実施してたりもします。このあたりもご興味があれば[お問い合わせ](https://www.cloudflare.com/ja-jp/plans/enterprise/contact/)ください。

それではチュートリアルをどうぞ。
（下記の内容は、予告なく変更されることがあります）

# 古河電気工業　FITELnet
このチュートリアルは、古河電気工業製の FITELnet [F220シリーズ](https://www.furukawa.co.jp/fitelnet/product/f220/)、[F70シリーズ](https://www.furukawa.co.jp/fitelnet/product/f70/)と、Cloudflare Magic WAN との間で IPsecトンネルを確立し、Magic WAN をバックボーンネットワークとしたLAN間接続を構成する設定例です。

![FITEL-Cloudflare.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/cd2a9f00-ceea-a4d2-07ae-56f416c2aa94.jpeg)

---

## IPsecの設定
まず、IPsecトンネルを構成します。

### Magic WAN設定
Cloudflare Magic WANのコンソールで、IPsecのトンネルを生成します。
サイドメニュー【Magic WAN】を選択し、メイン画面の、Magic WAN構成の管理の【設定】をクリックして、トンネルの作成画面に遷移します。
【＋作成】をクリックして、IPsecトンネルの生成を行います。

![MagicWan-Potal1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/232b1657-f7c5-3671-61dd-27a620f658c3.jpeg)


IPsecトンネルを選択して、【次へ】をクリックします。
![MagicWan-Potal2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/ea01b9d0-230e-cd27-556d-29e7033d02b8.jpeg)


| 設定項目               | 内容                                                                                                             | 設定例１                                    | 設定例２                            |
| ------------------ | -------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ------------------------------- |
| トンネル名              | トンネルの名称を設定する                                                                                                   | FITEL-tunnel-1                          | FITEL-tunnel-2                  |
| 説明                 | 生成したトンネルの説明                                                                                                    | IPsec tunnel with FITELnet No.1         | IPsec tunnel with FITELnet No.2 |
| インタフェースアドレス        | トンネルインタフェースのIPアドレス。Magic WAN側につけるIPアドレス。<br>FITEL側は同じサブネットの別のアドレスを設定する                                          | 10.0.0.1/31                             | 10.0.0.3/31                     |
| カスタマーエンドポイント       | FITEL側のグローバルインタフェースにつけるIPアドレス                                                                                  | xxx.xxx.xxx.xxx                         | yyy.yyy.yyy.yyy                 |
| Cloudflare エンドポイント | Cloudflareから提示されたエニーキャストアドレス                                                                                   | anycast-address                         | anycast-address                 |
| 事前共有キー             | 事前共有キーを設定する。<br>Cloudflareサービスで生成される事前共有キーを使う場合は、「事前共有キーを後で追加する」を選択<br>独自の事前共有キーを使用する場合は「独自の事前共有キーを使用する」を選択する。 | 独自の事前共有キーを使用する<br>secret-pre-shared-key-1 |      独自の事前共有キーを使用する<br>secret-pre-shared-key-2                           |

同様に、もう一方のIPsecトンネルも生成します。

### FITELnetルータ設定
以下のように、FITELnetルータの設定をします。
```
interface Tunnel 1
 ip address 10.0.0.0 255.255.255.254
 tunnel mode ipsec map MAP1
 link-state sync-sa
exit
!

crypto ipsec policy IPsec_POLICY
 set security-association always-up
 set security-association lifetime seconds 28800
 set security-association transform-keysize aes 256 256 256
 set security-association transform esp-aes esp-sha256-hmac
 set mtu 1460
 set mss 1350
 set ip df-bit 0
 set ip fragment post
 set udp-encapsulation nat-t keepalive interval 30 always-send
exit
!
crypto ipsec selector SELECTOR
 src 1 ipv4 any
 dst 1 ipv4 any
exit
!
crypto isakmp keepalive
crypto isakmp log sa
crypto isakmp log session
crypto isakmp log negotiation-fail
crypto isakmp negotiation always-up-params interval 100 max-initiate 10 max-pending 10 delay 1
crypto ipsec replay-check disable
!
crypto isakmp policy ISAKMP_POLICY
 authentication pre-share
 encryption aes
 encryption-keysize aes 256 256 256
 group 14
 lifetime 14400
 hash sha sha-256
 initiate-mode main
exit
!
crypto isakmp policy P1-POLICY
 authentication pre-share
 encryption aes
 encryption-keysize aes 256 256 256
 group 14
 lifetime 14400
 hash sha sha-256
 initiate-mode main
exit
!
crypto isakmp profile PROF1
 local-address x.x.x.x
 self-identity address x.x.x.x
 set isakmp-policy ISAKMP_POLICY
 set ipsec-policy IPsec_POLICY
 set peer anycast-address
 ike-version 2
 local-key secret-pre-shared-key-1
exit
!
crypto map MAP1 ipsec-isakmp
 match address SELECTOR
 set isakmp-profile PROF1
exit
!
```

同様に、もう一方のFITELnetルータも設定します。

---

## 経路（スタティックルート）の設定
LAN間接続するための経路設定をします。

## MagicWAN設定
Cloudflare Magic WANのコンソールで、スタティックルートを生成します。
サイドメニュー【Magic WAN】を選択し、メイン画面の、Magic WAN構成の管理の【設定】をクリックして、トンネルの作成画面に遷移します。画面上部の「スタティックルート」タブをクリックします。
【＋作成】をクリックして、IPsecトンネルの生成を行います。
![MagicWan-Potal3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/7e625952-cd66-2489-f116-cfc1c17563e3.jpeg)

![MagicWan-Potal4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/a3462bc7-9d3a-8c9a-ccb8-ceb002e87475.jpeg)


| 設定項目         | 内容                        | 設定例１                     | 設定例２                      |
| ------------ | ------------------------- | ------------------------ | ------------------------- |
| 説明           | 生成したスタティックルーティング経路の説明     | FITEL-route-1            | FITEL-route-2             |
| プレフィックス      | トンネルの先のプレフィックス情報          | 192.168.0.0/24           | 192.168.1.0/24            |
| トンネル/ネクストホップ | 指定したプレフィックスへのトンネルを選択      | FITEL-tunnel-1 - 10.0.0.0 | FITEL-tunnel-2 - 10.0.0.2 |
| 優先順位         | 同一宛先への経路の優先順位             | 100                      | 100                       |
| ウェイト         | ECMP（優先順位を同じに設定）した際の、ウェイト | なし                       | なし                        |
| リージョンコード     | 適用するリージョン                 | すべてのリージョン                | すべてのリージョン                   |


同様に、もう一方のスタティックルートも生成します。

### FITELnetルータ設定
以下のように、FITELnetルータの設定をします。
```
ip route 192.168.1.0 255.255.255.0 tunnel 1
```
同様に、もう一方のFITELnetルータも設定します。

---

## 接続確認
### IPsec確立確認
FITELnetルータのCLIで、show crypto sa を実行し、IPsecの確立状態を確認することができます。<br>Total number of ISAKMP/IPSEC SA に、確立しているSAの数が表示されます。

```
#show crypto sa

  IKE_SA
    Mode: <I>
    Local IP : xxx.xxx.xxx.xxx/500
    Local ID : xxx.xxx.xxx.xxx (ipv4)
    Remote IP : anycast-address/500
    Remote ID : anycast-address (ipv4)
    Local Authentication method : Pre-shared key
    Remote Authentication method : Pre-shared key
    Encryption algorithm : aes256-cbc
    Hash algorithm : hmac-sha256-128
    Diffie-Hellman group : 14 (2048 bits)
    Initiator Cookie : aaaaaaaa bbbbbbbb
    Responder Cookie : cccccccc dddddddd
    Life time : 6852/14400 sec
    DPD : on

  CHILD_SA <I>
    Selector :
      0.0.0.0/0 ALL ALL <---> 0.0.0.0/0 ALL ALL
    Interface : tunnel 1
    Peer IP : anycast-address/500
    Local IP : xxx.xxx.xxx.xxx/500
    Encryption algorithm : AES-CBC/256
    Authentication algorithm : HMAC-SHA2-256
    Life time : 22868/28800 sec
    PFS : off ESN : off
    IN
      SPI : eeeeeeee
      Packets       : 0
      Octets        : 0
      Replay error  : 0
      Auth error    : 0
      Padding error : 0
      Rule error    : 0
    OUT
      SPI : ffffffff
      Packets       : 0
      Octets        : 0
      Seq lapped    : 0

  Total number of ISAKMP SA 1
  Total number of IPSEC SA 1
```

### 経路登録確認
FITELnetルータのCLIで、show ip route を実行し、経路情報を確認することができます。 <br>経路情報に '*'が表示されている場合は、経路情報が有効であることを表します。
```
#show ip route

Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       B - BGP, T - Tunnel, i - IS-IS, V - VRRP track,
       Iu - ISAKMP SA up, It - ISAKMP tunnel route, Ip - ISAKMP l2tpv2-ppp
       Dc - DHCP-client, L - Local Breakout
       > - selected route, * - FIB route, p - stale info

<snip>
S > * 192.168.1.0/24 [100/0] is directly connected, Tunnel1
<snip>
#
```

## 確認ファームウェア版数
F220シリーズ：Version 01.11(00)
F70シリーズ：Version 01.09(00)