目的
以下の記事で Cloudflare Magic WAN の IPsec トンネルを構成しました。
その際に Tunnel health checks を構成して、トンネルの状態を監視できます。
Magic WAN のように Ingress / Egress の双方向で通信利用する場合には、ヘルスチェックも双方向にトンネルを経由させることが推奨なため、設定をおこなってみます。
片方向ヘルスチェック
例えば、Magic Transit で DSR (Direct Server Return) 型の場合には、 Ingress のときにトンネルを経由し、Egress のときはトンネルを経由せず ISP へのアップリンクから直接インターネットを経由する非対称な経路となります。
その際は、顧客ルータのグローバル IP をターゲットとした、片方向ヘルスチェックで問題ありません。
双方向ヘルスチェック
ターゲットアドレスに 172.64.240.252/30
の中からアドレスを指定して使用することで、双方向なヘルスチェックを実現できます。
顧客ルータでは、ソースアドレス 172.64.240.252/30
からの ICMP Echo Reply がトンネルを経由するように構成する必要があります。
ヘルスチェックタイプ:Reply と Request
トンネルヘルスチェックのタイプには Reply と Request の2つがあります。
Reply タイプがデフォルトですが、カプセル化された ICMPリプライパケットがルータに届いた瞬間に Cloudflare に送り返されるような仕組みです。
そのため、ICMP における非対称性がルータにて許容されている必要があります。
CloudflareはICMPリプライパケットをカプセル化し、プローブをトンネルを越えてオリジンに送信します。プローブがオリジンのルーターに到達すると、ルーターはICMPリプライをカプセル化解除し、指定された宛先IPに転送する。Cloudflareがリプライを受信すると、プローブは成功します。
一方で、Request タイプに変更することも可能です。
オリジンネットワークによって強制される制御プレーンポリシーを回避するために、トンネルヘルスチェックはICMPエコーリクエストの代わりにカプセル化されたICMPリプライを使用します。エコーリクエストのパケットもタイプ設定により変更可能です。
Reply と Request のヘルスチェックタイプは、環境に応じて設定が入れやすい方を選択します。
VyOS で双方向ヘルスチェック (Reply) を設定
VyOS で双方向ヘルスチェック (Reply) を設定する場合は、
- ソースアドレスが
172.64.240.252/30
の ICMP パケットは IPsec トンネルインターフェースvti0
からルーティングされるように PBR (Policy Based Routing) を構成します。
set protocols static table 100 interface-route 0.0.0.0/0 next-hop-interface vti0
set policy route pbr rule 1000 set table '100'
set policy route pbr rule 1000 protocol icmp
set policy route pbr rule 1000 source address 172.64.240.252/30
set interfaces vti vti0 policy route 'pbr'
以下のコマンドでヘルスチェックパケット(ICMP echo reply
のみ)を確認できます。
$ sudo tcpdump -n -i vti0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vti0, link-type RAW (Raw IP), capture size 262144 bytes
15:46:28.206027 IP 172.64.240.253 > 141.101.70.193: ICMP echo reply, id 61957, seq 0, length 64
15:46:28.206074 IP 172.64.240.253 > 141.101.70.193: ICMP echo reply, id 61957, seq 0, length 64
15:46:28.234231 IP 172.64.240.253 > 172.70.221.63: ICMP echo reply, id 24420, seq 0, length 64
15:46:28.234273 IP 172.64.240.253 > 172.70.221.63: ICMP echo reply, id 24420, seq 0, length 64
15:46:28.236154 IP 172.64.240.253 > 172.69.21.167: ICMP echo reply, id 54534, seq 0, length 64
また、Magic Firewall の Network Analytics 画面からもヘルスチェックパケットを確認できます。
https://dash.cloudflare.com/?to=/:account/network-analytics/magic-firewall
VyOS で双方向ヘルスチェック (Request) を設定
VyOS で双方向ヘルスチェック (Request) を設定する場合は、
-
ICMP echo request
を受け取って返答できるようにループバックインターフェースに172.64.240.253/32
を設定します。 - また、ソースアドレスが Cloudflare IP Ranges の ICMP パケットは IPsec トンネルインターフェース
vti0
からルーティングされるよう、ループバックインターフェースに PBR (Policy Based Routing) を構成します。
set interfaces loopback lo address 172.64.240.253/32
set protocols static table 100 interface-route 0.0.0.0/0 next-hop-interface vti0
set policy local-route rule 1000 set table 100
set policy local-route rule 1000 source 173.245.48.0/20
set policy local-route rule 1000 source 103.21.244.0/22
set policy local-route rule 1000 source 103.22.200.0/22
set policy local-route rule 1000 source 103.31.4.0/22
set policy local-route rule 1000 source 141.101.64.0/18
set policy local-route rule 1000 source 108.162.192.0/18
set policy local-route rule 1000 source 190.93.240.0/20
set policy local-route rule 1000 source 188.114.96.0/20
set policy local-route rule 1000 source 197.234.240.0/22
set policy local-route rule 1000 source 198.41.128.0/17
set policy local-route rule 1000 source 162.158.0.0/15
set policy local-route rule 1000 source 104.16.0.0/13
set policy local-route rule 1000 source 104.24.0.0/14
set policy local-route rule 1000 source 172.64.0.0/13
set policy local-route rule 1000 source 131.0.72.0/22
以下のコマンドでヘルスチェックパケット(ICMP echo request
と ICMP echo reply
の両方)を確認できます。
$ sudo tcpdump -n -i vti0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vti0, link-type RAW (Raw IP), capture size 262144 bytes
15:52:27.509669 IP 162.158.165.8 > 172.64.240.253: ICMP echo request, id 16932, seq 0, length 64
15:52:27.510556 IP 172.64.240.253 > 162.158.165.8: ICMP echo reply, id 16932, seq 0, length 64
15:52:27.510577 IP 198.41.136.75 > 172.64.240.253: ICMP echo request, id 60642, seq 0, length 64
15:52:27.510590 IP 172.64.240.253 > 198.41.136.75: ICMP echo reply, id 60642, seq 0, length 64
15:52:27.527028 IP 172.69.66.16 > 172.64.240.253: ICMP echo request, id 20760, seq 0, length 64
15:52:27.527106 IP 172.64.240.253 > 172.69.66.16: ICMP echo reply, id 20760, seq 0, length 64
15:52:27.543709 IP 162.158.157.28 > 172.64.240.253: ICMP echo request, id 4125, seq 0, length 64
15:52:27.543789 IP 172.64.240.253 > 162.158.157.28: ICMP echo reply, id 4125, seq 0, length 64
また、Magic Firewall の Network Analytics 画面からもヘルスチェックパケットを確認できます。
https://dash.cloudflare.com/?to=/:account/network-analytics/magic-firewall
まとめ
最近、ダッシュボード上でもヘルスチェック設定を確認・変更できるようになったため、ユーザにもわかりやすくなりました。
Cloudflare Magic WAN / Transit で使う GRE / IPsec トンネルのヘルスチェックが UI でも構成可能になりました pic.twitter.com/UVEChkn0T6
— kyhayama (@kyhayama) May 15, 2023
また、このトンネルヘルスチェックの結果を用いて転送先トンネルが決められ、Healthy なトンネルにのみ転送することができます。
Cloudflare Magic WAN の IPsec トンネル構成と同時に、双方向ヘルスチェックを構成することをおすすめします。