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