notes/wireguard.md

9.6 KiB
Raw Blame History

Wireguard

Способы установки для разных ОС описаны на сайте проекта https://www.wireguard.com/install/

Сервер

Debian 11

Все действия выполняются от root

sudo -i

Установить пакет wireguard

apt install wireguard

Включить IPv4 маршрутизацию (раскомментировать строку)

sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf

Проверить, что изменения внесены

sysctl -p

Для повышения безопасности изменить права на создаваемые файлы в директории /etc/wireguard на 600 (rw- --- ---)

umask 077 /etc/wireguard

Сгенерировать закрытый и публичный ключи

wg genkey | tee /etc/wireguard/privatekey

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

Создать конфигурационный файл сервера

vim /etc/wireguard/wg0.conf

ВАЖНО обратить внимание на название сетевого интерфейса в правилах iptables
здесь указан сетевой интерфейс ens3

[Interface]
# скопировать сгенерированный закрытый ключ
PrivateKey = SERVER PRIVATE KEY

# назначить IP адрес VPN
Address = 10.10.10.1/24

# сохранить конфигурацию
SaveConfig = true

# вкл./откл. подмену IP для VPN
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

# назначить порт для VPN (по-умолчанию: 51820)
ListenPort = 34567

Автозагрузка сервера Wireguard

systemctl enable wg-quick@wg0

Клиенты

1. Linux Fedora 35

Установить пакет wireguard

dnf -y install wireguard

Для повышения безопасности изменить права на создаваемые файлы в директории /etc/wireguard на 600 (rw- --- ---)

umask 077 /etc/wireguard

Сгенерировать закрытый и публичный ключи

wg genkey | tee /etc/wireguard/privatekey

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

Создать конфигурационный файл клиента

vim /etc/wireguard/wg-client-01.conf
[Interface]
# скопировать сгенерированный закрытый ключ
PrivateKey = CLIENT PRIVATE KEY

# назначить IP адрес VPN клиента
Address = 10.10.10.2/32

[Peer]
# публичный ключ сервера
PublicKey = SERVER PUBLIC KEY

# внешний IP-адрес:порт сервера
Endpoint = 51.83.180.248:34567

# Сети, которые необходимо маршрутизировать в VPN
# в данном случае весь трафик
AllowedIPs = 0.0.0.0/0

Регистрация клиента на сервере

Способ 1

этот способ стоит использовать в выключенном VPN интерфейсе

Добавить в конфигурацию сервера раздел с данными клиента

vim /etc/wireguard/wg0.conf
[Peer]
# Название клиента (для себя, чтобы понять, что это за клиент)

# публичный ключ клиента
PublicKey = 2AurHow1SuDVb4tZWhCBfrjnVQ6SU0y43i2nD/dweV8=

# IP-адрес, который назначается клиенту в сети VPN
AllowedIPs = 10.10.10.2/32

После добавления всех клиентов, можно запускать сервер

wg-quick up wg0

Проверить подключенных клиентов можно командой wg

root@server:~$ wg
interface: wg0
  public key: kAB3+ToYz623wttZXdWm2QGsjyGdTzXqg8jgNiyMlCc=
  private key: (hidden)
  listening port: 34567

peer: Ut2vPI67f+nuCv5bI4nod+BMMn5qgroJfoI/XjUtthE=
  endpoint: 109.173.124.76:54878
  allowed ips: 10.10.10.2/32
  latest handshake: 17 seconds ago
  transfer: 18.68 MiB received, 312.21 MiB sent

Способ 2

этот способ стоит использовать при включённом VPN интерфейсе

На сервере ввести команду

общий вид

wg set <wireguard-interface> peer <client-publickey> allowed-ips <client-vpn-ip/mask>

Пример

wg set wg0 peer 2AurHow1SuDVb4tZWhCBfrjnVQ6SU0y43i2nD/dweV8= allowed-ips 10.10.10.2/32

После регистрации клиента на сервере можно запустить wireguard на клиенте

wg-quick up wg-client-01

2. Клиент Android

В качестве клиента используется официальное приложение - WireGuard.

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

Для удобства эти шаги можно выполнить на сервере

Создать соответствующую директорию

mkdir /etc/wireguard/mobile-s10e
cd /etc/wireguard/mobile-s10e

Сгенерировать закрытый и публичный ключи

wg genkey | tee /etc/wireguard/mobile-s10e/privatekey

cat /etc/wireguard/mobile-s10e/privatekey | wg pubkey | tee /etc/wireguard/mobile-s10e/publickey

Создать конфигурационный файл клиента

vim /etc/wireguard/mobile-s10e/wg-client-mobile.conf
[Interface]
# скопировать сгенерированный закрытый ключ
PrivateKey = CLIENT PRIVATE KEY

# назначить IP адрес VPN клиента
Address = 10.10.10.3/32

[Peer]
# публичный ключ сервера
PublicKey = SERVER PUBLIC KEY

# внешний IP-адрес:порт сервера
Endpoint = 51.83.180.248:34567

# Сети, которые необходимо маршрутизировать в VPN
# в данном случае весь трафик
AllowedIPs = 0.0.0.0/0

Добавить конфигурацию клиента на сервер

wg set wg0 peer <CLIENT-PUBLIC-KEY> allowed-ips 10.10.10.3/32

Для удобства переноса конфигурации на телефон, на сервер необходимо установить приложение генератор QR кодов

apt install qrencode

Перенос конфигурации на телефон

На сервере ввести команду генерирующую QR код на основе конфигурации, которую подготовили ранее для телефона

qrencode -t ansiutf8 < /etc/wireguard/mobile-s10e/wg-client-mobile.conf

На экране отобразится QR код, который необходимо импортировать через приложение WireGuard на телефоне

3. Клиент Windows

Установить приложение с официального сайта https://download.wireguard.com/windows-client/wireguard-installer.exe

Как и с конфигурацией для Android, её удобно создать на сервере и затем импортировать в приложение на Windows

Создать соответствующую директорию

mkdir /etc/wireguard/win1
cd /etc/wireguard/win1

Сгенерировать закрытый и публичный ключи

wg genkey | tee /etc/wireguard/win1/privatekey

cat /etc/wireguard/win1/privatekey | wg pubkey | tee /etc/wireguard/win1/publickey

Создать конфигурационный файл клиента

vim /etc/wireguard/win1/wg-client-win1.conf
[Interface]
# скопировать сгенерированный закрытый ключ
PrivateKey = CLIENT PRIVATE KEY

# назначить IP адрес VPN клиента
Address = 10.10.10.4/32

[Peer]
# публичный ключ сервера
PublicKey = SERVER PUBLIC KEY

# внешний IP-адрес:порт сервера
Endpoint = 51.83.180.248:34567

# Сети, которые необходимо маршрутизировать в VPN
# в данном случае весь трафик
AllowedIPs = 0.0.0.0/0

Добавить конфигурацию клиента на сервер

wg set wg0 peer <CLIENT-PUBLIC-KEY> allowed-ips 10.10.10.4/32

Любым удобным способом необходимо перенести конфигурационный файл на windows. Это можно сделать с помощью WinSCP или вывести в консоль сервера с помощью cat конфигурацию клиента и создать соответствующий файл на windows. Затем этот конфигурационный файл импортировать в приложение.