WireGuard – это современный протокол виртуальной частной сети (VPN), разработанный для обеспечения безопасного и эффективного соединения между устройствами через интернет. Он известен своей простотой, эффективностью и скоростью. В отличие от некоторых других VPN-протоколов, таких как OpenVPN или IPSec, WireGuard обладает более компактным и прозрачным кодом, что облегчает его аудит и развёртывание.
В статье разберём процесс настройки VPN с использованием WireGuard на виртуальном выделенном сервере, работающем под управлением Ubuntu 22.04.
Предварительная настройка сервера
Для того, чтобы установить и настроить WireGuard, подключитесь к виртуальному серверу по SSH с использованием учётной записи, обладающей полномочиями администратора и обновите списки пакетов:
$ sudo apt update
После чего установите утилиту для управления правилами брандмауэра iptables
:
$ sudo apt install iptables
Затем перейдите в каталог /etc/
и при помощи текстового редактора nano
внесите изменения в файл sysctl.conf
:
$ cd /etc/
$ sudo nano sysctl.conf
А именно, найдите и раскомментируйте строку, содержащую следующий текст:
net.ipv4.ip_forward=1
Это необходимо сделать, чтобы включить пересылку IPv4-пакетов через систему. Для применения внесённых изменений, выполните следующую команду:
$ sudo sysctl -p
Вывод данной данной команды должен содержать строку net.ipv4.ip_forward=1
:
Установка и настройка сервера WireGuard
Пакет WireGuard доступен для установки из стандартного репозитория Ubuntu. Исходя из этого, непосредственно для запуска инсталляции выполните команду:
$ sudo apt install wireguard
Для настройки WireGuard после того, как установка завершится, временно переключитесь в режим суперпользователя при помощи команды:
$ sudo su
Для проведения работ по настройке VPN-сервера перейдите в каталог, в котором будут находиться конфигурационные файлы сервера и клиентов WireGuard. Это – директория /etc/wireguard
:
# cd /etc/wireguard
И следующей командой сгенерируйте пару ключей (открытый и секретный) для сервера:
# wg genkey | tee privatekey | wg pubkey | tee publickey
Обратите внимание, что при проведении данной процедуры создаются файлы открытого и секретного ключей. В нашем случае это – publickey и privatekey. Если вы запускаете команду не находясь в каталоге /etc/wireguard/
, то следует указать путь до создаваемых файлов, например:
# wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
На следующем шаге создайте конфигурационный файл сервера WireGuard:
# nano wg0.conf
В него необходимо вставить следующий текст:
[Interface]
PrivateKey = Your-Server-Private-Key
Address = 10.10.10.1
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
В данном случае:
Your-Server-Private-Key
– секретный ключ сервера;10.10.10.1
– IP-адрес сервера, который он будет иметь в создаваемой VPN-сети;51820
– порт, который будет использоваться для подключения к VPN-сети;- следующие две строки – это команды, которые будут выполняться при подключении к сетевому интерфейсу
wg0
и отключении от него.
IP-адрес сервера VPN вы можете указать по своему усмотрению, но учитывайте, что клиентам вашего VPN нужно будет присваивать IP-адреса из этой же подсети. Номер порта в WIreGuard по умолчанию – 51820, что, естественно, не мешает изменить его на более приемлемый в ваших конкретных условиях.
Что касается секретного ключа вашего сервера, то его можно найти в файле /etc/wireguard/privatekey
. Чтобы посмотреть его содержимое, находясь в директории /etc/wireguard/
запустите команду:
# cat privatekey
Строку, которую выведет данная команда, вам нужно будет вставить в файл wg0.conf
в качестве значения параметра PrivateKey
.
Далее, для включения автоматического запуска службы WireGuard при загрузке системы выполните команду:
# systemctl enable wg-quick@wg0.service
После чего запустите службу:
# systemctl start wg-quick@wg0.service
Чтобы проверить, что сервис запустился и функционирует корректно, выполните команду:
# systemctl status wg-quick@wg0.service
Создание конфигурации клиентов WireGuard
Теперь в качестве примера мы создадим двух абонентов (пиров), которые будут подключены к нашему VPN.
В нашем примере абоненты будут называться peer1
и peer2
. Для создания первого из них запустите команду, находясь в каталоге /etc/wireguard/
:
# wg genkey | tee peer1_privatekey | wg pubkey | tee peer1_publickey
Аналогично для второго пира:
# wg genkey | tee peer2_privatekey | wg pubkey | tee peer2_publickey
Затем откройте для редактирования файл wg0.conf:
# nano wg0.conf
И добавьте в него информацию о только что созданных клиентах:
[Peer]
PublicKey = Your-Peer1-Public-Key
AllowedIPs = 10.10.10.2/32
[Peer]
PublicKey = Your-Peer2-Public-Key
AllowedIPs = 10.10.10.3/32
В данном случае:
Your-Peer1-Public-Key
– открытый ключ клиента;10.10.10.2/32
– IP-адрес клиента с маской подсети255.255.255.255
.
Обратите внимание, что IP-адрес для клиентов вашего VPN необходимо назначать из той же подсети, из которой назначен IP-адрес сервера. Естественно, в пределах данной сети каждый клиент должен обладать уникальным IP-адресом.
Открытые ключи клиентов, которые мы сгенерировали ранее, в нашем примере находятся в файле peer1_publickey
для первого клиента и peer2_publickey
для второго. Для вывода ключа на экран используйте команду cat
:
# cat peer1_publickey
# cat peer2_publickey
Строки, выведенные на экран, скопируйте и вставьте в файл wg0.conf
в качестве значений для параметра PublicKey
каждого из клиентов.
Затем следующей командой перезагрузите конфигурацию службы WireGuard:
# systemctl reload wg-quick@wg0
Теперь мы создадим конфигурационные файлы для клиентов нашего VPN. Они будут нужны для настройки непосредственно клиентского приложения каждого из пиров.
Файлы конфигурации наших клиентов будут называться peer1.conf
и peer2.conf
. Для создания первого из них используйте редактор nano
:
# nano peer1.conf
Внесите в созданный файл следующее содержимое:
[Interface]
PrivateKey = Your-Peer1-Private-Key
Address = 10.10.10.2/32
DNS = 8.8.8.8
[Peer]
PublicKey = Your-Server-Public-Key
Endpoint = Your-Server-IP-Address:51820
AllowedIPs = 10.10.10.0/24
PersistentKeepalive = 20
Здесь:
Your-Peer1-Private-Key
– секретный ключ клиента;10.10.10.2/32
– IP-адрес клиента с маской подсети255.255.255.255
;8.8.8.8
– IP-адрес DNS-сервера, который будет использоваться клиентом при подключении к VPN;Your-Server-Public-Key
– открытый ключ сервера;Your-Server-IP-Address:51820
– IP-адрес сервера и номер используемого порта (по умолчанию и в нашем примере – 51820).
Секретный ключ клиента находится в файле peer1_privatekey
. При помощи команды cat
выведите содержимое файла на экран, скопируйте выведенную строку и внесите её в файл peer1.conf
вместо Your-Peer1-Private-Key
.
Параметр AllowedIPs
в файле конфигурации указывает на то, какие IP-адреса клиентской машины будут маршрутизироваться через VPN-туннель. В данном случае 10.10.10.10/24
означает, что все пакеты с исходящими или конечными адресами в диапазоне 10.10.10.0/24
будут направляться через VPN-туннель.
Строка PersistentKeepalive = 20
означает, что клиент будет отправлять keepalive-сообщения каждые 20 секунд, даже если между клиентом и сервером нет активного обмена данными. Это помогает поддерживать соединение открытым, предотвращая его разрыв из-за неактивности.
Аналогично внесите изменения в конфигурационный файл нашего второго клиента:
# nano peer2.conf
[Interface]
PrivateKey = Your-Peer2-Private-Key
Address = 10.10.10.3/32
DNS = 8.8.8.8
[Peer]
PublicKey = Your-Server-Public-Key
Endpoint = Your-Server-IP-Address:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20
Подключение клиента на Windows
Для подключения клиента, работающего на Windows, необходимо использовать соответствующее приложение. Загрузить установщик можно на официальной странице WireGuard. Здесь кликните на Download Windows Installer
.
По окончании загрузки запустите установщик и после того, как установка завершится, откройте проинсталлированное приложение.
В приложении нажмите Add Tunnel
, затем Add empty tunnel...
В основное окно вставьте содержимое файла peer1.conf
, если этот компьютер будет в вашей сети клиентом peer1
. Затем в строку Name
введите имя создаваемого туннеля, например, wg
. После чего нажмите Save
.
Для того, чтобы подключить данную рабочую станцию к VPN, нажмите Activate
. Увидеть статистику текущего подключения можно либо в основном окне клиентского приложения, либо на сервере при помощи команды:
$ sudo watch wg show