diff --git a/wireguard.md b/wireguard.md new file mode 100644 index 0000000..6d8f669 --- /dev/null +++ b/wireguard.md @@ -0,0 +1,261 @@ +# Wireguard + +## Сервер + +_Debian 11_ + +Установить пакет 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**
+**здесь указан сетевой интерфейс 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 +``` + +## Клиент + +_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 peer allowed-ips +``` + +Пример + +```bash +wg set wg0 peer 2AurHow1SuDVb4tZWhCBfrjnVQ6SU0y43i2nD/dweV8= allowed-ips 10.10.10.2/32 +``` + +После регистрации клиента на сервере можно запустить wireguard на клиенте + +```bash +wg-quick up wg-client-01 +``` + +## Клиент 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 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 на телефоне + +## Автозагрузка сервера Wireguard + +```bash +systemctl enable wg-quick@wg0 +```