strongSwan
このチュートリアルでは、strongSwanをMagic WANと共に設定する方法を説明します。strongSwanの構成、IPsecトンネルの設定、およびポリシーベースのルーティングの作成方法を学びます。
まず、Magic WANの双方向ヘルスチェックターゲットを設定します。この特定のチュートリアルでは、ターゲットIPアドレスとして172.64.240.252を使用し、typeをリクエストとして設定します。
これはAPIを使用して設定できます。例えば:
curl --request PUT \https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/ipsec_tunnels/{tunnel_id} \--header "X-Auth-Email: <EMAIL>" \--header "X-Auth-Key: <API_KEY>" \--header "Content-Type: application/json" \--data '{ "health_check": { "enabled": true, "target": "172.64.240.252", "type": "request", "rate": "mid" }}'- まず、StrongSwanをインストールします ↗。例えば、コンソールを開いて次のコマンドを実行します:
sudo apt-get install strongswan -y- StrongSwanのインストールが完了したら、
/etc/strongswan.confに移動して設定ファイルを編集し、次の設定を追加します:
charon { load_modular = yes install_routes = no install_virtual_ip = no
plugins { include strongswan.d/charon/*.conf }}
include strongswan.d/*.conf/etc/ipsec.confに移動し、次の設定を追加します:
# ipsec.conf - strongSwan IPsec 設定ファイルconfig setup charondebug="all" uniqueids = yes
conn %default ikelifetime=4h rekey=yes reauth=no keyexchange=ikev2 authby=secret dpdaction=restart closeaction=restart
# サンプルVPN接続conn cloudflare-ipsec auto=start type=tunnel fragmentation=no leftauth=psk # VMのプライベートIP left=%any # ダッシュボードからのトンネルID、この例ではFQDNが使用されています leftid=<YOUR_TUNNEL_ID>.<YOUR_ACCOUNT_ID>.ipsec.cloudflare.com leftsubnet=0.0.0.0/0 # Cloudflare Anycast IP right=<YOUR_CLOUDFLARE_ANYCAST_IP> rightid=<YOUR_CLOUDFLARE_ANYCAST_IP> rightsubnet=0.0.0.0/0 rightauth=psk ike=aes256-sha256-modp2048! esp=aes256-sha256-modp2048! replay_window=0 mark_in=42 mark_out=42 leftupdown=/etc/strongswan.d/ipsec-vti.sh-
次に、Cloudflareのヘルスチェックのターゲットとして設定したIP(
172.64.240.252)を使用して、仮想トンネルインターフェース(VTI)を作成する必要があります。/etc/strongswan.d/に移動します。 -
ipsec-vti.shというスクリプトを作成し、次の内容を追加します:
#!/bin/bash
set -o nounsetset -o errexit
VTI_IF="vti0"
case "${PLUTO_VERB}" in up-client) ip tunnel add "${VTI_IF}" local "${PLUTO_ME}" remote "${PLUTO_PEER}" mode vti \ key "${PLUTO_MARK_OUT%%/*}" ip link set "${VTI_IF}" up ip addr add 172.64.240.252/32 dev vti0 sysctl -w "net.ipv4.conf.${VTI_IF}.disable_policy=1" sysctl -w "net.ipv4.conf.${VTI_IF}.rp_filter=0" sysctl -w "net.ipv4.conf.all.rp_filter=0" ip rule add from 172.64.240.252 lookup viatunicmp ip route add default dev vti0 table viatunicmp ;; down-client) ip tunnel del "${VTI_IF}" ip rule del from 172.64.240.252 lookup viatunicmp ip route del default dev vti0 table viatunicmp ;;esacecho "executed"IPsecトンネルはそのままで動作していますが、戻りトラフィックをIPsecトンネル経由でリダイレクトするためにポリシーベースのルーティング(PBR)を作成する必要があります。これがないと、Cloudflareから送信されたヘルスプローブへのICMP応答が、同じIPsecトンネルではなくインターネット経由で返されます。これは潜在的な問題を避けるために必要です。
これを実現するために、チュートリアルではiproute2 ↗を使用して、172.63.240.252からトンネルインターフェースへのIPパケットをルーティングします。
-
/etc/iproute2/に移動します。 -
rt_tablesファイルを編集して、ルーティングテーブルの番号と名前を追加します。この例では、名前としてviatunicmp、番号として200を使用しました。
## 予約された値#255 local254 main253 default0 unspec200 viatunicmp## local##1 inr.ruhep- コンソールを開き、作成したばかりのルーティングテーブルに一致するルールを追加します。このルールは、パケットの送信元アドレスが
172.64.240.252の場合に、システムがルーティングテーブルviatunicmpを使用するよう指示します:
ip rule add from 172.64.240.252 lookup viatunicmp- 新しく作成したルーティングテーブル
viatunicmpにルートを追加します。これは、viatunicmpテーブル内のインターフェースvti0経由のデフォルトルートです。
ip route add default dev vti0 table viatunicmp- これで、IPsecを
startできます。また、stop、restart、およびIPsec接続のstatusを表示することもできます:
ipsec startSecurity Associations (1 up, 0 connecting):cloudflare-ipsec[1]: ESTABLISHED 96 minutes ago, <IPSEC_TUNNEL_IDENTIFIER>.ipsec.cloudflare.com]...162.159.67.88[162.159.67.88]cloudflare-ipsec{4}: INSTALLED, TUNNEL, reqid 1, ESP SPIs: c4e20a95_i c5373d00_ocloudflare-ipsec{4}: 0.0.0.0/0 === 0.0.0.0/0StrongSwanをMagic WANで設定した後、tcpdumpを使用してCloudflareから発信されたヘルスチェックの状態を調査できます。
sudo tcpdump -i <OUTGOING_INTERFACE> esp and host <TUNNEL_CLOUDFLARE_ENDPOINT_IP>この例では、出力インターネットインターフェースが、Cloudflareのヘルスチェックプローブ(リクエストと応答の両方)からのIPsec暗号化パケット(ESP)が、設定したIPsecトンネルを通過していることを示しています。

また、vti0でtcpdumpを実行して、復号化されたパケットを確認することもできます。
sudo tcpdump -i vti0 host 172.64.240.252