notes/wireguard.md

327 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Wireguard
Способы установки для разных ОС описаны на сайте проекта https://www.wireguard.com/install/
## Сервер
_Debian 11_
Все действия выполняются от root
```bash
sudo -i
```
Установить пакет wireguard
```bash
apt install wireguard
```
Включить IPv4 маршрутизацию (раскомментировать строку)
```bash
sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
```
Проверить, что изменения внесены
```bash
sysctl -p
```
Для повышения безопасности изменить права на создаваемые файлы в директории `/etc/wireguard` на 600 (rw- --- ---)
```bash
umask 077 /etc/wireguard
```
Сгенерировать закрытый и публичный ключи
```bash
wg genkey | tee /etc/wireguard/privatekey
cat /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
```
Создать конфигурационный файл сервера
```bash
vim /etc/wireguard/wg0.conf
```
**ВАЖНО обратить внимание на название сетевого интерфейса в правилах iptables**</br>
**здесь указан сетевой интерфейс 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
```bash
systemctl enable wg-quick@wg0
```
***
## Клиенты
### 1. Linux Fedora 35
Установить пакет wireguard
```bash
dnf -y install wireguard
```
Для повышения безопасности изменить права на создаваемые файлы в директории `/etc/wireguard` на 600 (rw- --- ---)
```bash
umask 077 /etc/wireguard
```
Сгенерировать закрытый и публичный ключи
```bash
wg genkey | tee /etc/wireguard/privatekey
cat /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
```
Создать конфигурационный файл клиента
```bash
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 интерфейсе_
Добавить в конфигурацию сервера раздел с данными клиента
```bash
vim /etc/wireguard/wg0.conf
```
```
[Peer]
# Название клиента (для себя, чтобы понять, что это за клиент)
# публичный ключ клиента
PublicKey = 2AurHow1SuDVb4tZWhCBfrjnVQ6SU0y43i2nD/dweV8=
# IP-адрес, который назначается клиенту в сети VPN
AllowedIPs = 10.10.10.2/32
```
После добавления всех клиентов, можно запускать сервер
```bash
wg-quick up wg0
```
Проверить подключенных клиентов можно командой `wg`
```bash
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 интерфейсе_
На сервере ввести команду
_общий вид_
```bash
wg set <wireguard-interface> peer <client-publickey> allowed-ips <client-vpn-ip/mask>
```
Пример
```bash
wg set wg0 peer 2AurHow1SuDVb4tZWhCBfrjnVQ6SU0y43i2nD/dweV8= allowed-ips 10.10.10.2/32
```
После регистрации клиента на сервере можно запустить wireguard на клиенте
```bash
wg-quick up wg-client-01
```
### 2. Клиент Android
В качестве клиента используется официальное приложение - [WireGuard](https://play.google.com/store/apps/details?id=com.wireguard.android&gl=PL).
Принцип настройки ничем не отличается от настройки предыдущего клиента, также необходимо сгенерировать закрытый и публичный ключ и создать конфигурацию.
Для удобства эти шаги можно выполнить на сервере
Создать соответствующую директорию
```bash
mkdir /etc/wireguard/mobile-s10e
cd /etc/wireguard/mobile-s10e
```
Сгенерировать закрытый и публичный ключи
```bash
wg genkey | tee /etc/wireguard/mobile-s10e/privatekey
cat /etc/wireguard/mobile-s10e/privatekey | wg pubkey | tee /etc/wireguard/mobile-s10e/publickey
```
Создать конфигурационный файл клиента
```bash
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
```
Добавить конфигурацию клиента на сервер
```bash
wg set wg0 peer <CLIENT-PUBLIC-KEY> allowed-ips 10.10.10.3/32
```
Для удобства переноса конфигурации на телефон, на сервер необходимо установить приложение генератор QR кодов
```bash
apt install qrencode
```
Перенос конфигурации на телефон
На сервере ввести команду генерирующую QR код на основе конфигурации, которую подготовили ранее для телефона
```bash
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
Создать соответствующую директорию
```bash
mkdir /etc/wireguard/win1
cd /etc/wireguard/win1
```
Сгенерировать закрытый и публичный ключи
```bash
wg genkey | tee /etc/wireguard/win1/privatekey
cat /etc/wireguard/win1/privatekey | wg pubkey | tee /etc/wireguard/win1/publickey
```
Создать конфигурационный файл клиента
```bash
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
```
Добавить конфигурацию клиента на сервер
```bash
wg set wg0 peer <CLIENT-PUBLIC-KEY> allowed-ips 10.10.10.4/32
```
Любым удобным способом необходимо перенести конфигурационный файл на windows. Это можно сделать с помощью WinSCP или вывести в консоль сервера с помощью cat конфигурацию клиента и создать соответствующий файл на windows. Затем этот конфигурационный файл импортировать в приложение.