Настройка WireGuard на pfSense в 2023 году

Актуально на январь 2023 г.

Так часто встает задача предоставить доступ к RDP или веб серверу 1С офиса для удаленных пользователей из дома или даже из другой страны. И сделать бы это безопасно. С возможностью оперативной блокировать доступ того или иного персонажа....
Перебрал несколько англоязычных ресурсов по настройке WireGuard, творчески доработал и представляю вашему вниманию "туториал" по настройке WireGuard на pfSense.

Попробую изложить максимально подробно процесс настройки для людей слабо владеющих сетевыми технологиями (к которым я отношу и себя)
Источники, из которых черпал информацию
1. wundertech.net - How to Set Up WireGuard on pfSense
2. itigic.com - Как настроить сервер WireGuard VPN в pfSense
3. docs.netgate.com - Official Documentation on Netgate Docs
4. coygeek.com - Setup WireGuard VPN Server on Pfsense

Первое что хочу отметить - почему именно на pfSense. Во-первых, потому что pfSense предоставляет возможность гибкой настройки нескольких сетей, включая их объединение, проброс портов, раздачу адресов DHCP, раздачу интернета и фильтрация трафика.
Во вторых - благодаря pfSense я получаю web UI для WireGuard, то есть настройка VPN, добавление и удаление пользователей и мониторинг будет в удобной веб консоли.
Тестовая инфраструктура.
  • Windows 11 Hyper-V хостовая машина в подсети 192.168.88.xxx, построенной на роутере Keenetic с WiFi
  • Одна виртуальная машина Hyper-V с установленной PFSense версии 2.6, WAN интерфейс которой подключен к нашей сети роутера с адресом 192.168.88.201.
  • Мобильный телефон на андроид, подключенный к роутеру по WiFi с адресом 192.168.88.50
  • Несколько виртуальных машин в общей сети роутера или физические компьютеры в той же сети. В том числе Windows 11 машина с адресом 192.168.88.51
  • Роутер выходит в интернет, используя публичный (и желательно статический) IP
  • VPN должен работать в сети 10.10.0.XXX
Версия pfSense не ниже 2.6
Решаемая задача
Основная цель - предоставить безопасный канал для доступа к RDP и веб-серверу с 1С...., может еще сетевого каталога с документами.
То есть нам необходимо объединить несколько компьютеров находящихся внутри локальной сети, а также внешних машин в единую VPN.
Задачу передавать интернет через наш VPN пока не ставим. Это можно реализовать дополнительной настройкой, про которую лучше написать отдельно... Рекомендации по такой настройке можно найти на сайте mullvad.net - pfSense with WireGuard
Шаг 1. Устанавливаем пакет WireGuard
System -> Package Manager -> Available Packages
Находим: WireGuard (у меня версия 0.1.6_2) и устанавливаем.
  • Роутер выходит в интернет, используя публичный (и желательно статический) IP
Шаг 2. Добавляем туннель WireGuard
VPN -> WireGuard -> Add Tunnel

Enable: Да (оставляем)
Description: wg_testVPN_10_10_0  (Заполняем по своему усмотрению)
Listen Port: 51820 (можно любой не занятый порт). 
Interface keys: Заполнить кнопкой generate.

Шаг 3. Добавление Peer
Подготовим Android телефон. Скачаем официальное приложение WireGuard и создадим в приложении новый туннель, для которого сгенерируем пару ключей. Публичный ключ с ТУННЕЛЯ клиента нам потребуется для заполнения в ПИРЕ админки - передадим его на компьютер через какой-нибудь мессенджер или почту.
Вернемся в Админку pfSense, нажмем карандаш для редактирования ранее созданного в туннеля и добавим peer.
Add Peer

Enable: Да (оставляем)
Tunnel: tun_wg0 (wg_testVPN_10_10_0) - оставляем только что созданный туннель
Description: my Phone IP 2 - Указываем произвольную подсказку о клиенте
Dynamic EndPoint:  Да - оставляем включенным
Public key: ключ сгенерированный для ТУННЕЛЯ (!!!) на клиентском (!!!) устройстве
Pre-shared Key - оставим пустым
Allowed IP - 10.10.0.2/32
Шаг 4. Конфигурация Firewall
4.1 Firewall -> Rules -> WAN
Добавляем правило, позволяющее из внешей сети UDP трафик на порт 51820
Add

