Свой 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
- Откройте приложение WireGuard на iPhone.
- Нажмите «Добавить туннель» -> «Сканировать QR-код».
- Назовите подключение (например,
Vultr-EU) и пользуйтесь!
Советы для путешественников
- Если не подключается: В Багдаде или других странах с ограничениями порт
51820может быть закрыт. Попробуйте сменитьListenPortна сервере иEndpointв клиенте на443или53. - MTU: Значение
1280— самое безопасное для мобильных сетей (4G/LTE), оно предотвращает обрыв сессий при фрагментации пакетов.
Автор: Пилот B-738, вещающий из Багдада.
Member discussion