# Рецепты VPN для pfSense - IPsec, OpenVPN, WireGuard

> Пошаговые рецепты настройки VPN в pfSense - IPsec site-to-site с Cisco ASA, AWS и Azure, OpenVPN с Active Directory, WireGuard для мобильных устройств

Source: https://opennix.org/docs/pfsense/recipes/pfsense-vpn-recipes/


В этом разделе собраны рецепты настройки VPN-подключений в pfSense для различных сценариев: межсайтовые туннели IPsec с оборудованием разных производителей, интеграция OpenVPN с корпоративными каталогами, развертывание WireGuard для мобильных пользователей и обеспечение отказоустойчивости VPN-каналов.

Перед настройкой VPN рекомендуется создать резервную копию конфигурации: **Diagnostics - Backup & Restore**. Общие сведения о VPN-подключениях описаны в разделе [VPN pfSense](/docs/pfsense/vpn/).

## IPsec Site-to-Site между pfSense и Cisco ASA

IPsec-туннель между pfSense и Cisco ASA позволяет объединить офисные сети через зашифрованный канал. Критически важно согласовать параметры Phase 1 и Phase 2 на обеих сторонах.

### Пошаговая настройка

1. Определите параметры обеих сторон:
   - pfSense WAN IP: например, 203.0.113.1
   - Cisco ASA WAN IP: например, 198.51.100.1
   - pfSense LAN: 192.168.1.0/24
   - Cisco ASA LAN: 10.0.1.0/24

2. На pfSense перейдите в **VPN - IPsec - Tunnels** и нажмите **Add P1**

3. Настройте Phase 1:
   - **Key Exchange Version** - IKEv2
   - **Remote Gateway** - 198.51.100.1
   - **Authentication Method** - Mutual PSK
   - **Pre-Shared Key** - сгенерируйте надежный ключ (минимум 32 символа)
   - **Encryption Algorithm** - AES 256-GCM, 128 bits
   - **Hash Algorithm** - SHA256
   - **DH Group** - 14 (2048 bit)
   - **Lifetime** - 28800

4. Нажмите **Save**, затем нажмите **Show Phase 2 Entries** и добавьте Phase 2:
   - **Mode** - Tunnel IPv4
   - **Local Network** - LAN subnet (192.168.1.0/24)
   - **Remote Network** - 10.0.1.0/24
   - **Encryption Algorithm** - AES 256-GCM, 128 bits
   - **Hash Algorithm** - SHA256
   - **PFS Key Group** - 14 (2048 bit)
   - **Lifetime** - 3600

5. На Cisco ASA настройте зеркальные параметры:

```
crypto ikev2 policy 10
 encryption aes-gcm-256
 integrity sha256
 group 14
 lifetime 28800

crypto ikev2 enable outside

tunnel-group 203.0.113.1 type ipsec-l2l
tunnel-group 203.0.113.1 ipsec-attributes
 ikev2 local-authentication pre-shared-key <ключ>
 ikev2 remote-authentication pre-shared-key <ключ>

access-list VPN_TRAFFIC extended permit ip 10.0.1.0 255.255.255.0 192.168.1.0 255.255.255.0

crypto ipsec ikev2 ipsec-proposal AES256-GCM
 protocol esp encryption aes-gcm-256

crypto map VPN_MAP 10 match address VPN_TRAFFIC
crypto map VPN_MAP 10 set peer 203.0.113.1
crypto map VPN_MAP 10 set ikev2 ipsec-proposal AES256-GCM
crypto map VPN_MAP interface outside
```

6. На pfSense перейдите в **Firewall - Rules - IPsec** и создайте правило:

```
Action: Pass
Interface: IPsec
Source: 10.0.1.0/24
Destination: LAN net
```

7. Включите туннель: **Status - IPsec - Overview**, нажмите **Connect P1 and P2**

8. Проверьте состояние в **Status - IPsec - SPD** и протестируйте связность ping между подсетями

> **Важно**: параметры шифрования, хеширования, DH-группы и lifetime должны совпадать на обеих сторонах. Несовпадение любого параметра приведет к сбою установления туннеля.

## IPsec Site-to-Site между pfSense и AWS VPN Gateway

AWS VPN Gateway поддерживает IPsec-туннели с внешними устройствами. AWS предоставляет два туннеля для обеспечения отказоустойчивости. Рекомендуется настроить оба.