Action: pass (оставляем)
Interface WAN (оставляем)
Address Family: IPv4 (оставляем)
Protocol UDP (вместо TCP)
Источник: Any 
Destination: WAN adddress 
Destination Port: from 51820 to 51820
Description: Allow 51820 for testVPN
4.2 Firewall -> Rules -> WireGuard
Добавляем правило, позволяющее внутри VPN ходить любым пакетам без ограничений
Add

Добавляем Add
Action: Pass (оставляем)
Interface: WireGuard
Protocol  Any (вместо TCP)
Source Any
Destination Any
Description: Allow all in testVPN

Шаг 5. Активируем WireGuard
Админка PFSense -> VPN -> WireGuard -> вкладка Settings 
включаем Enable WireGuard - Да
Сохраняем, Save

Шаг 6. Настройка интерфейсов

Админка PFSense -> Interfaces -> Assignments
Находим Available networt ports (tun_wg0) и кликаем зеленую Add
Новому интерфейсу назначилось имя OPT1
Далее кликаем на полученном имени OPT1 (рядом с кнопкой Save)
И делаем некоторые настройки:

Enable Да
MTU укажите 1420 (важно, подробнее здесь) 
IPv4 Configuration type: Static IPv4
IPv4 Adress 10.10.0.1 / 24

Сохраняем и применяем настройки. Save, Apply changes

Шаг 7. Выносим на Dashboard мониторинг VPN

и перезапускаем WireGuard

Админка PFSense Status -> DashBoard 
В верхнем правом углу нажимаем + и добавляем панель Services Status
Аналогично, через + добавляем панель WireGuard
Перетаскиваем панели на верх.
Сохраняем настройки панелей дискеткой в верхнем правом углу.
Здесь же на панели перезапускаем службу WireGuard
Services Status -> WireGuard -> перезапускаем службу WireGuard

Шаг 8. Настройка клиента VPN на Android

Настройка на Android заключается в скачивании официального приложения.
Мы это уже ранее сделали….Также мы уже создали туннель, сгенерировали для него ключи и занести их в админке при создании peer.
Теперь вносим еще некоторые данные

Адреса: 10.10.0.2/32
Порт: 51820
DNS-серверы: пусто
MTU: пусто
Теперь добавляем peer и, как говорилось ранее, вносим в него публичный ключ тоннеля (!!!) админки

Публичный ключ (Public key): С/oyr.... (из тоннеля админки pfSense)
Общий ключ (Pre-shared key): оставляем пустым
Конечная точка (endpoint): 192.168.88.201:51820 
Разрешенные IP (Allowed IP): 10.10.0.0/24

Шаг 8. Настройка второго клиента VPN на Windows

Скачиваем официальный клиент WireGuard и, раскрыв список в нижнем левом углу добавляем пустой туннель. В нем будут заполнены только приватный и публичный ключ.
Копируем публичный ключ для заполнения нового пира в админке pfSense.
Возвращаемся в
админка pfSense -> VPN -> WireGuard, карандаш для редактирования нашего туннеля и в разделе Peers Configuration - > Add Peer
Добавляем новый Пир

Enabled: Да
Description: WinClient IP3
Public key: Согласно полученному только что Public Key тоннеля
Allowed IPs: 10.10.0.3/32
На клиенте Windows редактируем созданное ранее подключение

[Interface]
PrivateKey = Оставляем ранее сгенерированный на клиенте ключ
Address = 10.10.0.3/32

[Peer]
PublicKey = Публичный ключ туннеля админки
AllowedIPs = 10.10.0.0/24
Endpoint = 192.168.88.201:51820

Шаг 9. Запуск и проверка

Мы сделали все необходимые настройки и осталось запустить. Рекомендую лишь перезапуск сервера WireGuard или всей pfSense виртуальной машины (не обязательно)

Шаг 10. Проброс порта на роутере...

Смею предположить, что если вы поставили pfSense, то рассказывать как делать проброс порта на роутере уже не надо...

Телеграмм: t.me/GoloseevRU

e-mail для обратной связи: Blog@Goloseev.ru

Made on
Tilda