Как настроить Wireguard VPN на Linux

Фотография ноутбука с настольным монитором рядом с ним.

Wireguard — это мощный демон виртуальной частной сети (VPN) с открытым исходным кодом, который может работать как на настольных, так и на мобильных устройствах. Он предоставляет быстрое и легковесное решение по сравнению с традиционными VPN, такими как IPsec и OpenVPN. Здесь мы покажем вам, как установить Wireguard и создать простую настройку VPN, используя три машины с Linux.

Содержание

  • Почему стоит использовать Wireguard в качестве решения VPN?
  • Получение Wireguard
  • Настройка сервера Wireguard
  • Настройка и подключение клиента Wireguard
  • Добавление второго клиента к серверу
  • Тестирование сети Wireguard

Почему стоит использовать Wireguard в качестве решения VPN?

Одним из главных преимуществ Wireguard является то, что это быстрый и легковесный демон VPN. В отличие от традиционных решений, Wireguard не добавляет много накладных расходов в вашу сеть. Это приводит к более низкой задержке и высокой общей пропускной способности между вашими узлами.

Терминал, показывающий тест iperf3 между двумя узлами Wireguard с высокой пропускной способностью.

Еще одной ключевой особенностью Wireguard является то, что он является модулем внутри ядра Linux. Это позволяет ему работать без использования дополнительных системных ресурсов вашего компьютера, что делает его идеальным выбором для развертывания на устройствах низкого класса и SOC.

Терминал, показывающий Wireguard, загруженный в ядре Linux.

Наконец, Wireguard также использует современные криптографические стандарты и практики разработки. У него также было несколько формальных проверок, которые подтверждают правильность кода Wireguard, гарантии безопасности и способность противостоять атакам.

Кстати: все еще не уверены в Wireguard? Узнайте, как Wireguard сравнивается с OpenVPN.

Получение Wireguard

Первый шаг для настройки Wireguard на Linux — это загрузить его основные инструменты из репозитория вашей дистрибуции. Это позволяет вам управлять встроенным модулем ядра Wireguard с помощью команд пользовательского пространства.

Чтобы установить основные инструменты в Ubuntu и Debian, выполните следующую команду:

sudo apt install wireguard wireguard-tools

В Fedora вы можете использовать менеджер пакетов dnf:

sudo dnf install wireguard-tools

Для Arch Linux вы можете запустить pacman, чтобы получить основные инструменты Wireguard:

sudo pacman -S wireguard-tools

Подтвердите, что вы правильно установили инструменты Wireguard, загрузив его экран помощи:

wg -h

Терминал, показывающий меню помощи для инструмента пользовательского пространства Wireguard.

Настройка сервера Wireguard

Предположение: В этой статье предполагается, что вы устанавливаете сервер Wireguard на системе Linux с общедоступным IPv4-адресом. Инструкции также будут работать на сервере за NAT, но он не сможет найти узлы вне своей подсети.

С установленным основным набором инструментов Wireguard на ваших машинах с Linux вы можете настроить узел сервера вашей VPN. Это будет служить интернет-шлюзом для ваших клиентских узлов в сети.

Начните с перехода в каталог конфигурации Wireguard и установите его разрешения по умолчанию на “только для root:”:

cd/etc/wireguard  
sudo umask 077

Примечание: некоторые системы могут не позволить вам зайти в папку “/etc/wireguard” как обычному пользователю. Чтобы это исправить, переключитесь на пользователя root, используя sudo -s.

Сгенерируйте открытый и закрытый ключ для вашего сервера Wireguard:

sudo sh -c 'wg genkey | tee /etc/wireguard/server-private-key | wg pubkey > /etc/wireguard/server-public-key'

Создайте файл конфигурации вашего сервера, используя ваш любимый текстовый редактор:

sudo nano /etc/wireguard/wg0.conf

Вставьте следующий блок кода в файл конфигурации вашего сервера:

[Interface]  
PrivateKey= ВСТАВЬТЕ-ВАШ-ЗАКРЫТЫЙ-КЛЮЧ-СЕРВЕРА-ЗДЕСЬ  
Address= 10.0.0.1/32  
ListenPort= 60101  
PostUp= iptables -t nat -I POSTROUTING -o ИНТЕРФЕЙС-СЕТИ-ЗДЕСЬ -j MASQUERADE  
PostDown= iptables -t nat -D POSTROUTING -o ИНТЕРФЕЙС-СЕТИ-ЗДЕСЬ -j MASQUERADE

Откройте новую сессию терминала, затем выведите закрытый ключ Wireguard вашего сервера:

sudo cat /etc/wireguard/server-private-key

Скопируйте закрытый ключ вашего сервера в буфер обмена.

