Удельта

Пошаговая инструкция · Самостоятельная установка

Как установить WireGuard на сервер

Пошаговая инструкция для самостоятельной установки. Поднимем WireGuard на VPS и подключим один компьютер или телефон. IPv4-трафик клиента будет выходить в интернет через сервер; настроим ключи, маршруты и проверим соединение.

Первое защищённое VPN-соединение между двумя устройствами проходит по изолированному каналу

Что подготовить и как читать инструкцию #

Сервер будет VPN-шлюзом с публичным IPv4 и открытым UDP-портом 51820. Клиент получит внутренний адрес 10.77.0.2, сервер — 10.77.0.1. Пример подходит для отдельного VPS с одним внешним интерфейсом. До начала выберите подсеть, которая не пересекается с домашней, офисной и другими VPN-сетями.

Начать можно с 1–2 vCPU и 1 ГБ RAM, но скорость зависит также от процессора, канала и лимита трафика провайдера. Для выбора тарифа используйте руководство по серверу для WireGuard. О том, для каких задач подходит VPN, рассказываем на странице WireGuard.

Команды выполняйте в терминале сервера после подключения по SSH, если шаг не указывает другое место. sudo даёт команде права администратора. Действия в браузере выполняйте на своём компьютере. Домены, IP-адреса и значения ВАШ_ПАРОЛЬ из примеров заменяйте своими до выполнения команды.

Двигайтесь по одному шагу и проверяйте результат перед следующим. Блок с <<EOF или другим именем завершения копируйте целиком: он записывает содержимое одного файла. При работе в nano сохраняйте файл клавишами Ctrl+O, Enter и выходите Ctrl+X. Если прервали SSH-сеанс, снова перейдите в указанный каталог; переменные предыдущего сеанса потребуется задать заново.

Шаг 1. Откройте административный терминал #

Команды настройки сети ниже выполняются от root. sudo -i открывает отдельную административную оболочку; её приглашение обычно заканчивается #.

Откройте административный терминал
sudo -i

Вы работаете от root; после окончания выйдите командой exit.

Шаг 2. Установите инструменты WireGuard #

Установим выбранный пакет и средства сетевых правил. Это VPN по ключам, отдельной веб-панели у него нет.

Установите инструменты WireGuard
apt update
apt install wireguard-tools=1.0.20250521-1ubuntu1 iptables ufw
wg --version

wg --version показывает установленный инструмент.

Шаг 3. Создайте ключи сервера #

Закрытый ключ остаётся на сервере, публичный передаётся клиенту. Каталог защищён от постороннего чтения. Генерация предназначена новой установке: не заменяйте рабочий ключ без плана.

Создайте ключи сервера
install -d -m 0700 /etc/wireguard
umask 077
wg genkey > /etc/wireguard/server.key
wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub
cat /etc/wireguard/server.pub

server.key и server.pub существуют; сохраните только вывод публичного ключа для клиента.

Шаг 4. Узнайте внешний сетевой интерфейс #

В ответе найдите имя после dev. В шаблоне используется ens3; замените его своим интерфейсом во всех правилах PostUp/PostDown.

Узнайте внешний сетевой интерфейс
ip -4 route get 1.1.1.1

Вы записали настоящий внешний интерфейс, а не wg0.

Шаг 5. Создайте ключ клиента #

На своём компьютере или телефоне установите официальный WireGuard и создайте пустой туннель. Клиент сгенерирует собственную пару ключей. Скопируйте его публичный ключ на сервер; закрытый оставьте на устройстве.

Есть CLIENT_PUBLIC_KEY и клиентский закрытый ключ; они отличаются от серверной пары.

Шаг 6. Сохраните конфигурацию сервера #

Замените CLIENT_PUBLIC_KEY публичным ключом устройства, ens3 — именем внешнего интерфейса. Внутренняя сеть 10.77.0.0/24 не должна совпадать с вашей локальной. PrivateKey подставляется из server.key автоматически. Правила NAT выпускают IPv4 через сервер, IPv6 в этом примере блокируется.

Сохраните конфигурацию сервера
umask 077
cat > /etc/wireguard/wg0.conf <<EOF
[Interface]
Address = 10.77.0.1/24, fd77:77::1/64
ListenPort = 51820
PrivateKey = $(cat /etc/wireguard/server.key)
PostUp = iptables -I FORWARD 1 -i %i -o ens3 -s 10.77.0.0/24 -j ACCEPT
PostUp = iptables -I FORWARD 1 -i ens3 -o %i -d 10.77.0.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -s 10.77.0.0/24 -o ens3 -j MASQUERADE
PostUp = ip6tables -I FORWARD 1 -i %i -j REJECT
PostDown = iptables -D FORWARD -i %i -o ens3 -s 10.77.0.0/24 -j ACCEPT
PostDown = iptables -D FORWARD -i ens3 -o %i -d 10.77.0.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -s 10.77.0.0/24 -o ens3 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i %i -j REJECT

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.77.0.2/32, fd77:77::2/128
EOF
chmod 600 /etc/wireguard/wg0.conf

В wg0.conf нет CLIENT_PUBLIC_KEY и неверного ens3; файл закрыт правами 600.

Шаг 7. Разрешите пересылку IPv4 #

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