### Пошаговая настройка

1. В консоли AWS создайте Customer Gateway:
   - **BGP ASN** - 65000 (или ваш ASN)
   - **IP Address** - публичный IP pfSense WAN
   - **Routing** - Static

2. Создайте Virtual Private Gateway и присоедините к VPC

3. Создайте Site-to-Site VPN Connection:
   - **Customer Gateway** - выберите созданный
   - **Virtual Private Gateway** - выберите созданный
   - **Routing Options** - Static
   - **Static IP Prefixes** - подсеть LAN pfSense (192.168.1.0/24)

4. Скачайте конфигурацию VPN: выберите **Vendor: Generic** для получения параметров

5. На pfSense перейдите в **VPN - IPsec - Tunnels** и создайте Phase 1 для первого туннеля:
   - **Key Exchange Version** - IKEv1 (AWS по умолчанию использует IKEv1)
   - **Remote Gateway** - IP первого AWS туннеля (из скачанной конфигурации)
   - **Authentication Method** - Mutual PSK
   - **Pre-Shared Key** - из конфигурации AWS
   - **Encryption Algorithm** - AES 256
   - **Hash Algorithm** - SHA256
   - **DH Group** - 2 (AWS default)
   - **Lifetime** - 28800

6. Добавьте Phase 2:
   - **Local Network** - LAN subnet
   - **Remote Network** - VPC CIDR (например, 10.0.0.0/16)
   - **Encryption Algorithm** - AES 256
   - **Hash Algorithm** - SHA256
   - **PFS Key Group** - 2
   - **Lifetime** - 3600

7. Повторите шаги 5-6 для второго AWS-туннеля (с другим Remote Gateway и PSK)

8. Перейдите в **System - Routing - Gateways** и добавьте шлюзы для обоих туннелей

9. Настройте [правила файрвола](/docs/pfsense/firewall/pfsense-firewall-rules/) на интерфейсе IPsec для разрешения трафика из VPC

10. В консоли AWS проверьте статус туннелей в разделе VPN Connections - Tunnel Details

> **Важно**: AWS использует DH Group 2 по умолчанию. Убедитесь, что параметры Phase 1 и Phase 2 точно соответствуют скачанной конфигурации. DPD (Dead Peer Detection) должен быть включен на pfSense.

## IPsec Site-to-Site между pfSense и Azure VPN Gateway

Azure VPN Gateway поддерживает IKEv2 с расширенными параметрами шифрования. Подключение pfSense к Azure Virtual Network Gateway требует согласования пользовательских IPsec-политик.

### Пошаговая настройка

1. В портале Azure создайте Virtual Network Gateway:
   - **Gateway type** - VPN
   - **VPN type** - Route-based
   - **SKU** - VpnGw1 или выше
   - **Virtual network** - выберите целевую VNet

2. Создайте Local Network Gateway:
   - **IP address** - публичный IP pfSense WAN
   - **Address space** - подсеть LAN pfSense (192.168.1.0/24)

3. Создайте Connection:
   - **Connection type** - Site-to-site (IPsec)
   - **Virtual network gateway** - созданный шлюз
   - **Local network gateway** - созданный LNG
   - **Shared key** - сгенерируйте надежный ключ

4. Настройте IPsec/IKE Policy на Azure connection (Custom):
   - **IKE Phase 1**: AES256, SHA256, DHGroup14
   - **IPsec Phase 2**: GCMAES256, GCMAES256, PFS2048
   - **SA Lifetime**: 27000 секунд

5. На pfSense перейдите в **VPN - IPsec - Tunnels** и создайте Phase 1:
   - **Key Exchange Version** - IKEv2
   - **Remote Gateway** - публичный IP Azure VPN Gateway
   - **Pre-Shared Key** - ключ из Azure connection
   - **Encryption Algorithm** - AES 256
   - **Hash Algorithm** - SHA256
   - **DH Group** - 14 (2048 bit)
   - **Lifetime** - 27000

6. Добавьте Phase 2:
   - **Local Network** - LAN subnet
   - **Remote Network** - Azure VNet CIDR (например, 10.1.0.0/16)
   - **Encryption Algorithm** - AES 256-GCM, 128 bits
   - **PFS Key Group** - 14
   - **Lifetime** - 3600

7. Включите **Dead Peer Detection**: Threshold 10, Retry 3

