Персональный VPN на протоколе WireGuard

Персональный VPN на протоколе WireGuard

Шифропанк

WireGuard - это относительно новый VPN-протокол с открытым исходным кодом (лицензировано GPLv2, той же лицензией, что и ядро Linux), простой в настройке и обслуживании, обеспечивает высокую степень безопасности благодаря современным криптографическим алгоритмам. WireGuard более производительный, чем OpenVPN. Является кросс-платформенным, работает на Linux, Windows, macOS, BSD, iOS, Android. Его можно считать самым безопасным и простым в использовании VPN-решением.

Так как же WireGuard получил положительный комментарий от Линуса Торвальдса.

Простой и удобный в использовании

VPN – соединение осуществляется просто путем обмена открытыми ключами. Нет необходимости управлять соединениями и беспокоиться о их состоянии. Если вы используете OpenVPN, то при смене сети: Wi-Fi, LTE или Ethernet необходимо каждый раз повторно подключаться к VPN-серверу. WireGuard же не разрывает соединение, даже если пользователь получил новый IP-адреc.

Криптография

WireGuard намеренно избегает “отраслевых стандартных” алгоритмов, которые имеют давние слабые места, в пользу современных примитивов, таких как Noise protocol framework , Curve25519 , ChaCha20 , Poly1305 , BLAKE2 , SipHash24 , HKDF

Меньше строк кода

WireGuard реализован в ~4000 строк кода, что означают гораздо меньшую поверхность атаки и возможность легко обнаружить и исправить любые уязвимости. По сравнению с такими гигантами, как *Swan/IPSec или OpenVPN/OpenSSL, в которых аудит гигантских кодовых баз является непосильной задачей даже для больших команд экспертов по безопасности.

Высокая производительность

Сочетание высокоскоростных криптографических примитивов и того факта, что WireGuard живет внутри ядра Linux (с весны 2020 года он также включен в состав ядра Android и с августа 2021 года в ядро Windows), дает максимальное преимущество в производительности по сравнению с OpenVPN и IPSec.

Результаты бенчмарков с официального сайта

Выбор хостинга и аренда VPS

У меня была статья с помощью в выборе хостинга, читайте ее или же используйте хостинг на свой выбор. От себя могу посоветовать yourserver.se, как отвечающий всем требованиям. У него дата-центры в Швеции и Латвии, хостинг не требует ни телефона, ни адреса при регистрации, а оплата возможна в криптовалюте.

Установка WireGuard с помощью скрипта

Самый простой вариант установки, это воспользоваться готовым скриптом. Он установит WireGuard на сервер, настроит его, создаст службу systemd и файл конфигурации клиента.

Скачиваем скрипт на свой сервер:

curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh

Даем скрипту права на исполнение:

chmod +x wireguard-install.sh

Запускаем:

./wireguard-install.sh

В терминале по очереди будут появляться вопросы, можно вписать свои ответы или просто нажимаем Enter, пока не появится надпись Press any key to continue…

На этом установка WireGuard закончена. Сразу после этого начнётся процесс создания учётной записи.

Client name: Введите произвольное имя для учётной записи.

На все остальные вопросы в консоли нажимайте Enter, пока не появится QR-код

Чтобы добавить ещё одного пользователя, снова введите команду:

./wireguard-install.sh

Скрипт спросит, что именно сделать. Введите 1 (Add a new user) и вы снова увидите процесс создания нового пользователя.

QR-код нужен для быстрого подключения со смартфона, так что можете сразу отсканировать его через мобильное приложение WireGuard.

Для подключения компьютера нужно открыть файл с текстовыми данными к этой учётной записи. Расположение файла конфигурации будет написано под QR-кодом.

Откроем его с помощью nano:

nano /root/wg0-client-1.conf

*Здесь впишите название своего конфигурационного файла

Если вы по каким то причинам используете Windows, то скопируйте весь текст из этого файла. Далее скачиваем клиент с официального сайта и устанавливаем на ПК. Открываем WireGuard, переходим в меню Add Tunnel > Add empty tunnel. Даем туннелю имя и вставляем скопированный текст в поле, сохраняем. Для подключения к серверу нужно нажать кнопку Activate.

