Fortigate(6.0.5)でフレッツ光ネクストのIPv6（NonInternet）経由でVPNを張ってみる

## やりたいこと
NTT西日本管内の2箇所にあるフレッツ光ネクスト回線を使って，フレッツ網内のIPv6だけで，Site-to-SiteのIPsec VPN(v4 over v6)を張ってみる。
## 環境
- 拠点1:
フレッツ光ネクスト隼，ISPのIPoEオプションを使ってグローバルIPv6の世界を泳げる。
- 拠点2:
フレッツ光ネクストマンション対応，ISPのIPoEオプション無し，フレッツ払い出しのIPv6のみ。グローバルIPv6の世界を泳げない。フレッツ網内でのユーザ間IPv6通信をするために，v6オプションを申し込んでおく必要があります。
- 機材：ヤフオクで仕入れたFortigate60D×2台。ありがたいことにサポートが残っていたのでファームを6.0.5まで上げて，execute factoryreset。

## 参考にしたURL
https://help.fortinet.com/fos60hlp/60/Content/FortiOS/fortigate-ipsecvpn/IPv6_and_IPsec/Config_Overview.htm#Site-to-3

## はまったこと
どうやら，同一の物理インタフェースでPPPoEとIPsec用のインタフェースを同居させると，トンネルは張られているように見えるがIPsecのパケット(ESP)が送出されないというバグ？を踏んでしまったらしい。（tunnelをパケットキャプチャすると送出されているが，物理IFのキャプチャではESPパケットが出ていない，と言うことを確認した）
なので，WAN1をIPsec用，WAN2をPPPoE用と完全に使い分けました。

## 遅延は？
京都～岡山間のRTTはおおむね16ms～19msと，かなり優秀。
## FortigateのIPv6対応
- GUIでIPv6アドレスを入力できないと事がかなりある。CLI必須（独特なので，慣れるまで大変）
- DHCPv6との相性が悪い？https://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-whats-new-54/FeatureCatalog-ipv6.htm を参考にDHCPv6-PDの設定をしてみたが，diag ipv6 [address | route]
listでアドレスを取得している形跡がない。（でもHGWのDHCPv6クライアント一覧には出てくるという不思議。片思いになっている？）

## 物理的な接続
- 拠点1：HGWのLANと，FortigateのWAN1を接続。VPN専用なのでPPPoEは未設定
- 拠点2：HGWのLANと，FortigateのWAN1を接続(IPv6＆IPsec用)。HGWのLANとWAN2を接続（IPv4のPPPoE用）。2台の機材を2本のケーブルで接続するちょっと不思議な構成

## HGWで対向のIPv6アドレスからのパケットを許可する(両拠点とも）。
- HGWの「IPv6パケットフィルタ設定（IPoE）」で，対向側からのパケット受信を許可します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/b47d5a38-82fb-bccb-7ea3-ec9659c21260.png)

## FortigateのWAN1インタフェース設定
- HGWの管理画面を見て，割当てられたプレフィックスを確認します。/60で，Fortiの固定IPv6アドレスを決めます。
- GUIで，固定のIPv6を設定します。DHCPだとHGWからIPv6アドレスを取得してくれないようですし，対向側の設定をするとき面倒です。
- IPv6のデフォルトゲートウェイ設定は，HGWのグローバルアドレスを指定してください（HGWのリンクローカルアドレスを指定してもつながるようでした）。HGWの管理画面の「DHCPv6サーバ払い出し状況」で確認できる「DNSサーバアドレス」がHGWのグローバルIPv6アドレスです。
- アドレス設定後はIPv6をしゃべれるPCからPingでテストしておきます。対向のFortigateから「execute ping6 2400:ほげ:1234」でPingがつながることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/2e7b078e-65a7-b613-e58e-e41b8cd38c9c.png)

## IPsecトンネルの作成（Phase1・Phase2設定）
- コマンドラインで設定します。
- 拠点AのConfig

```
set vpn ipsec phase1-interface
    edit "toB"
        set interface "wan1"
        set ip-version 6
        set peertype any
        set proposal aes128-sha256 aes256-sha256 aes128-sha1 aes256-sha1
        set dpd disable
        set comments "to B"
        set remote-gw6 対向側FortigateBのWAN1のIPv6アドレス
        set psksecret IPsec接続パスワード（対向とあわせる）
    next
end
set vpn ipsec phase2-interface
    edit "toB2"
        set phase1name "toB"
        set proposal aes128-sha1 aes256-sha1 aes128-sha256 aes256-sha256
        set auto-negotiate enable
        set src-addr-type name
        set dst-addr-type name
        set src-name "all"
        set dst-name "all"
    next
end
```


- 拠点BのConfig

```
set vpn ipsec phase1-interface
    edit "toA"
        set interface "wan1"
        set ip-version 6
        set peertype any
        set proposal aes128-sha256 aes256-sha256 aes128-sha1 aes256-sha1
        set dpd disable
        set comments "to A"
        set remote-gw6 対向側FortigateAのWAN1のIPv6アドレス
        set psksecret IPsec接続パスワード（対向とあわせる）
    next
end
set vpn ipsec phase2-interface
    edit "toA2"
        set phase1name "toA"
        set proposal aes128-sha1 aes256-sha1 aes128-sha256 aes256-sha256
        set auto-negotiate enable
        set src-addr-type name
        set dst-addr-type name
        set src-name "all"
        set dst-name "all"
    next
end
```

- 設定が正しければ，この時点でIPsecトンネルが確立するはず。モニタ＞IPsecモニタで，トンネルが確立したことを確認する（緑の↑矢印が出ればOK。赤い×印は未確立）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/39747279-23d6-6c70-0acf-0e206c5b7d03.png)


## ポリシー設定
- ポリシー＆オブジェクト＞IPv4ポリシーで，2つポリシーを作る。一つはトンネル→Internal，もう一つはInternal→トンネルの許可。ポイントは，インタフェース名にphase1で作った名前を指定する（今回はtoB) ことと，NATを無効化すること。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/b819a8dd-b232-17f8-ce96-7c710b6f4bc3.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/faee4400-fc81-e2ae-8ab9-09e02c948437.png)

- 対向側のFortigateBも同様の設定を行う。

## スタティックルート設定
- 対向側のサブネットへのルーティングを設定する。「ネットワーク＞スタティックルート」   
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/d951e015-79be-ffb9-2a37-9b4e4a370286.png)


- 対向側のFortigateBも同様の設定を行う。