8. Создайте правила файрвола на IPsec для разрешения трафика из Azure VNet

9. Проверьте состояние в **Status - IPsec** на pfSense и в Azure Portal - Connection Status

Дополнительные сведения о настройке интерфейсов описаны в разделе [интерфейсы pfSense](/docs/pfsense/interfaces/).

## OpenVPN с аутентификацией Active Directory

Интеграция OpenVPN с Active Directory позволяет использовать корпоративные учетные данные для аутентификации VPN-пользователей. pfSense поддерживает аутентификацию через LDAP-сервер AD.

### Пошаговая настройка

1. Перейдите в **System - User Manager - Authentication Servers** и добавьте LDAP-сервер:
   - **Type** - LDAP
   - **Hostname or IP address** - IP-адрес контроллера домена
   - **Port** - 636 (LDAPS) или 389 (LDAP)
   - **Transport** - SSL/TLS (рекомендуется)
   - **Peer Certificate Authority** - CA сертификат домена (импортируйте заранее)
   - **Protocol version** - 3
   - **Search scope** - Entire Subtree
   - **Base DN** - DC=corp,DC=example,DC=com
   - **Authentication Containers** - OU=Users,DC=corp,DC=example,DC=com
   - **Extended Query** - включите и укажите: `memberOf=CN=VPN_Users,OU=Groups,DC=corp,DC=example,DC=com`
   - **Bind Credentials** - DN и пароль сервисной учетной записи AD

2. Проверьте подключение кнопкой **Select a container** - если контейнеры отображаются, LDAP работает

3. Перейдите в **System - User Manager - Settings** и установите **Authentication Server** на созданный LDAP-сервер

4. Перейдите в **VPN - OpenVPN - Servers** и создайте сервер:
   - **Server mode** - Remote Access (SSL/TLS + User Auth)
   - **Backend for authentication** - выберите LDAP-сервер AD
   - **Protocol** - UDP on IPv4 only
   - **Local port** - 1194
   - **TLS Configuration** - включите TLS Key
   - **Peer Certificate Authority** - внутренний CA pfSense
   - **Server certificate** - сертификат OpenVPN-сервера
   - **Encryption Algorithm** - AES-256-GCM
   - **Auth digest algorithm** - SHA256
   - **IPv4 Tunnel Network** - 10.0.8.0/24
   - **IPv4 Local Network** - 192.168.1.0/24

5. Перейдите в **Firewall - Rules - WAN** и создайте правило:

```
Action: Pass
Protocol: UDP
Destination port: 1194
```

6. Перейдите в **Firewall - Rules - OpenVPN** и разрешите трафик VPN-клиентов в LAN

7. Установите пакет **OpenVPN Client Export**: System - Package Manager - openvpn-client-export

8. Экспортируйте конфигурации для клиентов: **VPN - OpenVPN - Client Export**

> **Важно**: сервисная учетная запись для LDAP-привязки должна иметь минимальные привилегии (только чтение). Используйте LDAPS (порт 636) для шифрования LDAP-трафика.

## WireGuard для мобильных устройств с QR-кодами

WireGuard обеспечивает высокопроизводительное VPN-подключение с минимальными накладными расходами. Генерация QR-кодов упрощает настройку на мобильных устройствах.

### Пошаговая настройка

1. Установите пакет WireGuard: **System - Package Manager - Available Packages - WireGuard**

2. Перейдите в **VPN - WireGuard - Settings** и включите WireGuard

3. Перейдите в **VPN - WireGuard - Tunnels** и создайте туннель:
   - **Description** - WAN WireGuard
   - **Listen Port** - 51820
   - **Interface Keys** - нажмите **Generate** для создания пары ключей
   - Сохраните публичный ключ сервера

4. Перейдите в **VPN - WireGuard - Peers** и добавьте пир для каждого мобильного устройства:
   - **Tunnel** - выберите созданный туннель
   - **Description** - имя устройства (например, iPhone-Admin)
   - **Public Key** - публичный ключ клиента (сгенерируйте на клиенте или через pfSense)
   - **Allowed IPs** - уникальный IP клиента (например, 10.0.9.2/32)
   - **Pre-shared Key** - сгенерируйте для дополнительной безопасности (опционально)

5. Назначьте интерфейс туннелю: **Interfaces - Assign** - выберите tun_wg0 и включите

6. Назначьте IP-адрес интерфейсу WireGuard: 10.0.9.1/24

