2 min read

Свой VPN «в кармане»: Настройка WireGuard на FreeBSD (Vultr) для iOS и macOS

Если вы находитесь в регионе с нестабильным интернетом или жесткой цензурой (как я сейчас в Багдаде), наличие собственного VPN на надежном VPS — это не роскошь, а вопрос цифровой гигиены.

В этой статье мы быстро поднимем WireGuard на FreeBSD (используя сервер Vultr), настроим NAT через файрвол PF и создадим конфигурацию для мгновенного подключения iPhone и Mac через QR-код.


Почему FreeBSD и WireGuard?

  • Производительность: WireGuard работает в ядре FreeBSD, что дает минимальные задержки (важно для работы и трейдинга).
  • Нативность: iOS и macOS имеют отличные официальные клиенты.
  • Простота: Конфигурация в разы короче, чем у OpenVPN или IPsec.

Шаг 1: Установка необходимых пакетов

Заходим на сервер по SSH и устанавливаем инструменты:

Bash

pkg update
pkg install wireguard-tools libqrencode

Для максимальной скорости включим поддержку модуля ядра:

Bash

kldload if_wg
echo 'if_wg_load="YES"' >> /boot/loader.conf

Шаг 2: Генерация ключей

Нам нужно создать две пары ключей: для сервера и для вашего iPhone/Mac.

Bash

cd /usr/local/etc/wireguard
# Ключи сервера
wg genkey | tee server.key | wg pubkey > server.pub
# Ключи клиента
wg genkey | tee client.key | wg pubkey > client.pub

# Ограничим права доступа для безопасности
chmod 600 *.key

Шаг 3: Конфигурация сервера (wg0.conf)

Создаем файл /usr/local/etc/wireguard/wg0.conf.

Важно: Замените текстовые заглушки на содержимое ваших файлов .key и .pub.

Ini, TOML

[Interface]
PrivateKey = <содержимое server.key>
Address = 10.8.0.1/24
ListenPort = 51820

[Peer]
PublicKey = <содержимое client.pub>
AllowedIPs = 10.8.0.2/32

Шаг 4: Настройка роутинга и NAT (PF)

Чтобы сервер не просто принимал пакеты, а «выпускал» их в интернет, настроим файрвол PF. Создайте или отредактируйте /etc/pf.conf:

Plaintext

# Замените vtnet0 на ваш интерфейс (см. ifconfig)
ext_if = "vtnet0"
wg_if = "wg0"
wg_net = "10.8.0.0/24"

set skip on lo0
scrub in all

# NAT: превращаем VPS в шлюз
nat on $ext_if from $wg_net to any -> ($ext_if)

# Разрешаем входящий UDP для WireGuard
pass in on $ext_if proto udp from any to any port 51820
pass on $wg_if all
pass out all

Включаем автозапуск служб в /etc/rc.conf:

Bash

sysrc pf_enable="YES"
sysrc gateway_enable="YES"
sysrc wireguard_enable="YES"
sysrc wireguard_interfaces="wg0"

Запускаем всё:

Bash

sysctl net.inet.ip.forwarding=1
service pf start
service wireguard start

Шаг 5: Создание конфига для iOS / macOS

Для удобства создадим файл client.conf. Его мы позже превратим в QR-код.

Ini, TOML

[Interface]
PrivateKey = <содержимое client.key>
Address = 10.8.0.2/24
DNS = 1.1.1.1, 8.8.8.8
MTU = 1280

[Peer]
PublicKey = <содержимое server.pub>
Endpoint = <IP_ВАШЕГО_СЕРВЕРА>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20

Шаг 6: Подключение (QR-код)

Теперь самое приятное. Генерируем QR-код прямо в терминале:

Bash

qrencode -t ansiutf8 < /usr/local/etc/wireguard/client.conf
  1. Откройте приложение WireGuard на iPhone.
  2. Нажмите «Добавить туннель» -> «Сканировать QR-код».
  3. Назовите подключение (например, Vultr-EU) и пользуйтесь!

Советы для путешественников

  • Если не подключается: В Багдаде или других странах с ограничениями порт 51820 может быть закрыт. Попробуйте сменить ListenPort на сервере и Endpoint в клиенте на 443 или 53.
  • MTU: Значение 1280 — самое безопасное для мобильных сетей (4G/LTE), оно предотвращает обрыв сессий при фрагментации пакетов.

Автор: Пилот B-738, вещающий из Багдада.