Разрешите пересылку IPv4
cat > /etc/sysctl.d/70-wireguard-routing.conf <<'EOF'
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.d/70-wireguard-routing.conf

Вывод содержит net.ipv4.ip_forward = 1.

Шаг 8. Сохраните доступ по SSH #

Сначала разрешите порт SSH. В примере это 22; если провайдер дал другой порт, замените его до включения firewall.

Сохраните доступ по SSH
ufw allow 22/tcp

В правилах разрешён ваш настоящий SSH-порт.

Шаг 9. Откройте UDP-порт туннеля #

WireGuard принимает UDP 51820. Откройте его также в firewall провайдера. После включения UFW проверьте вход во втором SSH-окне, сохранив первое.

Откройте UDP-порт туннеля
ufw allow 51820/udp
ufw enable
ufw status verbose

SSH доступен, UDP 51820 разрешён.

Шаг 10. Заполните туннель на устройстве #

Шаблон ниже относится клиенту. Вставьте его в настройку туннеля WireGuard: PrivateKey — закрытый ключ этого устройства, PublicKey в Peer — публичный ключ сервера. Endpoint замените публичным IPv4 сервера. AllowedIPs направляет весь трафик в туннель, включая блокируемый в этом примере IPv6.

Заполните туннель на устройстве
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.77.0.2/32, fd77:77::2/128
DNS = 1.1.1.1

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

В клиенте нет примерных ключей или IP; закрытый ключ сервера нигде не передан.

Шаг 11. Запустите серверный туннель #

В терминале сервера включим службу wg-quick@wg0 и запуск после перезагрузки. Она читает сохранённый wg0.conf.

Запустите серверный туннель
systemctl enable --now wg-quick@wg0

Служба запущена; далее посмотрим её состояние.

Шаг 12. Проверьте состояние сервера #

Status показывает запуск, wg — ключи и peer, journalctl — ошибки правил. Handshake появится после включения клиента, не до него.

Проверьте состояние сервера
systemctl status wg-quick@wg0 --no-pager
wg show wg0
journalctl -u wg-quick@wg0 -n 50 --no-pager

Интерфейс wg0 активен; журнал не содержит ошибки сетевого интерфейса или ключа.

Шаг 13. Включите туннель на устройстве #

Теперь активируйте клиентский туннель. На сервере снова выполните wg show wg0 и найдите latest handshake.

Включите туннель на устройстве
wg show wg0

Handshake свежий, счётчики transfer увеличиваются.

Шаг 14. Проверьте IPv4 через VPN #

Следующие команды выполняйте на клиентском компьютере, а не на сервере. Проверяем внутренний адрес и внешний IP через туннель.

Проверьте IPv4 через VPN
ping -c 3 10.77.0.1
curl -4 https://www.wireguard.com/
curl -4 https://1.1.1.1/cdn-cgi/trace

10.77.0.1 отвечает; в trace значение ip соответствует публичному IPv4 сервера.

Шаг 15. Проверьте блокировку IPv6 #

Также на клиенте проверьте IPv6-запрос. Здесь IPv6-пакеты идут в туннель и блокируются сервером; это выбранное поведение, а не полная настройка IPv6-VPN.

Проверьте блокировку IPv6
curl -6 --max-time 10 https://www.wireguard.com/

Запрос не проходит через обычное соединение клиента. Если проходит, проверьте AllowedIPs и активный туннель.

Шаг 16. Добавляйте устройства с разными ключами #

Для нового устройства повторите генерацию его пары ключей и добавьте новый Peer на сервере с отдельным адресом, например 10.77.0.3/32. Не передавайте двум устройствам одну клиентскую конфигурацию.

У каждого устройства собственный публичный ключ и внутренний адрес.

Шаг 17. Сохраните закрытую копию настроек #

На сервере сохраним ключи, туннель, маршрутизацию, правила и версию. Архив даёт доступ к VPN и должен находиться в закрытом внешнем хранилище.

Сохраните закрытую копию настроек
set -e
BACKUP_DIR="/var/backups/wireguard/$(date -u +%Y%m%dT%H%M%SZ)"
install -d -m 0700 "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/wireguard.tar.gz" -C / \
  etc/wireguard etc/sysctl.d/70-wireguard-routing.conf
ufw status verbose > "$BACKUP_DIR/firewall.txt"
dpkg-query -W wireguard-tools > "$BACKUP_DIR/version.txt"
chmod 600 "$BACKUP_DIR"/*

Копия создана; для восстановления нужны конфигурация, ключи и сетевые правила вместе.

Если результат шага отличается #

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

Если страница не открывается, сначала проверьте домен и входящие порты, затем состояние приложения и его журнал. Если сайт открывается, но отдельное действие не работает, проверьте связанные компоненты — обработчик фоновых задач, почту или права пользователя. Официальные источники в конце статьи относятся к выбранному способу установки.

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

Материал был полезен?

Сообщить об ошибке или задать вопрос редакции

Сообщение увидит редакция. Не указывайте пароли и личные данные. Текст удаляется через 180 дней.

О материале

ИнфраструктураРуководствоЗадача: установитьУровень: практикаWireGuard

Последнее обновление:

Обсуждение

Комментарии проходят подтверждение адреса и проверку редакцией.