Fortigate で OSPF over IPsec
こんなネットワークを運用したい!
まぁ、天体撮影をするときのステラショットを動かすパソコンで使う話なんですけどね。
望遠鏡につながるパソコン、つまりステラショットを動かすマシンです。ステラショットさえ動けば良いという考え方もあるんですが、そうはいきません。
ステラショットをリモートで使いたいので、RDPします。RDPするためのIPアドレス管理どうする?んなもん、AD任せでしょ!
撮影後のデータは?とーぜんファイルサーバに置かないといけません。
つまり、普段のサーバサービスを受けられる環境にしないといけないのです。
- 自宅ベランダで使うときは、家庭内LANにつなげばいい
- 遠征時はモバイルルータ経由で家庭内LANにつなぎたい
これで出てくるのがサテライトネットワークです。
サテライトネットワーク用のサテライトRouterは、家庭内LANにつないだらLocal Routerとして、モバイルルータにつなげばVPN Routerとして動作するわけです。
なお、この設定、すんごーく長くて面倒です。OSPF over IPsecをやりたいという方は覚悟して挑んでください。
Local Routerの設定
Local Routerとしての設定です。なお、サテライトRouterには、FortiWiFiを使ってます。無線が使えた方が便利ですからね。
なお、OSPFしゃべたり、DHCPでアドレスもらったりしますが、そんなのは家庭内LANで動いてて当たり前でしょうから、ここでは省略
インターフェースの設定
config system interface
edit "wan1"
set mode dhcp
set allowaccess ping fgfm auto-ipsec
set defaultgw enable
next
edit "internal"
set ip 10.B.6.1 255.255.255.0
next
edit "wifi"set ip 10.B.7.1 255.255.255.0
next
edit "lo0"
set ip 10.A.A.102 255.255.255.255
set type loopback
next
end
ポイントは
- WAN1インターフェースをDHCPクライアントにすること
- Loopbackインターフェースに有意なアドレスを振ること
Firewallポリシー
config firewall policy
edit 1
set srcintf "internal"
set dstintf "wan1"
set srcaddr "LAN"
set dstaddr "all"
set action accept
set service "ALL"
next
edit 3
set srcintf "wifi"
set dstintf "wan1"
set srcaddr "LAN"
set dstaddr "all"
set action accept
set service "ALL"
next
end
ここは特にポイントはないかと。サテライトルータの配下から通信を許可してるだけです。
OSPFの設定
config router ospf
config area
edit 0.0.0.0
next
end
config network
edit 1
set prefix 10.C.C.0 255.255.255.0
next
end
config redistribute "connected"
set status enable
end
set router-id 10.A.A.102
end
これもごくふつーのOSPFの設定です。
Loopback インターフェースに有意なアドレスを振ったのは、OSPFのRouter IDとして使用するためですね。
はい、ここまでは準備
VPNルータとしての設定
さて、本題です。「サテライトRouter」と「VPN Router」間でIPsec VPNを結びます。
なお、IPsec VPNです。L2TP over IPsec はやりません。意味ないですからね。なんか世の中、IPsecはL2TPと組み合わせて使うもんだと思ってる人いるみたいですけど、そんなわけない。IPsecはIPsecだけで使うもんです。
インターフェースの設定
config system interface
edit "wan2"
set mode dhcp
set defaultgw enable
next
end
これはWAN2にモバイルルータをつなぐだけの話。これはサクッと流しましょう。
IPsecの設定
IPsecに関する設定です。これはPeer感で整合をとらないといけないので、サテライトRouterと、VPN Router両方の設定が必要です。
サテライトRouterの設定
config vpn ipsec phase1-interface
edit "Satlite"
set interface "wan2"
set dhgrp 14
set mode aggressive
set proposal aes256-sha256
set localid "Satlite"
set remote-gw *.*.*.*
set psksecret ***********
next
end
config vpn ipsec phase2-interface
edit "Satlite"
set auto-negotiate enable
set phase1name "Satlite"
set dst-subnet 10.0.0.0 255.0.0.0
set src-subnet 10.0.0.0 255.0.0.0
next
edit "Multicast-inbound"
set auto-negotiate enable
set phase1name "Satlite"
set dst-subnet 10.0.0.0 255.0.0.0
set src-subnet 224.0.0.0 255.0.0.0
next
edit "Multicast-outbound"
set auto-negotiate enable
set phase1name "Satlite"
set dst-subnet 224.0.0.0 255.0.0.0
set src-subnet 10.0.0.0 255.0.0.0
next
end
config system interface
edit "Satlite"
set vdom "root"
set ip 10.B.5.2 255.255.255.255
set type tunnel
set remote-ip 10.B.5.1
set interface "wan2"
next
end
※ SPFパラメータ等を省略してます。必要なパラメータは随時足してください。多分GUIで設定すれば入ります
さて、この設定にはいくつかポイントがあります。
- Aggressiveモードをつかう
- NAT Traversalを有効にする(上記Configには表れてませんが)
- DPDを有効にする(上記Configには表れてませんが)
- Phase-II に3個のルールを設定する
- メイントラフィックを担うルールは 0.0.0.0/0 で設定しない
- コマンドラインで操作するときは、トンネルインターフェースはIPsecの設定を行ったあとでしか設定できない
サテライト側をモバイルルータでつなぐんですから、当然アドレスは不定。なんで当然のようにAggressiveモード、NAT-Tを使わないといけないんですが・・・・
なぜか世の中には、ダイナミックアドレスなのに、Mainモードを使わせる製品があるんですよね。RFC読んで出直してこい。
VPN Routerの設定
config vpn ipsec phase1-interface
edit "VPN"
set type dynamic
set keylife 1800
set mode aggressive
set proposal aes256-sha256
set dpd on-idle
set dhgrp 14
set peerid "Satlite"
set psksecret ***********
set dpd-retryinterval 60
next
end
config vpn ipsec phase2-interface
edit "VPN"
set phase1name "VPN"
set src-subnet 10.0.0.0 255.0.0.0
set dst-subnet 10.0.0.0 255.0.0.0
next
edit "outbound"
set phase1name "VPN"
set src-subnet 10.0.0.0 255.0.0.0
set dst-subnet 224.0.0.0 255.0.0.0
next
edit "inbound"
set phase1name "VPN"
set src-subnet 224.0.0.0 255.0.0.0
set dst-subnet 10.0.0.0 255.0.0.0
next
end
config system interface
edit "VPN"
set vdom "root"
set ip 10.B.5.1 255.255.255.255
set type tunnel
set remote-ip 10.B.5.2 255.255.255.255
next
end
VPNセンタールータとしての設定ですね。
サテライト側に対応する設定です。
ちょっと解説
VPN関連はポイントがあるので、ちょこっと解説。
OSPF over IPsecをやりたいわけですから、当然ながらOSPFパケットをIPsecトンネル内を通します。OSPFはマルチキャストで通信するので、OSPFのマルチキャストアドレス 224.0.0.5 宛のパケットが飛び交います。
ここで注意しないといけないのが、IPsecの設定にあるアドレスセレクター。アドレスセレクタに 10.0.0.0/8 <--> 10.0.0.0/8 を設定すればわかりやすいのですが、アドレスの値としてみれば、マルチキャストアドレスは対象外になります。
ここでFortigateの仕様が関係してきます。Fortigateはアドレスセレクタから外れたパケットは遮断してしまうようです。何を当たり前のことを?と思う方もいらっしゃるでしょうが、これ、ルータの仕様によって動作が違います。アドレスセレクタから外れたパケットを投げ込んだ場合、遮断する製品、透過させる製品、通したいパケットに応じてPhase-IIネゴシエーションを開始する製品。しかも、こういう詳しい仕様はドキュメント化されてないことがほとんどです。Fortigateは遮断してしまうようです。
なので、メインのトラフィックを通すルール、マルチキャストのInbound / Outboundを各々通すルール、合わせて3個のルールが必要になります。
「じゃあ、0.0.0.0/0でルール作って、ルーティングで制御すりゃいいだろ」その通りと言いたいのですが、残念ながらそれもできません。これもFortigateの仕様ですが、FortigateのIPsecはSAが確立すると、セレクタに応じた静的経路を自動登録します。つまり、Default Routeを書き換えられてしまい、ISAKMPパケット、ESPパケットの通信経路が変わってしまいます。
Firewallポリシーの設定
config firewall policy
edit 6
set srcintf "wifi"
set dstintf "Satlite"
set srcaddr "LAN"
set dstaddr "LAN"
set action accept
set service "ALL"
next
edit 8
set srcintf "internal"
set dstintf "Satlite"
set srcaddr "LAN"
set dstaddr "LAN"
set action accept
set service "ALL"
next
edit 9
set srcintf "Satlite"
set dstintf "internal"
set srcaddr "LAN"
set dstaddr "LAN"
set action accept
set service "ALL"
next
end
サテライトRouter側のFirewallポリシー設定です。トンネル用のインターフェースを作ったんだから、新たなルールが必要です。Fortigate使ってるんだから、当たり前だろ?と思うんですが、これも注意ポイントの一つ。
このポリシーは必ず必要です。いや、そりゃそーだろって話なんですが、そうじゃなくて
IPsecの設定したら、まずはIPsecが繋がるかを試験して、それからポリシー設定しようか、って思いますよね。そうするとハマります。
これもFortigateの仕様っぽいんですが、FortigateはIPsecを設定しても、IPsecを通した通信が許可されるようFirewallが設定されてないと、ISAKMPのネゴシエーションが失敗します。その時にデバッグ画面で記録されるエラーがこれ。
ike Negotiate ISAKMP SA Error: ike 0:***************/0000000000000000:537: no SA proposal chosen
ちょっとまて、なんで no SA proposal chosen なんだよ!
そのエラーは、SAプロポーザルが食い違ってるときに出すもんだろ?!暗号アルゴリズムも、HASアルゴリズムも、DHグループも、SA寿命もいくら見直しても間違ってない。なのに、no proposal chosenと言われる。訳が分からないよ!!と叫びたい。
OSPFの設定
最後にOSPFの設定。といっても、この記事がOSPF over IPsecをやる。って話なんで、これが本丸なんですが。
サテライトRouter
config router ospf
config network
edit 2
set prefix 10.B.5.0 255.255.255.0
next
end
config ospf-interface
edit "OSPF-Satlite"
set interface "Satlite"
set mtu 1400
next
end
end
OSPFの設定を、ネットワークとインターフェース両方に対して入れないとダメみたいです。インターフェースはトンネルインターフェースがあるので、それを設定すればいいんですが、ネットワークも必要です。なので、トンネルインターフェースをNumberdで作って、そのアドレスに対してOSPFを設定する必要があります。
あと、ポイントが MTU の設定をすること。
OSPFはネゴシエーションの中でMTUを交換して、値があってないとネゴシエーションが進みません。OSFPのステータスが Exchange から進まない場合は、MTUがあってない可能性があります。
本来であれば、トンネルインターフェースのMUTを設定したいところですが、FortigateのトンネルインターフェースはMTU設定ができないようです。なので、OSPFのインターフェースでMTUを設定します。
以上!
長かった・・・・