Терминал, показывающий процесс копирования закрытого ключа сервера на Ubuntu.

Замените значение переменной PrivateKey на ключ из вашего буфера обмена.

Терминал, показывающий закрытый ключ сервера в конфигурации Wireguard сервера.

Найдите сетевой интерфейс, который имеет доступ к интернету, используя команду ip:

ip route get 8.8.8.8

Установите значение флага -o в переменных PostUp и PostDown на интерфейс с доступом в интернет, затем сохраните файл конфигурации.

Терминал, показывающий правильное имя устройства в конфигурационном файле сервера Wireguard.

Откройте файл “/etc/sysctl.conf” сервера, используя ваш любимый текстовый редактор:

sudo nano /etc/sysctl.conf

Прокрутите вниз до строки, содержащей net.ipv4.ip_forward=1, затем удалите символ решетки (#) перед ней.

Терминал, подчеркивающий местоположение параметра пересылки IPv4 в sysctl.conf.

Перезагрузите вашу новую конфигурацию sysctl, выполнив: sudo sysctl -p.

К сведению: Wireguard не единственное решение VPN, которое вы можете запустить на Linux. Узнайте, как создать свою собственную VPN с помощью OpenVPN.

Настройка и подключение клиента Wireguard

На этом этапе у вас теперь есть правильно настроенный сервер Wireguard без каких-либо пиров. Чтобы использовать его, вам нужно настроить и подключить вашего первого клиента Wireguard.

Перейдите в каталог конфигурации Wireguard вашей клиентской системы и установите его разрешения по умолчанию:

cd/etc/wireguard  
sudo umask 077

Сгенерируйте пару ключей Wireguard для вашего клиента, используя следующую команду:

sudo sh -c 'wg genkey | tee /etc/wireguard/client1-private-key | wg pubkey > /etc/wireguard/client1-public-key'

Создайте файл конфигурации клиента Wireguard, используя ваш любимый текстовый редактор:

sudo nano /etc/wireguard/wg0.conf

Вставьте следующий блок кода в файл конфигурации вашего клиента:

[Interface]  
PrivateKey= ВСТАВЬТЕ-ВАШ-ЗАКРЫТЫЙ-КЛЮЧ-КЛИЕНТА1-ЗДЕСЬ  
Address= 10.0.0.2/32  
ListenPort= 60101  
  
[Peer]  
PublicKey= ВСТАВЬТЕ-ВАШ-ОТКРЫТЫЙ-КЛЮЧ-СЕРВЕРА-ЗДЕСЬ  
AllowedIPs= 0.0.0.0/0  
Endpoint= ВСТАВЬТЕ-ВАШ-АДРЕС-IP-СЕРВЕРА-ЗДЕСЬ:60101  
PersistentKeepalive= 25

Замените переменную PrivateKey на закрытый ключ вашего клиента.

Терминал, подчеркивающий закрытый ключ для первого клиента Wireguard.

Откройте терминальную сессию вашего сервера Wireguard, затем выведите его открытый ключ:

sudo cat /etc/wireguard/server-public-key

Установите значение переменной PublicKey на открытый ключ вашего сервера.

Терминал, подчеркивающий открытый ключ сервера Wireguard во втором конфигурационном файле клиента.

Измените переменную Endpoint на IP-адрес вашего сервера Wireguard.

Терминал, подчеркивающий IP-адрес для сервера Wireguard.

Сохраните файл конфигурации, затем используйте команду wg-quick, чтобы запустить клиент Wireguard:

sudo wg-quick up wg0

Терминал, показывающий процесс запуска демона клиента Wireguard.

Примечание: эта команда отключит сетевую связь вашего клиента, пока вы не запустите сервер Wireguard. Чтобы вернуться к вашей первоначальной сети, выполните sudo wg-quick down wg0.

Связывание сервера Wireguard с клиентом

Перейдите в терминальную сессию вашего сервера Wireguard, затем откройте его файл конфигурации:

sudo nano /etc/wireguard/wg0.conf

Вставьте следующий блок кода после секции [Interface]:

[Peer]  
PublicKey= ВСТАВЬТЕ-ВАШ-ОТКРЫТЫЙ-КЛЮЧ-КЛИЕНТА1-ЗДЕСЬ  
AllowedIPs= 10.0.0.2/32  
PersistentKeepalive= 25

Установите переменную PublicKey на открытый ключ вашего клиента Wireguard.

Терминал, показывающий местоположение блока [Peer] и подчеркивающий открытый ключ клиента.

Примечание: вы можете получить открытый ключ, выполнив sudo cat /etc/wireguard/client1-public-key на вашем клиентском компьютере.

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

sudo wg-quick up wg0

Добавление второго клиента к серверу

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

Чтобы сделать это в Wireguard, вам нужно создать файл конфигурации для нового VPN-интерфейса на вашем сервере. Самый простой способ сделать это — скопировать текущую конфигурацию сервера и дать копии новое имя:

sudo cp /etc/wireguard/wg0.conf /etc/wireguard/wg1.conf

Откройте новый файл конфигурации, используя ваш любимый текстовый редактор:

sudo nano /etc/wireguard/wg1.conf

Установите переменную ListenPort на 60102. Это предотвратит любые конфликты портов между интерфейсами VPN wg0 и wg1.

Терминал, подчеркивающий измененную переменную ListenPort для второго интерфейса Wireguard.

Перейдите в секцию [Peer] и измените переменную AllowedIPs с “10.0.0.2/32” на “10.0.0.3/32”, затем сохраните файл конфигурации.

Терминал, подчеркивающий измененную переменную AllowedIPs для второго клиента Wireguard.

Настройка второго клиента Wireguard

Войдите на вашу вторую машину, затем подготовьте каталог конфигурации Wireguard:

cd/etc/wireguard  
sudo umask 077

Сгенерируйте новую пару ключей Wireguard, используя следующую команду:

sudo sh -c 'wg genkey | tee /etc/wireguard/client2-private-key | wg pubkey > /etc/wireguard/client2-public-key'

Создайте новый файл конфигурации, используя ваш любимый текстовый редактор:

sudo nano /etc/wireguard/wg0.conf

Вставьте следующий блок кода в ваш новый файл конфигурации:

[Interface]  
PrivateKey= ВСТАВЬТЕ-ВАШ-ЗАКРЫТЫЙ-КЛЮЧ-КЛИЕНТА2-ЗДЕСЬ  
Address= 10.0.0.3/32  
ListenPort= 60102  
  
[Peer]  
PublicKey= ВСТАВЬТЕ-ВАШ-ОТКРЫТЫЙ-КЛЮЧ-СЕРВЕРА-ЗДЕСЬ  
AllowedIPs= 0.0.0.0/0  
Endpoint= ВСТАВЬТЕ-ВАШ-АДРЕС-IP-СЕРВЕРА-ЗДЕСЬ:60102  
PersistentKeepalive= 25

Установите переменную PrivateKey на закрытый ключ вашей второй машины, затем измените переменную PublicKey на открытый ключ вашего сервера.

Замените переменную Endpoint на IP-адрес вашего сервера, за которым следует “:60102.”

Сохраните файл конфигурации, затем запустите клиент Wireguard на второй машине:

sudo wg-quick up wg0

Связывание второго клиента с сервером Wireguard

Снова войдите на ваш сервер Wireguard, затем откройте конфигурацию VPN интерфейса для вашего второго клиента:

sudo nano /etc/wireguard/wg1.conf

Прокрутите вниз до секции [Peer], затем замените переменную PublicKey на открытый ключ вашего второго клиента.

Терминал, подчеркивающий открытый ключ второго клиента внутри конфигурационного файла сервера wg1.

Сохраните файл конфигурации, затем запустите второй VPN интерфейс, используя команду wg-quick:

sudo wg-quick up wg1

Подтвердите, что ваши первый и второй клиенты Wireguard отображаются правильно на вашем сервере, выполнив wg.

Терминал, показывающий два клиентских узла, общающихся с сервером Wireguard.

Тестирование сети Wireguard

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

sudo apt install net-tools curl

В Fedora вам нужно установить только curl, так как он уже поставляется с сетевыми инструментами прямо из коробки:

sudo dnf install curl

Для Arch Linux вы можете использовать pacman, чтобы установить сетевые инструменты и curl:

sudo pacman -S traceroute curl

Начните с отслеживания маршрута пакета между двумя клиентами. Следующее покажет, как IP-пакет идет от “10.0.0.2” к “10.0.0.3:”:

traceroute 10.0.0.3

Проверьте, может ли любой из ваших узлов получить доступ к общедоступному интернету, пингуя общий IP-адрес:

ping -c 5 8.8.8.8

Терминал, показывающий задержку от сети Wireguard к внешнему сайту.

Наконец, подтвердите, что ваши узлы имеют один и тот же публичный IP-адрес к вашему серверу Wireguard:

curl ipinfo.io/ip

Терминал, подчеркивающий аналогичный внешний IP-адрес на трех узлах Wireguard.

Изучение настройки сети Wireguard на Linux — это первый шаг к исследованию увлекательного мира VPN. Погрузитесь глубже и посмотрите наши рекомендации по лучшим провайдерам VPN, ориентированным на безопасность, которые вы можете получить сегодня.

Фото: Kari Shea через Unsplash и Wikimedia Commons. Все изменения и скриншоты сделаны Рамсесом Редом.