Языки программирования

Как создать свой VPN-сервер

Свой VPN-сервер чаще всего делают на WireGuard. Он быстрый, понятный по конфигам и хорошо подходит для личного доступа к своим устройствам, безопасного подключения к домашней сети или аккуратной работы через VPS. Но VPN не делает человека невидимым и не отменяет правила сервисов, законов и провайдера

Самый удобный вариант — VPS на Linux, открытый UDP-порт и один или несколько клиентских профилей. Не поднимайте VPN на случайном бесплатном сервере, если не понимаете, кто контролирует эту инфраструктуру

Что понадобится

Компонент Зачем нужен
VPS публичный сервер с белым IP
WireGuard VPN-протокол
UDP-порт 51820 частый порт для WireGuard
ключи сервера и клиентов взаимная авторизация
firewall контроль входящих подключений
DNS нормальное открытие сайтов у клиента
бэкап конфигов восстановление доступа

Если сервер нужен только для доступа к домашней сети, схема будет отличаться от “весь трафик через VPS”. Для новичка проще начать с одного клиента и полного маршрута через сервер

По этой теме полезно отдельно посмотреть Как я создал безопасные Firebase Cloud Functions с правами администратора и ограничением частоты запросов, чтобы расширить контекст и сравнить подходы

По этой теме полезно отдельно посмотреть Go и Rust: что выбрать для проекта, чтобы расширить контекст и сравнить подходы

Схема работы

телефон или ноутбук -> WireGuard tunnel -> VPS -> интернет

Клиент шифрует трафик до VPS. Дальше сервер отправляет его в интернет от своего IP. Для этого на сервере нужны IP forwarding и правила NAT

Ключи

WireGuard использует пару ключей для каждой стороны. Пример генерации:

umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
wg genkey | tee client_private.key | wg pubkey > client_public.key

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

Пример server config

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32

Имя внешнего интерфейса может быть не eth0. На VPS проверьте его командой:

ip route

Пример client config

[Interface]
Address = 10.8.0.2/32
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

AllowedIPs = 0.0.0.0/0, ::/0 означает, что клиент отправляет через VPN весь IPv4 и IPv6 трафик. Если нужен доступ только к внутренней сети, маршрут должен быть уже

PersistentKeepalive = 25 полезен для клиентов за NAT, особенно на мобильных сетях

Запуск и автозапуск

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
sudo wg show

Проверьте, что handshake появился после подключения клиента. Если handshake нет, проблема обычно в порте, IP, firewall или ключах

Firewall и маршрутизация

Проверьте:

UDP 51820 открыт
IP forwarding включен
NAT настроен на правильный внешний интерфейс
SSH не закрыт случайно
лишние порты закрыты

Для IPv4 forwarding обычно нужен параметр:

net.ipv4.ip_forward=1

Не применяйте firewall вслепую по чужой инструкции. Сначала убедитесь, что у вас есть доступ к консоли VPS через панель провайдера, если SSH случайно отвалится

Проверка

На клиенте:

подключиться к VPN
открыть сайт проверки IP
проверить DNS
проверить доступ к нужным ресурсам
отключить VPN и сравнить IP

На сервере:

sudo wg show

Смотрите latest handshake и объем переданных данных. Если handshake есть, но сайты не открываются, чаще всего проблема в NAT, DNS или маршрутах

Безопасность

  • один клиент — один ключ
  • потерянное устройство удаляйте из wg0.conf
  • не используйте один профиль для всех
  • храните копии конфигов в защищенном месте
  • обновляйте систему
  • не открывайте панели управления наружу
  • не обещайте VPN как абсолютную анонимность

VPN защищает канал до вашего сервера, но дальше трафик выходит в интернет с VPS. Владелец VPS и внешние сервисы все равно видят часть технической информации

Весь трафик или только нужная сеть

В клиентском профиле главный выбор — AllowedIPs

Настройка Что означает
0.0.0.0/0, ::/0 весь трафик идет через VPN
10.8.0.0/24 только VPN-сеть
192.168.1.0/24 доступ к домашней или внутренней сети

Если вам нужно просто подключаться к домашнему NAS или панели сервера, не обязательно гнать весь интернет через VPN. Если нужно, чтобы устройство выходило в интернет через VPS, тогда нужен полный маршрут и NAT

Как добавить новое устройство

Не копируйте старый профиль на новый телефон. Для каждого устройства создайте новую пару ключей и отдельный [Peer] на сервере:

телефон: 10.8.0.2
ноутбук: 10.8.0.3
планшет: 10.8.0.4

Так вы сможете отключить потерянный телефон, не ломая доступ ноутбуку. Это базовая гигиена VPN-сервера

Что записать после настройки

Сохраните в защищенном месте:

  • IP сервера
  • порт WireGuard
  • публичный ключ сервера
  • список клиентов и их адреса
  • где лежит wg0.conf
  • как перезапустить сервис
  • где лежит резервная копия конфигов

Без такой заметки через пару месяцев сложно понять, какой профиль чей и почему одно устройство еще подключается, а другое уже нет

Финальная проверка перед тем, как звать людей

Перед тем как отправлять ссылку или IP друзьям, сделайте короткий контрольный проход:

  • сервер запускается после перезапуска
  • вы знаете, где лежат конфиги и данные
  • есть свежий бэкап
  • открыты только нужные порты
  • обычный пользователь не получает лишние права
  • пароль или whitelist включены, если сервер закрытый
  • вы проверили вход с другого устройства
  • есть понятная инструкция для игроков

Это занимает 10 минут, зато спасает от типичной ситуации: все собрались играть, а владелец сервера одновременно чинит порт, ищет пароль, восстанавливает мир и объясняет, какую версию клиента ставить

Типичные вопросы

Что выбрать: WireGuard или OpenVPN?

Для нового личного сервера обычно проще WireGuard: меньше конфигов, хорошая скорость, удобные клиенты. OpenVPN все еще используют в старой инфраструктуре и корпоративных сценариях

Почему VPN подключается, но сайты не открываются?

Проверьте NAT, IP forwarding, DNS, AllowedIPs, firewall и правильный внешний интерфейс в PostUp

Можно ли сделать VPN дома?

Можно, если есть белый IP или настроенный доступ извне. Для новичка VPS проще, потому что у него уже есть публичный адрес

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x