Linux дистрибутивы предполагают следующие шаги для работы с Wireguard:

1. Устанавливаем WireGuard:

sudo apt install wireguard

1.2. Если в репозиториях вашего дистрибутива нет WireGuard’a, то добавим PPA репозиторий:

sudo add-apt-repository ppa:wireguard/wireguard

2. Переходим в директорию /etc/wireguard :

cd /etc/wireguard

3. Создаем конфигурационный файл wg0-client.conf и вставляем в него все то, что вы скопировали в файле конфигурации на вашем сервере:

nano wg0-client.conf

4. Сохраняем файл, и пробуем подключиться:

wg-quick up wg0-client

Если всё сделано верно, то весь трафик будет проходить через VPN сервер.

Для отключения выполняем команду:

wg-quick down wg0-client

Установка и настройка вручную.

Если вы хотите сами проконтролировать процесс установки и настройки WireGuard, то давайте сделаем это.

1. Устанавливаем WireGuard на сервер

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

sudo apt install wireguard

Но если каким то образом на вашем VPS установлен дистрибутив с версией ядра ниже 5.6, то придется добавить официальный PPA репозиторий, установить сам Wireguard и модуль ядра:

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt update
sudo apt install wireguard-dkms wireguard-tools linux-headers-$(uname -r)

2. Генерируем ключи сервера и клиента

Создаем папку wireguard и генерируем в ней следующие четыре файла: server_private_key, server_public_key, client_private_key, client_public_key

mkdir ~/wireguard
cd ~/wireguard
umask 077
wg genkey | tee server_private_key | wg pubkey > server_public_key
wg genkey | tee client_private_key | wg pubkey > client_public_key

3. Создаем конфигурационный файл

Создаем на сервере файл /etc/wireguard/wg0.conf :

nano /etc/wireguard/wg0.conf

и добавляем в него следующее:

[Interface]
PrivateKey = <server_private_key>
Address = 10.20.20.1/24
ListenPort = 55000
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <client_public_key>
AllowedIPs = 10.20.20.2/32

[Interface]

PrivateKey = <server_private_key> — Ваш закрытый ключ, содержащийся в файле server_private_key который мы создали ранее

Address = 10.20.20.1/24 — адрес виртуального интерфейса wg0 на сервере.

ListenPort = 55000 — порт, на котором VPN будет прослушивать входящий трафик. Это может быть любой нестандартный порт

PostUp — правила iptables разрешающее исходящий трафик

PostDown — удаляет вышеупомянутое правило iptables при разрыве VPN-соединения.

[Peer]

PublicKey = <client_public_key> — Открытый ключ клиента, который будет подключаться к VPN-серверу.

Чтобы добавить больше клиентов, скопируйте и вставьте раздел [Peer] и измените настройки так, чтобы они соответствовали каждому клиенту.

AllowedIPs = 10.20.20.2/32 — виртуальные IP-адреса, которым разрешено подключаться к VPN

4. Включаем WireGuard.

После создания конфигурационного файла, сделаем его доступным только для root:

chown -v root:root /etc/wireguard/wg0.conf
chmod -v 600 /etc/wireguard/wg0.conf

На этом настройка WireGuard завершена. Можем запустить wg0 интерфейс и добавить его в автозагрузку:

wg-quick up wg0
systemctl enable wg-quick@wg0.service

5. Включаем переадресацию IP-адресов

Переадресация IP-адресов должна быть включена, чтобы позволить трафику проходить через туннель.

Открываем файл /etc/sysctl.conf :

nano /etc/sysctl.conf

и добавляем следующую строку:

net.ipv4.ip_forward=1

Чтобы применить изменения, используем команду:

sysctl -p

После этого проверим, что у нас появился новый интерфейс с именем 'wg0' :

ip a

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

Windows

Скачиваем клиент с официального сайта и устанавливаем на ПК

Открываем WireGuard, переходим в меню Add Tunnel > Add empty tunnel. Даём туннелю имя и вставляем следующий текст в поле:

