327 lines
9.7 KiB
Markdown
327 lines
9.7 KiB
Markdown
# 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. Затем этот конфигурационный файл импортировать в приложение.
|