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

はまったこと

どうやら,同一の物理インタフェースで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)」で,対向側からのパケット受信を許可します。

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がつながることを確認します。

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。赤い×印は未確立)

ポリシー設定

  • ポリシー&オブジェクト>IPv4ポリシーで,2つポリシーを作る。一つはトンネル→Internal,もう一つはInternal→トンネルの許可。ポイントは,インタフェース名にphase1で作った名前を指定する(今回はtoB) ことと,NATを無効化すること。

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

スタティックルート設定

  • 対向側のサブネットへのルーティングを設定する。「ネットワーク>スタティックルート」

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