[Interface]
PrivateKey = <client_private_key>
Address = 10.20.20.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = <server_public_key>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <server_ip>:55000
PersistentKeepalive = 21

[Interface]

PrivateKey = <client_private_key> — Ваш закрытый ключ, содержащийся в файле client_private_key который мы создали ранее

[Peer]

PublicKey = <server_public_key> — Открытый ключ сервера

AllowedIPs = 0.0.0.0/0 — направит весь трафик на клиенте через VPN-туннель.

Endpoint = <server_ip>:55000 — замените <server_ip> на IP-адрес вашего сервера

После того, как замените все нужные параметры на свои, нажмите кнопку Save.

Для подключения к серверу WireGuard нужно нажать кнопку Activate.

Linux

Устанавливаем WireGuard:

sudo apt install wireguard

Если в репозиториях вашего дистрибутива отсутствует WireGuard, то добавим PPA репозиторий:

sudo add-apt-repository ppa:wireguard/wireguard

Переходим в директорию /etc/wireguard :

cd /etc/wireguard

Создаем конфигурационный файл wg0-client.conf :

nano wg0-client.conf

и вставляем в него следующий текст:

[Interface]
PrivateKey = <client_private_key>
Address = 10.20.20.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = <server_public_key>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <server_ip>:55000
PersistentKeepalive = 21

[Interface]

PrivateKey = <client_private_key> — Ваш закрытый ключ, содержащийся в файле client_private_key который мы создали ранее

[Peer]

PublicKey = <server_public_key> — Открытый ключ сервера

AllowedIPs = 0.0.0.0/0 — направит весь трафик на клиенте через VPN-туннель.

Endpoint = <server_ip>:55000 — замените <server_ip> на IP-адрес вашего сервера

Сохраняем и пробуем подключиться:

wg-quick up wg0-client

Если всё сделано верно, то весь трафик теперь будет проходить через VPN сервер.

Для отключения используем команду:

wg-quick down wg0-client

Android / iOS

Установите приложение WireGuard из AppStore для iOS и из F-droid (или PlayMarket).

Если вы устанавливали Wireguard с помощью скрипта, то вам достаточно просто отсканировать полученный QR-код.

В ином случае, в приложении нажимаете “+” > Создать с нуля и заполняете всю необходимую информацию.

Так как для каждого клиента нужны свои ключи, генеринуем их в разделе Интерфейс. Запишем открытый ключ, он нужен для подключения нового клиента на сервере. В поле Adresses прописываем 10.20.20.3/32

В разделе Пир прописываем публичный ключ сервера, в поле Endpoint прописываем ip-адрес сервера и порт в формате server_ip:55000 , в поле AllowedIPs прописывем 0.0.0.0/0


На сервере нужно добавить нового клиента в файл /etc/wireguard/wg0.conf

в конец файла добавляем:

[Peer]
PublicKey = <client_public_key>
AllowedIPs = 10.20.20.3/32

PublicKey = <client_public_key> — Открытый ключ, который мы создали в приложении.

Перезагружаем WireGuard

systemctl restart wg-quick@wg0.service

Аналогично поступаем с каждым новым клиентом.




Больше информации об анонимности и безопасности личных данных в сети на канале Шифропанк


Поддержать канал

Bitcoin: bc1qx07rnee8n78k3tac0ra690309ujyjg7hnkeu0v

Ethereum: 0xf9FCac64C6510A7DB29706f903d38FB532dfbDc0

Litecoin: LPdVENDq5ataHCqRrQnEEemVqFQmJ7aUqJ

DASH: XeLtyRNnMET2nF1gRApzBWzFoN15C2tWgj

Zcash: t1acDtEboR4oPPmAPKADNQ3tyoU11KdpqEZ

Monero: 487g4zkuCVE5n4a9pDeHLSdNCwp3nCMhp4Ki1T5UkBpWG1mVcB9ghmoUmjGXisSNaKiLhpVqZSNhvGsv3trszHhnSpW6nR5



Report Page