INTEGRITY Документация

strongSwan

В этом руководстве описано, как настроить strongSwan совместно с Cloudflare WAN (ранее Magic WAN). Вы узнаете, как настроить strongSwan, настроить туннель IPsec и создать Policy-Based Routing (PBR).

1. Настройте проверки работоспособности

Настройте двунаправленные проверки состояния цель для Cloudflare WAN. Для этого руководства используйте 172.64.240.252 в качестве целевого IP-адреса, а 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. Создайте виртуальный интерфейс туннеля (VTI) с IP-адресом, настроенным в качестве цели для проверок работоспособности Cloudflare (172.64.240.252) для маршрутизации пакетов 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. Добавьте маршрутизацию на основе политик

Создайте маршрутизацию на основе политик (PBR) для перенаправления обратного трафика через туннель IPsec. Без этого ICMP-ответы на проверки работоспособности, отправленные Cloudflare, будут возвращаться через интернет, а не через тот же туннель IPsec.

В этом руководстве используется iproute2 для маршрутизации IP-пакетов от 172.64.240.252 к интерфейсу туннеля.

  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. Добавьте правило для сопоставления с таблицей маршрутизации. Это правило указывает системе использовать таблицу маршрутизации viatunicmp если исходный адрес пакета 172.64.240.252:
ip rule add from 172.64.240.252 lookup viatunicmp
  1. Добавьте маршрут к viatunicmp таблица маршрутизации. Это маршрут по умолчанию через интерфейс vti0 в viatunicmp в таблице.
ip route add default dev vti0 table viatunicmp
  1. Запустите IPsec. Также вы можете stop, restart, и отобразите status для подключения IPsec:
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>

В этом примере исходящий интернет-интерфейс показывает, что зашифрованные пакеты IPsec (ESP) от зондов проверки работоспособности Cloudflare (как запрос, так и ответ) проходят через туннель IPsec.

tcpdump показывает зашифрованные пакеты IPsec от зондов проверки работоспособности Cloudflare

Запустите tcpdump на vti0 чтобы проверить расшифрованные пакеты.

sudo tcpdump -i vti0 host 172.64.240.252
Если запустить tcpdump на vti0, можно проверить наличие расшифрованных пакетов