Что такое WireGuard?
WireGuard — относительно новый участник на сцене программного обеспечения VPN, со смелым обещанием свергнуть OpenVPN с вершины с точки зрения скорости, простоты использования и возможности аудита. Чтобы быть конкурентоспособным с IPsec внутри ядра с точки зрения производительности, WireGuard реализует свой путь к данным в ядре. Но чтобы избежать ловушек сложной плоскости управления IPsec с отслеживанием состояния, WireGuard позволяет настраивать и администрировать ее через виртуальный интерфейс без сохранения состояния с использованием стандарта и инструментов. Модуль ядра WireGuard реализован с использованием менее 4000 строк кода (что составляет всего 1% от реализаций OpenVPN или IPsec) и использует современную проверенную криптографию. Такая минимальная кодовая база способствует тщательному и своевременному аудиту безопасности со стороны сообщества при постоянных обновлениях.
Будет ли WireGuard выполнить свое обещание, еще неизвестно, но пока что он продемонстрировал большой успех в росте своей популярности. Тот факт, что WireGuard вошел в ядро Linux 5.6, является твердым свидетельством его надежности. Как Линус однажды выразился, это просто произведение искусства.
Automatic-Restart When VPN Connection Drops
Sometimes the VPN connection would drop due to various reasons. You can run the following command to check if the VPN client can ping the VPN server’s private IP address (10.10.10.1). If the ping is unsuccessful, then the command on the right will be executed to restart the VPN client. is the OR operator in Bash. It executes the command on the right only if the command on the left returned an error.
ping -c9 10.10.10.1 > /dev/null || systemctl restart
The ping will be done 9 times, i.e 9 seconds. You can use a for loop in the Bash shell to make the whole command run 6 times, i.e. 54 seconds.
for ((i=1; i<=6; i++)) do (ping -c9 10.10.10.1 > /dev/null || systemctl restart ) done
Now we can create a Cron job to automate this task. Edit the root user’s crontab file on the VPN client.
sudo crontab -e
Bash isn’t the default shell in Cron. You can add the following line at the beginning of the Crontab file to make it the default.
SHELL=/bin/bash
Then add the following line at the end of this file.
* * * * * for ((i=1; i<=6; i++)) do (ping -c9 10.10.10.1 > /dev/null || systemctl restart ) done
This Cron job will run every minute, and there will be 6 checks every minute. Save and close the file.
Настройка WireGuard сервера в Linux
Существует скрипт для быстрого развертывания WireGuard. Он поддерживает не только Ubuntu, но и Debian, Fedora, CentOS, Artch Linux и Oracle Linux. Этот скрипт работает аналогично скрипту для простого развертывания OpenVPN. Программа задаст несколько вопросов, установит WireGuard и сгенерирует конфигурационные файлы для сервера и клиента. После установки с помощью скрипта можно добавлять новых клиентов, ограничивать доступ для старых или полностью удалить WireGuard. Таким образом, можно детально не разбираться самому как настроить WireGuard.
Выполните следующую команду для того чтобы скачать последнюю версию скрипта с GitHub:
Затем дайте файлу скрипта права на выполнение:
Прежде чем запускать скрипт желательно посмотреть публичный IP вашего сервера. Для этого можно воспользоваться командой:
Команда отобразит список сетевых интерфейсов и их IP адреса. Как правило, реальный сетевой интерфейс имеет состояние UP. В данном случае это ens0. Если вы хотите подключатся к VPN серверу из интернет или обойти блокировки, вам необходимо установить его на VPS или другой сервер в сети. Список VPS для VPN можно найти здесь.
Для запуска скрипта выполните команду:
Первые два вопроса будут о внешнем IP адресе и сетевом интерфейсе, которые вы посмотрели ранее. Если у вас только один интерфейс, скорее всего, программа определит их верно. Если же несколько, возможно придется поправить:
Далее нужно выбрать имя сетевого интерфейса для WireGuard, можно оставить по умолчанию:
Следующие два вопроса — желаемый IP адрес сервера WireGuard в создаваемой виртуальной сети для IPv4 и IPv6. По умолчанию скрипт предлагает использовать 10.66.66.1:
На следующем шаге нужно настроить порт, на котором будет доступен WireGuard:
WireGuard умеет менять настройки DNS клиентов при подключении. На этом шаге можно указать DNS серверы, которые следует использовать:
После этого нажмите любую клавишу для того чтобы запустить установку необходимых пакетов и создание конфигурационных файлов:
После того как установка завершится скрипт предложит создать конфигурацию для первого клиента. Достаточно ввести имя. Оно не должно быть длиннее 15 символов:
Далее надо указать желаемый IP адрес клиента IPv4 и IPv6. Здесь IP адрес задается при создании конфигурации и для каждого клиента всегда будет статическим:
После этого скрипт сообщит что конфигурация создана и вы можете скачать её на свой компьютер или отсканировать QR код на телефоне:
Настройка сервера WireGuard завершена. Теперь можно переходить к настройке клиента.
Подключение клиента
Для примера мы установим и настроим клиентов для Windows и Linux. Настройка будет выполнена в четыре шага:
- Смотрим ключ на сервере.
- Настраиваем клиента.
- Настраиваем сервер.
- Проверяем подключение.
1. Ключ на сервере
На сервере смотрим публичный ключ, который мы генерировали в начале инструкции:
cat /etc/wireguard/public.key
В моем случае это было:
Z5E6sWmAX9JqSBpO2frcIZ9vkkm/V+8xgP7ZxWXnOCs=
Фиксируем — его мы будем использовать для настройки клиентов.
2. Настройка клиента
В зависимости от вашей системы, выбираем один из вариантов настройки.
Windows
Запускаем скачанный файл и выполняем установку. Она очень простая.
После запустится клиент — в нижней части окна добавляем пустой туннель:
Задаем название для клиента, также фиксируем публичный ключ — он нам будет нужен дальше:
В окне с редактором вносим свои данные:
PrivateKey = qD/VCIDLAWGAIl2G9wUjL+MAobks5PpDmzqQcuqqQWc=
Address = 176.16.10.10/24
PublicKey = Z5E6sWmAX9JqSBpO2frcIZ9vkkm/V+8xgP7ZxWXnOCs=
AllowedIPs = 176.16.10.0/24
Endpoint = 1.1.1.1:51820
PersistentKeepalive = 15
* где:
- — блок настроек для клиента.
- PrivateKey — приватный ключ клиента. Он автоматически будет сгенерирован
- Address — IP-адрес в сети VPN, который будет назначен клиенту.
- — настройки для соединения с сервером.
- PublicKey — публичный ключ сервера. Его мы смотрели в самом начале данного раздела.
- AllowedIPs — маршрут, разрешенный для клиента.
- Endpoint — адрес и порт сервера, к которому мы будем подключаться клиентом.
- PersistentKeepalive — интервал между проверками доступности соединения.
Linux
Установка и настройка, отчасти, похожа на то, что мы делали на сервере. Для начала, устанавливаем wireguard. В зависимости от дистрибутива Linux, команды будут отличаться, например:
а) для Ubuntu или Debian:
apt install wireguard
б) для Fedora или CentOS 7:
yum install epel-release
yum install wireguard-tools
* все варианты команд для установки можно посмотреть на официальном сайте.
После установки необходимо сгенерировать ключи и выполнить настройку.
Ключи создаем командой:
wg genkey | tee /etc/wireguard/private.key | wg pubkey > /etc/wireguard/public.key
* оба ключа попадут в каталог /etc/wireguard.
Смотрим содержимое файлов:
cat /etc/wireguard/private.key
cat /etc/wireguard/public.key
Фиксируем значения. Для настройки клиента нам нужно содержимое приватного ключа, для настройки сервера — публичного.
Создаем конфигурационный файл для сервера:
vi /etc/wireguard/client.conf
PrivateKey = qD/VCIDLAWGAIl2G9wUjL+MAobks5PpDmzqQcuqqQWc=
Address = 176.16.10.10/24
PublicKey = Z5E6sWmAX9JqSBpO2frcIZ9vkkm/V+8xgP7ZxWXnOCs=
AllowedIPs = 176.16.10.0/24
Endpoint = 1.1.1.1:51820
PersistentKeepalive = 15
* где:
- — блок настроек для клиента.
- PrivateKey — приватный ключ клиента. Его мы сгенерировали.
- Address — IP-адрес в сети VPN, который будет назначен клиенту.
- — настройки для соединения с сервером.
- PublicKey — публичный ключ сервера. Его мы смотрели в самом начале данного раздела.
- AllowedIPs — маршрут, разрешенный для клиента.
- Endpoint — адрес и порт сервера, к которому мы будем подключаться клиентом.
- PersistentKeepalive — интервал между проверками доступности соединения.
Разрешим автозапуск сервиса:
systemctl enable wg-quick@client
* как в случае с сервером, то, что идет после собаки (client) является именем конфигурационного файла. При желании, мы можем создать много таких файлов и запустить несколько VPN подключений к разным серверам.
3. Добавление клиента на сервере
Откроем конфигурационный файл для нашего сервера:
vi /etc/wireguard/server.conf
Добавим пир для нашего нового клиента:
…
PublicKey = 6sDdWDSdYcoBAC7EVKg+z8Gcd+F5OQDkKBELf9MEOTY=
AllowedIPs = 176.16.10.10/32
* где PublicKey — публичный ключ, который мы видели при настройке клиента; AllowedIPs — разрешенный адрес для клиента (который мы ему выдали).
** для каждого клиента, который будет подключаться к серверу мы должны создать свой блок настроек .
Перезапускаем сервис:
systemctl restart wg-quick@server
4. Проверка работы
Возвращаемся к настройкам клиента. Можно подключаться.
а) На Windows:
Мы должны увидеть измененный статус на Подключен:
б) На Linux запускаем сервис:
systemctl start wg-quick@client
Мы должны подключиться к серверу.
Для проверки соединения можно отправить пинг на сервер (в нашем примере его IP 176.16.10.1):
ping 176.16.10.1
Базово мы разобрались с настройкой WireGuard.
Обратная сторона
Итак, мы увидели все важные способы, которыми WireGuard готов атаковать существующие протоколы туннелирования.
Но давайте заглянем под ковер и посмотрим на некоторые потенциальные проблемы в WireGuard.
Работа в процессе
WireGuard — это бесплатный проект с открытым исходным кодом, который все еще находится в стадии разработки. Официальных стабильных релизов пока не вышло.
В его нынешнем виде вы не можете полностью полагаться на этот протокол, так как они, вероятно, содержат уязвимости в системе безопасности.
Статус WireGuard: в разработке
Не забывайте, что протокол еще не прошел надлежащий аудит безопасности. Все это еще в стадии разработки.
Хотя мы знаем достаточно, чтобы быть достаточно уверенными в возможностях WireGuard, когда он будет официально выпущен со стабильной сборкой, это время еще далеко в будущем.
Пока нет поддержки Windows
Вся разработка WireGuard ведется на Linux. Хотя его экспериментальные версии доступны для macOS, Android и iOS, официально клиент для Windows еще не выпущен.
Однако некоторые VPN-сервисы, о которых я расскажу ниже, предлагают приложение для Windows через сторонних клиентов.
Разработчик WireGuard Джейсон Доненфельд настоятельно не рекомендует использовать предполагаемые клиенты Windows:
Итак, прислушайтесь к этому предупреждению, ребята. Мы скоро получим поддержку Windows, но не сейчас.
Возможные проблемы с некоторыми функциями
VPN-сервис Perfect Privacy несколько месяцев назад опубликовал статью о WireGuard, в которой упомянули, что этот протокол не сможет поддерживать некоторые функции, такие как NeuroRouting и TrackStop.
Однако такие проблемы не обязательно сохранятся после выпуска полной версии WireGuard. Мы также можем ожидать варианты протокола, которые будут лучше работать с некоторыми функциями VPN.
Проблемы с ведением журнала
Одна из основных проблем, которая привлекла мое внимание, была поднята некоторыми провайдерами VPN относительно невозможности использования WireGuard без регистрации информации о пользователе. Если эти опасения обоснованы, желательность WireGuard в качестве протокола VPN будет серьезно поставлена под сомнение
Если эти опасения обоснованы, желательность WireGuard в качестве протокола VPN будет серьезно поставлена под сомнение.
По данным AzireVPN:
Однако этим ребятам удалось решить проблему логирования с помощью самого создателя кода WireGuard, Джейсона. По сути, он написал модифицированный модуль, похожий на руткит, который решил проблему.
Perfect Privacy также указал на ту же проблему с логированием. AirVPN, с другой стороны, проявил интерес к WireGuard, но также заявил, что не будет включать его в свои услуги до тех пор, пока не будет разработана стабильная, рецензируемая и хорошо проверенная версия протокола.
Общая тема всех этих заявлений и опасений сосредоточена вокруг того факта, что протокол ни в коем случае не является готовым продуктом.
Но, учитывая, что некоторые проблемы уже решаются, и тот факт, что на данный момент код все еще является экспериментальным, большинство выявленных проблем, вероятно, будут решены в свое время по мере дальнейшего развития протокола.
“Может ли VPN-шифрование замедлять скорость работы интернета?”
Есть большая вероятность этого. Все зависит от того, насколько сильное используется VPN-шифрование. Например, протокол OpenVPN с AES-256 может замедлять интернет, поскольку потребляет много вычислительной мощности процессора.
При этом нельзя утверждать наверняка, что вы обязательно будете испытывать неудобства в виде замедления интернета. Часто этого не происходит вообще или едва заметно (например, потери могут достигать 1-2 Мбит/с).
Если вы хотите получить больше информации по этой теме, то можете ознакомиться с этим руководством, посвящённым скорости VPN.
Ищете надёжный VPN-Сервис?
Тогда у нас для вас есть отличное предложение. CactusVPN предлагает высококачественные VPN-услуги, среди которых шифрование на военном уровне, круглосуточная поддержку, функция Kill Switch, более 30 высокоскоростных серверов с неограниченной пропускной способностью, а также до шести VPN-протоколов на выбор. Более того, мы не записываем ваши данные, и наш Сервис работает на нескольких платформах.
И если вы захотите попробовать другие способы разблокировки веб-сайтов, мы также предлагаем услугу Smart DNS, которая открывает доступ к более 300 сайтов. Кроме всего прочего, все наши VPN-серверы дополняются прокси-серверами.
Специальное предложение! Получите CactusVPN за 3.5$ в месяц!
И как только вы станете клиентом CactusVPN, у вас будет 30-дневная гарантия возврата денег.
В завершение
VPN-шифрование данных используется для защиты пользовательского трафика и информации. Это защищает пользователя от сбора данных провайдером, нападок киберпреступников и правительственной слежки.
Работает это следующим образом: VPN-клиент сначала шифрует запросы на подключение и отправляет их на VPN-сервер, который расшифровывает их и пересылает в интернет. Затем полученные данные шифруются VPN-сервером и отправляются VPN-клиенту, который затем расшифровывает полученную информацию для вас.
Многое зависит от того, как работает VPN-шифрование, какой используется тип алгоритма шифрования и шифра, какой тип шифрования используется для аутентификации, какие используются протоколы обмена ключами и в целом — какой используется VPN-протокол.
Базовая настройка VPN сервера WireGuard
Создайте директорию для WireGuard:
Теперь можно приступить к генерации ключей для клиента и сервера:
В результате выполнения предыдущих команд, появится 4 файла с ключами: приватный и публичный ключи для сервера, а также аналогичные ключи для клиента (мы будем использовать их при настройке клиента WireGuard).
Далее нужно создать конфигурационный файл для сервера:
И добавить в него следующее содержимое:
YAML
Address = 10.0.0.1/24
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 39548
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32
1 |
Address=10.0.0.1/24 PostUp=iptables-AFORWARD-i%i-jACCEPT;iptables-AFORWARD-o%i-jACCEPT;iptables-tnat-APOSTROUTING-oeth0-jMASQUERADE PostDown=iptables-DFORWARD-i%i-jACCEPT;iptables-DFORWARD-o%i-jACCEPT;iptables-tnat-DPOSTROUTING-oeth0-jMASQUERADE ListenPort=39548 PublicKey=CLIENT_PUBLIC_KEY AllowedIPs=10.0.0.2/32 |
- В поле PrivateKey нужно добавить содержимое файла server-private.key
- В поле PublicKey вы добавляете содержимое с файла client-public.key
- Address — IP адрес сервера wireguard
- ListenPort — порт на котором будет работать wireguard
- AllowedIPs — IP адреса, которые назначаются VPN клиенту
PostUp и PostDown правила iptables при подключении wireguard.
В блоке указываются данные для VPN клиентов. Если их будет несколько, то нужно добавить блоки для новых клиентов, с новым IP адресом и новым ключом.
Если у вас на сервере используется не iptables, а firewalld, замените строки в конфигурационном файле, которые относятся к настройкам межсетевого экрана:
YAML
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
1 |
PostUp=iptables-AFORWARD-i%i-jACCEPT;iptables-AFORWARD-o%i-jACCEPT;iptables-tnat-APOSTROUTING-oeth0-jMASQUERADE PostDown=iptables-DFORWARD-i%i-jACCEPT;iptables-DFORWARD-o%i-jACCEPT;iptables-tnat-DPOSTROUTING-oeth0-jMASQUERADE |
Вы заменяете на:
YAML
PostUp = firewall-cmd —add-port $SERVER_PORT/udp &amp;&amp; firewall-cmd —add-rich-rule=’rule family=ipv4 source address=$FIREWALLD_IPV4_ADDRESS/24 masquerade’ && firewall-cmd —add-rich-rule=’rule family=ipv6 source address=$FIREWALLD_IPV6_ADDRESS/24 masquerade’
PostDown = firewall-cmd —remove-port $SERVER_PORT/udp && firewall-cmd —remove-rich-rule=’rule family=ipv4 source address=$FIREWALLD_IPV4_ADDRESS/24 masquerade’ && firewall-cmd —remove-rich-rule=’rule family=ipv6 source address=$FIREWALLD_IPV6_ADDRESS/24 masquerade’
1 |
PostUp=firewall-cmd—add-port$SERVER_PORT/udp&&firewall-cmd—add-rich-rule=’rule family=ipv4 source address=$FIREWALLD_IPV4_ADDRESS/24 masquerade’&&firewall-cmd—add-rich-rule=’rule family=ipv6 source address=$FIREWALLD_IPV6_ADDRESS/24 masquerade’ PostDown=firewall-cmd—remove-port$SERVER_PORT/udp&&firewall-cmd—remove-rich-rule=’rule family=ipv4 source address=$FIREWALLD_IPV4_ADDRESS/24 masquerade’&&firewall-cmd—remove-rich-rule=’rule family=ipv6 source address=$FIREWALLD_IPV6_ADDRESS/24 masquerade’ |
Чтобы добавить нового клиента на сервер, вам нужно сгенерировать для него ключи, выполняется это так же, как и для первого клиента:
Теперь добаьте блок для нового клиента в конфигурационный файл /etc/wireguard/wg0-server.conf:
YAML
PublicKey = CLIENT2_PUBLIC_KEY
AllowedIPs = 10.0.0.3/32
1 |
PublicKey=CLIENT2_PUBLIC_KEY AllowedIPs=10.0.0.3/32 |
И так далее.
Включите форвардинг пакетов:
YAML
net.ipv4.ip_forward = 1
1 | net.ipv4.ip_forward=1 |
Добавьте сервис WireGuard в автозагрузку и запустите его:
Проверьте, что появился отдельный сетевой интерфейс:
Теперь вы можете подключиться к вашему VPN серверу с различных клиентов. Рассмотрим, как их настроить.
Настройка WireGuard на Ubuntu 20.04
Установка и настройка на стороне сервера (Ubuntu 20.04 Server)
sudo suapt install wireguardcd /etc/wiregaurd/
# Создадим пару закрытого и открытого ключа сервера:umask 077; wg genkey | tee server_private_key | wg pubkey > server_public_key
# Создадим пару закрытого и открытого ключа клиента:umask 077; wg genkey | tee client1_private_key | wg pubkey > client1_public_key
# Создадим конфигурационный файлл нашего сервера и добавим в него следующие параметры:
nano wg0.conf# Секция настройки сервера:PrivateKey = server_private_key # подставьте сюда приватный ключ сервера (cat server_private_key)Address = 10.0.0.1/24 # Внутренний ip адрес нашего сервераListenPort = 51194 # Порт на котором наш сервер будет принимать подключения# Добавим правила маскарадинга, чтобы весь трафик проходил через наш сервер
# eth0 необходимо заменить на ваш сетевой интерфейс (ip route | grep default)PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEPostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# Секция настройки клиента
# Client1PublicKey = client1_public_key # Подставьте сюда публичный ключ клиента (cat client1_public_key)AllowedIPs = 10.0.0.2/32 # внутренний ip адрес клиента (client1)
*Сохраните и закройте файл (ctrl+x, then ‘y’ and ‘enter’)
Теперь настроим сетевую инфраструктуру нашего сервера и firewall
# Открываем необходимые порт
sudo ufw allow 51194/udp # Порт сервера WireGuardsudo ufw allow 22 # Порт OpenSSH сервера
# Включаем поддержку перенаправления трафика на уровне ядра
sudo nano /etc/sysctl.conf # Раскоментируйте параметр для включения перенаправления IPv4 траффикаnet.ipv4.ip_forward=1sudo sysctl -p # Применяем сделанные изменения
# Запускаем наш Wireguard сервер
sudo systemctl start wg-quick@wg0
# Добавляем его а автозагрузку
sudo systemctl enable wg-quick@wg0
Установка и настройки на стороне клиента (Ubuntu 20.04 Desktop)
sudo suapt install wireguardcd /etc/wireguard/nano wg0.conf
# Секция настройки клиента client1PrivateKey = client1_private_key # Скопировать значение с нашего сервера (на сервере: sudo cat /etc/wireguard/client1_private_key)Address = 10.0.0.2/24 # ip адрес клиента client1DNS = 8.8.8.8# Секция настройки подключения к серверуPublicKey = server_public_key # Скопировать значение с нашего сервера (на сервере: sudo cat /etc/wireguard/server_public_key)AllowedIPs = 0.0.0.0/0 # разрешаем клиенту доступ в сетьEndpoint = 172.105.112.120:51194 # Публичный IP адрес вашего сервераPersistentKeepalive = 15*Сохраните и закройте файл (ctrl+x, then ‘y’ and ‘enter’)
# Теперь можно установить соединение с нашим сервером
sudo wg-quick up wg0
# пароль для username:# Результат выполнения комманды будет примерно следующий: ip link add wg0 type wireguard wg setconf wg0 /dev/fd/63 ip -4 address add 10.0.0.2/24 dev wg0 ip link set mtu 1420 up dev wg0 mount `8.8.8.8′ /etc/resolv.conf wg set wg0 fwmark 51194 ip -4 route add 0.0.0.0/0 dev wg0-ideapad table 51194 ip -4 rule add not fwmark 51194 table 51194 ip -4 rule add table main suppress_prefixlength 0 sysctl -q net.ipv4.conf.all.src_valid_mark=1 nft -f /dev/fd/63
# Проверим доступность нашего сервера в сети WireGuard:
ping 10.0.0.1 -c 3# Результат выполнения комманды будет примерно следующий:PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=186 ms64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=209 ms64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=232 ms
— 10.8.10.1 ping statistics —3 packets transmitted, 3 received, 0% packet loss, time 2002ms
Это означает что наш сервер и клиент установили соединение и настроены корректно.
Для отключения от сервера используйте команду:
sudo wg-quick down wg0
Шаг 3. Добавляем конфиг клиента
Создаем конфиг клиента, конечного устройства — пользователя VPN. За основу берем , потому что это точно такой же клиент, который подключается к internal: разница только в том, что external будет получать пакеты, а наш клиент — отправлять.
Генерируем ему сразу пару публичный и приватный ключ:
Конфиг почти такой же (этот файл уже должен быть на твоем устройстве, не на сервере):
/etc/wireguard/wg-notebook-client.conf
Тут у нас добавилась опция . Дело в том, что роутеры в цепочке между двумя пирами ничего не знают о сессии WG, а знают только о потоке UDP-пакетов. Для маршрутизации UDP-пакетов за NAT они создают у себя табличку, в которую записывают, кто, куда и на какой порт отправил пакет. И если с destination-адреса/порта приходит UPD-пакет, то они определяют, куда его отправить, по этой таблице, делая вывод, что если сервер B недавно отправил пакет серверу А, то ответ от сервера А на этот же адрес и порт, скорее всего, надо переслать серверу B.
В UDP, в отличие от TCP, нет никаких договоренностей о поддержании сессии, так как нет и самого понятия сессии. WG же построен таким образом, что при отсутствии трафика, попадающего в туннель, не будет и трафика между пирами, только хендшейки раз в две минуты. Опция заставляет его посылать пустые пакеты каждые 25 с, что предотвращает потерю маршрута на промежуточных роутерах. Без этого мы бы могли раз за разом отправлять пакеты, до второго пира они не доходили бы, а он бы об этом не знал.
Дальше мы добавляем еще одну секцию Peer в конфиг на internal — для клиента:
Перезапускаем туннель на internal (), подключаемся… Есть хендшейк! Данные пошли.
Теперь смотрим свой IP (например, на reg.ru): видим IP external ноды и другую страну.
Таким же образом создаем конфиги для других клиентов. Если это мобильные устройства, то удобнее показать им QR-код. Он делается следующим образом. Создаем в текущей папке конфиг как обычно (конечно, с новыми ключами и другим IP), называем, например, . А дальше прямо командой в консоли создаем QR-код, который сканируем с телефона:
Это удобнее, чем копирование файлов, но тебе никто не мешает скинуть на телефон или вообще ввести значения семи полей вручную.
Теперь наша схема выглядит следующим образом.
В целом все готово: мы только что сделали очень странный двуххоповый VPN. Надо это дело отметить! Открываем Сбермаркет, чтобы заказать пивка…
Ах да, мы же с этой проблемой и собирались бороться. Неловко!Давай доделаем.
Шаг 2. Настройте WireGuard
Теперь, когда вы установили WireGuard, выполните следующие действия, чтобы настроить его.
Во- первых, пойти и создать privateи publicключи. Эти ключи жизненно важны для работы VPN для безопасной связи.
Выполните следующие команды, чтобы создать общедоступный | пара закрытых ключей.
Эти ключевые файлы будут созданы и сохранены в /etc/wireguardкаталоге.
После создания пары ключей, указанной выше, вашей следующей задачей будет создание туннельного устройства, которое будет использоваться для маршрутизации трафика VPN.
Это можно сделать с помощью команды ip или wg .
Для упрощения управления вы можете создать файл туннеля и добавить в него его конфигурации.
Выполните приведенные ниже команды, чтобы создать файл туннеля с именем wg0.conf.
Затем скопируйте и вставьте строки ниже в файл и сохраните.
Сохраните файл и выйдите.
Подробная информация о файле выше:
- Адрес = сетевой интерфейс сервера, подключенный к Интернету. Это может быть IPv4 или IPv6
- PrivateKey = закрытый ключ, созданный выше, хранящийся в файле / etc / wireguard / privatekey.
- ListenPort = входящий порт, который WireGuard прослушивает
- enp0s3 = должно соответствовать имени интерфейса на сервере. Некоторые системы будут иметь разные имена для своих интерфейсов.
Чтобы найти сведения о вашем сетевом интерфейсе, выполните следующие команды:
Он должен выводить похожие строки, как показано ниже:
После этого запустите приведенную ниже команду, чтобы активировать интерфейс туннеля и вызвать его.
Это должно вывести аналогичные строки, как показано ниже:
Чтобы убедиться, что туннельный интерфейс работает, выполните следующие команды:
Вы должны увидеть аналогичный результат, как показано ниже:
Поскольку VPN необходимо пересылать трафик, вам необходимо включить переадресацию IP.
Для этого выполните приведенные ниже команды, чтобы открыть указанный ниже файл конфигурации.
Затем раскомментируйте строку ниже и сохраните..
После этого выполните приведенные ниже команды, чтобы завершить настройку сервера. Это сохранит изменения в файле /etc/sysctl.conf и включит порт udp через брандмауэр.
Это должно завершить настройку сервера WireGuard VPN.