← Cloudflare One / cloudflare-one / networks / connectors / cloudflare-wan / configuration / third-party
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
- Установите strongSwan ↗. Например, откройте консоль и выполните:
sudo apt-get install strongswan -y- Откройте
/etc/strongswan.confи добавьте следующие настройки:
charon {
load_modular = yes
install_routes = no
install_virtual_ip = no
plugins {
include strongswan.d/charon/*.conf
}
}
include strongswan.d/*.conf3. Настройте файл IPsec
- Откройте
/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-
Создайте виртуальный интерфейс туннеля (VTI) с IP-адресом, настроенным в качестве цели для проверок работоспособности Cloudflare (
172.64.240.252) для маршрутизации пакетов IPsec. Откройте/etc/strongswan.d/. -
Создайте скрипт с именем
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 к интерфейсу туннеля.
-
Откройте
/etc/iproute2/. -
Измените
rt_tablesфайл, чтобы добавить номер и имя таблицы маршрутизации. В этом примере используйтеviatunicmpв качестве имени и200в качестве номера таблицы маршрутизации.
#
# reserved values
#
255 local
254 main
253 default
0 unspec
200 viatunicmp
#
# local
#
#1 inr.ruhep- Добавьте правило для сопоставления с таблицей маршрутизации. Это правило указывает системе использовать таблицу маршрутизации
viatunicmpесли исходный адрес пакета172.64.240.252:
ip rule add from 172.64.240.252 lookup viatunicmp- Добавьте маршрут к
viatunicmpтаблица маршрутизации. Это маршрут по умолчанию через интерфейсvti0вviatunicmpв таблице.
ip route add default dev vti0 table viatunicmp- Запустите IPsec. Также вы можете
stop,restart, и отобразитеstatusдля подключения IPsec:
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_o
cloudflare-ipsec{4}: 0.0.0.0/0 === 0.0.0.0/05. Проверьте статус соединения
Используйте tcpdump, чтобы отследить статус проверок работоспособности, инициированных Cloudflare.
sudo tcpdump -i <OUTGOING_INTERFACE> esp and host <TUNNEL_CLOUDFLARE_ENDPOINT_IP>В этом примере исходящий интернет-интерфейс показывает, что зашифрованные пакеты IPsec (ESP) от зондов проверки работоспособности Cloudflare (как запрос, так и ответ) проходят через туннель IPsec.
Запустите tcpdump на vti0 чтобы проверить расшифрованные пакеты.
sudo tcpdump -i vti0 host 172.64.240.252