You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
8.9 KiB

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.

### ЗАПУСК ДОКЕР-КОНТЕЙНЕРА ВПН КЛИЕНТА
Для корректной работы необходимо добавить параметр **--privileged**<br/>
Пример: **docker run -d --rm --dns=8.8.8.8 --privileged --name wireguard_container wireguard_im**
Для копирования конфига для внп-клиента можно выполнить следующую команду:<br/>
**scp work_user@194.135.20.130:~/wireguard/config/peer5/peer5.conf .**<br/>
Здесь **peer5** - это номер устройства, рекомендуется заранее узнать, кто последний брал конфиг с сервера и какой у него был номер, чтобы не использовать один и тот же конфиг на нескольких устройствах (может некорректно работать при одновременном подключении с разных устройств по одному конфигу).
<br/><br/>
### ЗАПУСК ДОКЕР-КОНТЕЙНЕРА
При запуске контейнера, чтобы он работал через сеть ВПН сервера, необходимо подключить его к докер контейнеру, внутри которого запущен ВПН-клиент. Обычно он называется (**wireguard_container**), образ этого контейнера лежит в **wireguard_im**.
Доп параментр для запуска: **--network container:wireguard_container**<br/>
Пример: **docker run --rm --network container:wireguard_container -it ubuntu sh**
<br/><br/>
### УСТАНОВКА И ЗАПУСК WIREGUARD НА ПОЛЬЗОВАТЕЛЬСКОМ УСТРОЙСТВЕ
Далее, после того как вы скачали конфиг в зависимости от устройства, на котором вы хотите использовать впн, будут меняться шаги настройки.
0.0) Перед установкой необходимо получить конфиги, если они уже есть, то можно переходить к пункту 1.1.<br/>
`scp work_user@194.135.20.130:~/wireguard/config/peer5/peer5.conf .`<br/>
Здесь **peer5** - это номер устройства, рекомендуется заранее узнать, кто последний брал конфиг с сервера и какой у него был номер, чтобы не использовать один и тот же конфиг на нескольких устройствах (может некорректно работать при одновременном подключении с разных устройств по одному конфигу).
1.1) Идем на официальный сайт и ищем нашу ОС
https://www.wireguard.com/install/
2.1) **Для смартфонов** устанавливаем Wireguard из магазина приложений<br/>
2.1.1) Запускаем и нажимаем на плюсик в верхнем правом углу<br/>
2.1.2) Далее выбираем *"создать из файла или архива"* и находим наш скачанный *peerN.conf*<br/>
2.1.3) Альтернативно, если мы знаем, что хотим установить впн на смартфон, то можно скачать с сервера файл не .conf, а .png. Это будет файл с qr-кодом, открыв который на компьютере и отсканировав на телефоне, конфиг добавится автоматически.<br/>
![Alt Text](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_ios1.png)<br/><br/>
![Alt Text](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_ios2.jpg)<br/><br/>
2.2) **Для Windows и Mac** похожая ситация<br/>
2.2.1) Достаточно нажать на кнопку *"Добавить туннель"* слева снизу и выбрать файл peerN.conf<br/>
2.2.2) Альтернативно, можно нажать ни на саму кнопку "Добавить туннель", а немного правее, и выбрать там пункт *"Добавить пустой туннель"*. После чего, в появившееся окно вставить содержимое файла *peerN.conf*<br/>
![Alt Text](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_win1.png)<br/><br/>
![Alt Text](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_win2.png)<br/><br/>
![Alt Text](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_win3.png)<br/><br/>
2.3) **Для Linux**<br/>
2.3.1) В зависимости от используемого дистрибутива необходимо установить wireguard, способы установки описаны в пункте 1.<br/>
2.3.2) Далее необходимо создать папку *wireguard*, если ее нет в */etc/wireguard* и поместить туда наш скачанный конфиг<br/>
2.3.3) Запустить подключение с помощью команды<br/>
`wg-quick up peerN` , где *peerN* - это название нашего файла *peerN.conf*<br/>
2.3.3.1) Чтобы отключиться можно выполнить по аналогии<br/>
`wg-quick down peerN`<br/>
2.3.3.2) Если не удалось подключиться, и повалились ошибки, необходимо проверить установленные пакеты, и если их нет, то доустановить:<br/>
`apt update && apt install iproute2 iptables`<br/>
### Дополнительно
##### Настройка маршрутов
По умолчанию во всех конфигурационных файлах клиентов весь трафик будет идти через ВПН. За это отвечает параметр **AllowedIPs**.
В файле `.conf` он выставлен как `AllowedIPs = 0.0.0.0/0`.
Понять это можно, как - данные по любому IP адресу отправляй через ВПН.
Если вы хотите пропускать только конкретные IP через ВПН, а остальные игнорировать, то есть несколько вариантов:
1) Первый вариант использовать сайт https://www.procustodibus.com/blog/2021/03/wireguard-allowedips-calculator/
Там есть инструкция по тому, как с ним работать (кроме того, там довольно неплохо расписаны построения маршрутов, так что советую прочитать).
Всё, что вам нужно будет оттуда, это скопировать получившиеся IP адреса для AllowedIPs и вставить в ваш конфигурационный сайт (список может быть очень большим).
2) Второй вариант использовать `ip route`. В отличие от первого, который должен работать на всех устройствах, данный вариант работает только на Linux.
Для этого в вашем конфигурационном файле в блоке **[Interface]** добавьте следующие строки:
```
[Interface]
PrivateKey = ...
Address = ...
# Добавляем исключения перед включением WireGuard
PreUp = ip route add 1.2.3.4 via 192.168.1.1 dev eth0
PreUp = ip route add 5.6.7.0/24 via 192.168.1.1 dev eth0
# Удаляем исключения после выключения WireGuard
PostDown = ip route del 1.2.3.4 via 192.168.1.1 dev eth0
PostDown = ip route del 5.6.7.0/24 via 192.168.1.1 dev eth0
[Peer]
PublicKey = ...
AllowedIPs = 0.0.0.0/0
```
Здесь мы создаем правило, которое пропускает трафик по адресам `1.2.3.4` и `5.6.7.0/24` через `192.168.1.1` используя интерфейс `eth0`. А после отключения от ВПН, мы удаляем эти правила.
**ВАЖНО**: если мы хотим, чтобы трафик шел в интренет, то `eth0` должен быть интерфейсом, предоставляющим эту возможность.
Узнать, какой интерфейс использовать можно через команду:
```bash
ip address
```
Проверить получившиеся маршруты можно через:
```bash
ip route show table main
```