Перейти к основному содержимому

Шпаргалка по wireguard

wireguard

Установка

обновляем систему:

apt update && apt upgrade -y

установка

apt install -y wireguard

Настройка сервера

Файлы настроек находятся в

cd /etc/wireguard

Создаём ключи для сервера

wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

Проставляем права на приватный ключ:

chmod 600 /etc/wireguard/privatekey

Или еще вариант. Команда удаляет все разрешения к файлу для пользователей и групп, кроме пользователя root, чтобы гарантировать, что только он может получить доступ к закрытому ключу.

chmod go= /etc/wireguard/private.key

Проверим, как у вас называется сетевой интерфейс:

ip a

Скорее всего у вас сетевой интерфейс eth0, но возможно и другой, например, ens3 или как-то иначе. Это название интерфейса используется далее в конфиге /etc/wireguard/wg0.conf, который мы сейчас создадим:

vim /etc/wireguard/wg0.conf
wg0.conf
[Interface]
PrivateKey = <privatekey>
Address = 10.0.0.1/24
ListenPort = 51830
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

Если не знаете текстовый редактор vim — откройте файл с nano, он проще в работе.

Обратите внимание — в строках PostUp и PostDown использован как раз сетевой интерфейс eth0. Если у вас другой — замените eth0 на ваш.

Вставляем вместо <privatekey> содержимое файла /etc/wireguard/privatekey

Настраиваем IP форвардинг:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

Включаем systemd демон с wireguard:

systemctl enable wg-quick@wg0.service
systemctl start wg-quick@wg0.service
systemctl status wg-quick@wg0.service

Можно посмотреть монитор подключенных клиентов

wg

Создаём ключи клиента:

wg genkey | tee /etc/wireguard/user_privatekey | wg pubkey | tee /etc/wireguard/user_publickey

Добавляем в конфиг сервера клиента:

vim /etc/wireguard/wg0.conf
wg0.conf
[Peer]
# Name = user ivan
PublicKey = <user_publickey>
AllowedIPs = 10.0.0.2/32

Вместо <user_publickey> — заменяем на содержимое файла /etc/wireguard/user_publickey

Перезагружаем systemd сервис с wireguard:

systemctl restart wg-quick@wg0 && systemctl status wg-quick@wg0

Дополнения

lswg

У сервера wireguard есть совсем небольшой недостаток. В нем нет отображения имет клиентов (peers) Во время выводы команды wg или wg show пиры отображаются только хешами.

От этого не удобно и муторно понимать, какой хеш, к какому пользователю относится.

Решением позволяющим показывать имя пользователя является python скрипт lswg

Он отображает имена Name прописаные в файле wg0.conf

wg0.conf
[Peer]
# Name = user ivan
PublicKey = <user_publickey>
AllowedIPs = 10.0.0.2/32

Скачать и установить lswg

Предполагается что на сервере вы как root

wget https://gist.githubusercontent.com/stavis-dev/9537cd4f9bf34a7b57fe698d4e4b780c/raw/lswg && \
chmod +x lswg && \
mv lswg /usr/bin/

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

Первым делом, само собой, следует установить клиенскую программу на локальный комп.

На локальной машине (например, на ноутбуке) создаём текстовый файл с конфигом клиента:

vim user_wb.conf
user_wb.conf
[Interface]
PrivateKey = <CLIENT-PRIVATE-KEY>
Address = 10.0.0.2/32
DNS = 8.8.8.8

[Peer]
PublicKey = <SERVER-PUBKEY>
Endpoint = <SERVER-IP>:51830
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20

Здесь:

  • <CLIENT-PRIVATE-KEY> заменяем на приватный ключ клиента, то есть содержимое файла /etc/wireguard/user_privatekey на сервере.
  • <SERVER-PUBKEY> заменяем на публичный ключ сервера, то есть на содержимое файла /etc/wireguard/publickey на сервере.
  • <SERVER-IP> заменяем на IP сервера.

Этот файл открываем в Wireguard клиенте (есть для всех операционных систем, в том числе мобильных) — и жмем в клиенте кнопку подключения.