Что такое WireGuard и зачем он нужен
Итак, в этом ролике я буду рассказывать про WireGuard. WireGuard это такая новая технология VPN.
Сейчас VPN нужен вообще почти всем. И не только даже для того чтобы получить доступ к заблокированным ресурсам, но и для того чтобы нормально организовать свою сеть. Ну чуть позже расскажу про преимущества
И если раньше VPN решения были тяжелыми, их было сложно настраивать, они были медленными, то сейчас с WireGuard все поменялось.
Сейчас WireGuard уже включен в ядро линукса и он даже получал позитивный отзыв от Линуса Торвальдса - https://lists.openwall.net/netdev/2018/08/02/124
Can I just once again state my love for it and hope it gets merged soon? Maybe the code isn’t perfect, but I’ve skimmed it, and compared to the horrors that are OpenVPN and IPSec, it’s a work of art.
Он очень прост с использовании. Он гораздо легче, там раз в десять меньше кода.
Он использует современную криптографию: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF и т.д.
У него довольно ясная и довольно компактная спецификация - https://www.wireguard.com/papers/wireguard.pdf
Ну а самое главное, он очень быстрый. Это вообще была основная проблема любой VPN. Что скорость в ней падала довольно сильно (речь про OpenVPN). А быстрый он потому, что реализован он в пространстве ядра, а не в пользовательском пространстве как OpenVPN.
Что мы получим
Давайте теперь коротко, про преимущества, которые мы получим.
Безопасность
Во-первых это безопасно, весь трафик внутри этой сети шифруется.
Разблокировать заблокированное
Во-вторых меньше проблем с заблокированными ресурсами. Все начнет работать: LinkedIn, PornHub, RuTracker и все остальное.
Удобная сеть
В третьих это очень удобно, вы всегда будете иметь доступ к ресурсам из своей локалки.
Например, у меня в моей локалке есть куча сервисов, которые внутри нее:
Файловый сервер
Тайммашина
Гитлаб
Медиасервер
Куча распберри паев
Камеры видеонаблюдения
Умный дом и тд
И если у вас настроен VPN, то даже если вы взяли с собой ноутбук и уехали в путешествие, то в любом месте вы получите доступ к своей локалке.
Вообще идеально если ваш роутер поддерживает WireGuard. В этом случае вам не нужно будет заморачиваться с каждым клиентом. Но даже если роутер не поддерживает, то все равно можно все настроить, но потратите больше времени.
Установка на DigitalOcean
Давайте перейдем к установке. Я буду использовать DigitalOcean для того чтобы там все установить. Для того чтобы это все работало нам хватит самого дешевого сервера который там стоит $5 в месяц. (Если вы из РФ, то вроде бы там еще налог и всего будет $6 в месяц)
Моя рефералка для DigitalOcean (Вы получите $100, я получу $25) - https://m.do.co/c/41bb5762da9a
SSH KEY
После того как зарегистрировались я рекомендую сразу же добавить свой SSH ключ в DigitalOcean. Это делается в разделе Settings -> Security.
Если вы его добавите, то в дальнейшем вам будет значительно проще подключаться к серверам, которые вы создадите. Ну и это значительно безопаснее, чем подключение через пароль. Так что рекомендую.
New Droplet
Теперь нам нужно создать новый сервер. В DigitalOcean это называется Дроплетом.
Нам нужно просто нажать на кнопку “Create” вверху и там выбрать “Droplet”
Я буду использовать Ubuntu 20.04 (LTS) x64, но вы можете использовать любой другой дистрибутив на ваш вкус.
Для этих целей нам хватит самого дешевого сервера, который тут стоит $5.
После того как нажмете кнопку “Создать” он будет создаваться примерно секунд 40.
После того как наш с вами сервер создался можно скопировать его IP адрес и пойти в консоль.
Update and Upgrade Ubuntu
Вводим в консоль
ssh root@<ip>
Где это айпишник вашего сервера и мы должны подключиться к нашему серверу
Теперь обновим нашу убунту и для этого вводим команды
apt update
apt upgrade
Install WireGuard
И теперь можно установить WireGuard
apt install wireguard
разрешаем проброс пакетов
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Проверям, добавилось или нет
sysctl -p
Configure WireGuard on Server
Теперь генерируем публичный и приватный ключ на сервере
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
Теперь нам нужно создать конфиг
touch /etc/wireguard/wg0.conf
И добавим в него следующее
[Interface]
Address = 10.0.0.1/24
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
ListenPort = 51820
PrivateKey = <SERVER-PRIV-KEY>
Теперь запустим интерфейс:
wg-quick up wg0
И запустим сервис:
systemctl enable wg-quick@wg0
Теперь можно посмотреть работает ли wireguard:
wg show wg0
Кроме того можно посмотреть работает ли служба:
systemctl status wg-quick@wg0
Если вдруг у вас будут проблемы то сначала сделайте
wg-quick down wg0
А потом перезапустите сервис
systemctl start wg-quick@wg0
После этого посмотрите статус
systemctl status wg-quick@wg0
И скорей всего все будет хорошо
Configure WireGuard on Client (Mac OS)
Давайте теперь приконнектимся к серверу.
Для начала на сервере нужно выполнить команду
wg genkey | tee /etc/wireguard/mac_privatekey | wg pubkey | tee /etc/wireguard/mac_publickey
И теперь обновим на сервере файл wg0.conf
vim /etc/wireguard/wg0.conf
И добавим туда новый раздел с новым клиентом
...
[Peer]
PublicKey = <СLIENT-PUBLIC-KEY>
AllowedIPs = 10.0.0.4/32
После того как меняете конфиг не забывайте делать рестарт сервера для того чтобы изменения вступили в силу:
systemctl restart wg-quick@wg0
Ну и лушче сразу же проверить что сервис работает и активный:
systemctl status wg-quick@wg0
И теперь сделаем конфигурационный файл для клиента, назовем его как-нибудь mac.conf:
[Interface]
PrivateKey = <PEER_2_PRIVATE_KEY>
Address = 10.0.0.12/32
[Peer]
PublicKey = <SERVER-PUBKEY>
Endpoint = <SERVER-IP>:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 20
После этого сохраните этот файл и загрузите его через приложение WireGuard, которое можете скачать из апстора
После этого в клиенте это выглядит примерно так:
Ну а еще можете посмотреть на то, как это выглядит на сервере.
Введите вот эту команду и увидите все ваши коннекшены
wg show wg0
Маршрутизируем весь траффик
Есть вдруг вам нужно маршрутизировать весь трафик, то нужно сделать небольшие изменения в конфиге клиента.
Либо можете сделать два конфига и переключаться между ними при необходимости.
[Interface]
PrivateKey = <PEER_2_PRIVATE_KEY>
Address = 10.0.0.12/32
DNS = 8.8.8.8
[Peer]
PublicKey = <SERVER-PUBKEY>
Endpoint = <SERVER-IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20
Посмотрите на строку
Обратите внимание на строку AllowedIPs - Тут все выставлено в нули. В конфиге это значит, что абсолютно весь трафик будет маршрутизироваться через сервер. Это может быть полезно если нужно скрыть ваш IP или если нужно защитить ваш трафик если вы работаете в каких-то непроверенных публичных Wi-fi сетях. В этом случае нужно обязательно указать DNS. Тут можете указать DNS гугла или любой другой.
Configure WireGuard on Client (Windows)
Абсолютно точно так же все делается для Windows клиента
Configure WireGuard on Mobile (iOS or Android)
Приложение для iOS или Android доступно в сторах. И там и там оно называется WireGuard.
Для того чтобы использовать WireGuard на смартфоне нам нужно на сервере сначала сгенерировать ключи:
wg genkey | tee /etc/wireguard/iphone_privatekey | wg pubkey | tee /etc/wireguard/iphone_publickey
И теперь добавим в файл /etc/wireguard/wg0.conf на сервере следующее:
[Peer]
PublicKey = <IPHONE-PUBKEY>
AllowedIPs = 10.0.0.33/32
Перезапустим службу чтобы изменения вступили в силу:
systemctl restart wg-quick@wg0
Теперь создадим пустой файл конфигурации
touch iphone.conf
И добавим туда:
[Interface]
PrivateKey = <IPHONE-PRIV-KEY>
Address = 10.0.0.33/32
[Peer]
PublicKey = <SERVER-PUBKEY>
Endpoint = <SERVER-IP>:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 20
Теперь нам нужно перенести этот конфиг на смартфон. И можно конечно как-то кинуть этот файл, но значительно удобнее использовать QR код.
Для этого нужно установить qrencode
apt install qrencode
И потом выбрать конфиг и сгенерировать из него QR код
qrencode -t ansiutf8 < iphone.conf
После этого в консоли мы увидим QR код и нам остается только отсканировать его через WireGuard на мобильном приложении.