Пошаговая инструкция · Самостоятельная установка
Как установить WireGuard на сервер
Пошаговая инструкция для самостоятельной установки. Поднимем WireGuard на VPS и подключим один компьютер или телефон. IPv4-трафик клиента будет выходить в интернет через сервер; настроим ключи, маршруты и проверим соединение.
Что подготовить и как читать инструкцию #
Сервер будет 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 по ключам, отдельной веб-панели у него нет.
apt update
apt install wireguard-tools=1.0.20250521-1ubuntu1 iptables ufw
wg --versionwg --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.pubserver.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, чтобы она пережила перезагрузку.
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.
ufw allow 22/tcpВ правилах разрешён ваш настоящий SSH-порт.
Шаг 9. Откройте UDP-порт туннеля #
WireGuard принимает UDP 51820. Откройте его также в firewall провайдера. После включения UFW проверьте вход во втором SSH-окне, сохранив первое.
ufw allow 51820/udp
ufw enable
ufw status verboseSSH доступен, 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 wg0Handshake свежий, счётчики transfer увеличиваются.
Шаг 14. Проверьте IPv4 через VPN #
Следующие команды выполняйте на клиентском компьютере, а не на сервере. Проверяем внутренний адрес и внешний IP через туннель.
ping -c 3 10.77.0.1
curl -4 https://www.wireguard.com/
curl -4 https://1.1.1.1/cdn-cgi/trace10.77.0.1 отвечает; в trace значение ip соответствует публичному IPv4 сервера.
Шаг 15. Проверьте блокировку IPv6 #
Также на клиенте проверьте IPv6-запрос. Здесь IPv6-пакеты идут в туннель и блокируются сервером; это выбранное поведение, а не полная настройка IPv6-VPN.
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"/*Копия создана; для восстановления нужны конфигурация, ключи и сетевые правила вместе.
Если результат шага отличается #
Вернитесь к проверке того шага, на котором появилась ошибка. Первая ошибка в выводе обычно полезнее последних строк: последующие команды могли не получить нужный файл или работающую службу. Не повторяйте установку целиком поверх частично настроенного приложения.
Если страница не открывается, сначала проверьте домен и входящие порты, затем состояние приложения и его журнал. Если сайт открывается, но отдельное действие не работает, проверьте связанные компоненты — обработчик фоновых задач, почту или права пользователя. Официальные источники в конце статьи относятся к выбранному способу установки.