Как настроить клиент wireguard vpn с графическим интерфейсом networkmanager

Что такое 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. Смотрим ключ на сервере.
  2. Настраиваем клиента.
  3. Настраиваем сервер.
  4. Проверяем подключение.

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
2
3
4
5
6
7
8
9
10

Address=10.0.0.1/24
PrivateKey=SERVER_PRIVATE_KEY

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
2

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;&amp;amp; firewall-cmd —add-rich-rule=’rule family=ipv4 source address=$FIREWALLD_IPV4_ADDRESS/24 masquerade’ &amp;&amp; firewall-cmd —add-rich-rule=’rule family=ipv6 source address=$FIREWALLD_IPV6_ADDRESS/24 masquerade’
PostDown = firewall-cmd —remove-port $SERVER_PORT/udp &amp;&amp; firewall-cmd —remove-rich-rule=’rule family=ipv4 source address=$FIREWALLD_IPV4_ADDRESS/24 masquerade’ &amp;&amp; firewall-cmd —remove-rich-rule=’rule family=ipv6 source address=$FIREWALLD_IPV6_ADDRESS/24 masquerade’

1
2

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’&amp;&amp;firewall-cmd—add-rich-rule=’rule family=ipv6 source address=$FIREWALLD_IPV6_ADDRESS/24 masquerade’

PostDown=firewall-cmd—remove-port$SERVER_PORT/udp&amp;&amp;firewall-cmd—remove-rich-rule=’rule family=ipv4 source address=$FIREWALLD_IPV4_ADDRESS/24 masquerade’&amp;&amp;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
2
3

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.

Понравилась статья? Поделиться с друзьями:
Быть в курсе нового
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: