Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

strongSwan

最終更新 Markdown で表示Agent セットアップ

このチュートリアルでは、strongSwan と Cloudflare WAN(旧称 Magic WAN)のセットアップ方法を説明します。strongSwan の設定、IPsec トンネルの設定、ポリシーベースルーティング(PBR)の作成を行います。

1. ヘルスチェックを設定する

Cloudflare 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"
  }
}'

2. strongSwan を設定する

  1. strongSwan をインストール します。たとえば、コンソールを開いて次を実行します。
sudo apt-get install strongswan -y
  1. /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 configuration file
config setup
    charondebug="all"
    uniqueids = yes

conn %default
    ikelifetime=24h
    rekey=yes
    reauth=no
    keyexchange=ikev2
    authby=secret
    dpdaction=restart
    closeaction=restart

# Sample VPN connections
conn cloudflare-ipsec
    auto=start
    type=tunnel
    fragmentation=no
    leftauth=psk
    # Private IP of the VM
    left=%any
    # Tunnel ID from dashboard, in this example FQDN is used
    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-ecp384!
    esp=aes256-sha256-ecp384!
    replay_window=0
    mark_in=42
    mark_out=42
    leftupdown=/etc/strongswan.d/ipsec-vti.sh
  1. Cloudflare のヘルスチェックのターゲット(172.64.240.252)として IP を設定した仮想トンネルインターフェース(VTI)を作成し、IPsec パケットをルーティングします。/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. ポリシーベースルーティングを追加する

戻りトラフィックを IPsec トンネル経由に振り向けるため、ポリシーベースルーティング(PBR)を作成します。これがないと、Cloudflare が送ったヘルスプローブへの ICMP 応答が、同じ IPsec トンネルではなく Internet 経由で戻ります。

このチュートリアルでは、iproute2 を使い、172.64.240.252 からの IP パケットをトンネルインターフェースへルーティングします。

  1. /etc/iproute2/ を開きます。

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

#
# reserved values
#
255 local
254 main
253 default
0   unspec
200 viatunicmp
#
# local
#
#1  inr.ruhep
  1. ルーティングテーブルに一致するルールを追加します。このルールは、パケットの送信元アドレスが 172.64.240.252 の場合にルーティングテーブル viatunicmp を使うようシステムに指示します。
ip rule add from 172.64.240.252 lookup viatunicmp
  1. viatunicmp ルーティングテーブルにルートを追加します。これは、viatunicmp テーブル内のインターフェース vti0 経由のデフォルトルートです。
ip route add default dev vti0 table viatunicmp
  1. IPsec を開始します。IPsec 接続の stoprestartstatus の表示もできます。
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. 接続状態を確認する

tcpdump を使い、Cloudflare 起点のヘルスチェックの状態を調べます。

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

この例では、送信 Internet インターフェース上で、Cloudflare のヘルスチェックプローブ(リクエストとレスポンスの両方)からの IPsec 暗号化パケット(ESP)が IPsec トンネルを通っていることが分かります。

tcpdump は、Cloudflare のヘルスプローブからの IPsec 暗号化パケットを表示します

復号済みパケットを確認するには、vti0 で tcpdump を実行します。

sudo tcpdump -i vti0 host 172.64.240.252
vti0 で tcpdump を実行すると、復号済みパケットを確認できます

役に立ちましたか?