コンテンツにスキップ

strongSwan

このチュートリアルでは、strongSwanをMagic WANと共に設定する方法を説明します。strongSwanの構成、IPsecトンネルの設定、およびポリシーベースのルーティングの作成方法を学びます。

1. ヘルスチェックの設定

まず、Magic WANの双方向ヘルスチェックターゲットを設定します。この特定のチュートリアルでは、ターゲットIPアドレスとして172.64.240.252を使用し、typeをリクエストとして設定します。

これはAPIを使用して設定できます。例えば:

Terminal window
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"
}
}'

2. StrongSwanの設定

  1. まず、StrongSwanをインストールします。例えば、コンソールを開いて次のコマンドを実行します:
Terminal window
sudo apt-get install strongswan -y
  1. 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

3. IPsecファイルの設定

  1. /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
  1. 次に、Cloudflareのヘルスチェックのターゲットとして設定したIP(172.64.240.252)を使用して、仮想トンネルインターフェース(VTI)を作成する必要があります。/etc/strongswan.d/に移動します。

  2. ipsec-vti.shというスクリプトを作成し、次の内容を追加します:

#!/bin/bash
set -o nounset
set -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
;;
esac
echo "executed"

4. ポリシーベースのルーティング(PBR)の追加

IPsecトンネルはそのままで動作していますが、戻りトラフィックをIPsecトンネル経由でリダイレクトするためにポリシーベースのルーティング(PBR)を作成する必要があります。これがないと、Cloudflareから送信されたヘルスプローブへのICMP応答が、同じIPsecトンネルではなくインターネット経由で返されます。これは潜在的な問題を避けるために必要です。

これを実現するために、チュートリアルではiproute2を使用して、172.63.240.252からトンネルインターフェースへのIPパケットをルーティングします。

  1. /etc/iproute2/に移動します。

  2. rt_tablesファイルを編集して、ルーティングテーブルの番号と名前を追加します。この例では、名前としてviatunicmp、番号として200を使用しました。

#
# 予約された値
#
255 local
254 main
253 default
0 unspec
200 viatunicmp
#
# local
#
#1 inr.ruhep
  1. コンソールを開き、作成したばかりのルーティングテーブルに一致するルールを追加します。このルールは、パケットの送信元アドレスが172.64.240.252の場合に、システムがルーティングテーブルviatunicmpを使用するよう指示します:
Terminal window
ip rule add from 172.64.240.252 lookup viatunicmp
  1. 新しく作成したルーティングテーブルviatunicmpにルートを追加します。これは、viatunicmpテーブル内のインターフェースvti0経由のデフォルトルートです。
Terminal window
ip route add default dev vti0 table viatunicmp
  1. これで、IPsecをstartできます。また、stoprestart、およびIPsec接続のstatusを表示することもできます:
Terminal window
ipsec start
Security 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_o
cloudflare-ipsec{4}: 0.0.0.0/0 === 0.0.0.0/0

5. 接続状態の確認

StrongSwanをMagic WANで設定した後、tcpdumpを使用してCloudflareから発信されたヘルスチェックの状態を調査できます。

Terminal window
sudo tcpdump -i <OUTGOING_INTERFACE> esp and host <TUNNEL_CLOUDFLARE_ENDPOINT_IP>

この例では、出力インターネットインターフェースが、Cloudflareのヘルスチェックプローブ(リクエストと応答の両方)からのIPsec暗号化パケット(ESP)が、設定したIPsecトンネルを通過していることを示しています。

tcpdump shows the IPsec encrypted packets from Cloudflare's health probbes

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

Terminal window
sudo tcpdump -i vti0 host 172.64.240.252

If you run tcpdump on vti0 you can check for decrypted packets