7. Создайте правила файрвола:
   - На WAN: разрешите UDP 51820
   - На интерфейсе WireGuard: разрешите трафик из 10.0.9.0/24

8. Сгенерируйте конфигурацию клиента:

```ini
[Interface]
PrivateKey = <приватный_ключ_клиента>
Address = 10.0.9.2/32
DNS = 10.0.9.1

[Peer]
PublicKey = <публичный_ключ_сервера>
Endpoint = 203.0.113.1:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
```

9. Сгенерируйте QR-код из конфигурации. На машине с установленным `qrencode`:

```bash
qrencode -t ansiutf8 < client-wg.conf
```

Или используйте онлайн-генератор QR на локальной машине (не передавайте конфигурацию на внешние сервисы).

10. Откройте приложение WireGuard на мобильном устройстве, нажмите **+** и отсканируйте QR-код

Подробности настройки WireGuard описаны в разделе [VPN pfSense](/docs/pfsense/vpn/).

## Multi-WAN с отказоустойчивостью OpenVPN

При наличии нескольких WAN-каналов можно настроить автоматическое переключение OpenVPN-туннеля на резервный канал при сбое основного.

### Пошаговая настройка

1. Убедитесь, что [Multi-WAN](/docs/pfsense/multi-wan/) настроен и оба шлюза работают

2. Перейдите в **System - Routing - Gateway Groups** и создайте группу:
   - **Group Name** - VPN_Failover
   - **Gateway Priority**:
     - WAN_GW - Tier 1
     - WAN2_GW - Tier 2
   - **Trigger Level** - Packet Loss or High Latency

3. Перейдите в **VPN - OpenVPN - Servers**

4. В настройках OpenVPN-сервера:
   - **Interface** - выберите группу шлюзов VPN_Failover (или оставьте любой и настройте через outbound NAT)

5. Настройте **Firewall - NAT - Outbound**:
   - Переключите на **Hybrid Outbound NAT**
   - Создайте правило для OpenVPN-подсети через каждый WAN-интерфейс

6. Настройте правила файрвола на обоих WAN-интерфейсах для разрешения OpenVPN (UDP 1194)

7. На клиентской стороне добавьте в конфигурацию OpenVPN оба адреса сервера:

```
remote 203.0.113.1 1194 udp
remote 198.51.100.1 1194 udp
```

8. Протестируйте переключение: отключите основной WAN и убедитесь, что клиенты переподключаются через резервный канал

> **Важно**: при переключении WAN существующие OpenVPN-сессии разрываются. Клиенты должны быть настроены на автоматическое переподключение. Параметр `resolv-retry infinite` в конфигурации клиента обеспечивает повторные попытки подключения.

## VPN со Split DNS

Split DNS разделяет разрешение DNS-имен: корпоративные домены разрешаются через внутренний сервер через VPN, остальные запросы используют публичные DNS. Подробный рецепт настройки Split DNS описан в разделе [популярных рецептов конфигурации](/docs/pfsense/recipes/pfsense-common-recipes/#vpn-s-split-dns).

### Расширенная конфигурация с несколькими доменами

1. Настройте базовый OpenVPN-сервер согласно инструкции из общих рецептов

2. Перейдите в **Services - DNS Resolver** и добавьте несколько Domain Override:
   - **corp.example.com** - 10.0.1.10 (основной AD)
   - **dev.example.com** - 10.0.2.10 (среда разработки)
   - **staging.example.com** - 10.0.3.10 (staging-среда)

3. В настройках OpenVPN-сервера добавьте **Advanced Configuration**:

```
push "dhcp-option DOMAIN corp.example.com"
push "dhcp-option DOMAIN dev.example.com"
push "dhcp-option DOMAIN staging.example.com"
push "dhcp-option DNS 10.0.9.1"
```

4. Добавьте маршруты ко всем внутренним подсетям:
   - **IPv4 Local Network** - 10.0.1.0/24, 10.0.2.0/24, 10.0.3.0/24

5. Убедитесь, что на pfSense DNS Resolver слушает интерфейс OpenVPN-туннеля

6. Протестируйте разрешение корпоративных доменов через VPN-подключение с помощью `nslookup` или `dig`

Для устранения неполадок VPN-подключений обратитесь к [руководству по диагностике](/docs/pfsense/troubleshooting/pfsense-general-troubleshooting/).

