diff --git a/README.md b/README.md index ee29a07..a54e7e2 100644 --- a/README.md +++ b/README.md @@ -1,96 +1,130 @@ -### ЗАПУСК ДОКЕР-КОНТЕЙНЕРА ВПН КЛИЕНТА -Для корректной работы необходимо добавить параметр **--privileged**
-Пример: +### **Запуск Docker-контейнера VPN-клиента** + +Для корректной работы необходимо добавить параметр **`--privileged`**. + +**Пример запуска контейнера с WireGuard:** ```bash docker run -d --rm --dns=8.8.8.8 --privileged --name wireguard_container wireguard_im ``` -Для копирования конфига для внп-клиента можно выполнить следующую команду:
-``` +Чтобы скопировать конфигурационный файл для VPN-клиента с сервера, используйте команду: +```bash scp work_user@194.135.20.130:~/wireguard/config/peer5/peer5.conf . ``` +Где **peer5** — это идентификатор устройства. Рекомендуется заранее уточнить, какой номер у последнего выданного конфига, чтобы избежать конфликта при одновременном подключении нескольких устройств по одному конфигу. + +--- -Здесь **peer5** - это номер устройства, рекомендуется заранее узнать, кто последний брал конфиг с сервера и какой у него был номер, чтобы не использовать один и тот же конфиг на нескольких устройствах (может некорректно работать при одновременном подключении с разных устройств по одному конфигу). -

+### **Запуск Docker-контейнера через VPN-клиент** +Чтобы контейнер работал через VPN-соединение, его необходимо подключить к контейнеру, в котором запущен VPN-клиент (обычно он называется **wireguard_container**). -### ЗАПУСК ДОКЕР-КОНТЕЙНЕРА -При запуске контейнера, чтобы он работал через сеть ВПН сервера, необходимо подключить его к докер контейнеру, внутри которого запущен ВПН-клиент. Обычно он называется (**wireguard_container**), образ этого контейнера лежит в **wireguard_im**. +Для этого при запуске контейнера укажите параметр **`--network container:wireguard_container`**. -Доп параментр для запуска: **--network container:wireguard_container**
-Пример: +**Пример запуска контейнера через VPN:** ```bash docker run --rm --network container:wireguard_container -it ubuntu sh ``` -
-### УСТАНОВКА И ЗАПУСК WIREGUARD НА ПОЛЬЗОВАТЕЛЬСКОМ УСТРОЙСТВЕ -Далее, после того как вы скачали конфиг в зависимости от устройства, на котором вы хотите использовать впн, будут меняться шаги настройки. +--- -0.0) Перед установкой необходимо получить конфиги, если они уже есть, то можно переходить к пункту 1.1.
-``` +### **Установка и запуск WireGuard на пользовательском устройстве** + +После загрузки конфигурационного файла необходимо настроить клиент WireGuard в зависимости от используемого устройства. + +#### **Шаг 0: Получение конфигурационного файла** +```bash scp work_user@194.135.20.130:~/wireguard/config/peer5/peer5.conf . ``` +Рекомендуется заранее уточнить, какой номер у последнего выданного конфига. -Здесь **peer5** - это номер устройства, рекомендуется заранее узнать, кто последний брал конфиг с сервера и какой у него был номер, чтобы не использовать один и тот же конфиг на нескольких устройствах (может некорректно работать при одновременном подключении с разных устройств по одному конфигу). +#### **Шаг 1: Установка WireGuard** +Перейдите на официальный сайт [WireGuard](https://www.wireguard.com/install/) и выберите версию для своей операционной системы. -1.1) Идем на официальный сайт и ищем нашу ОС -https://www.wireguard.com/install/ +--- -2.1) **Для смартфонов** устанавливаем Wireguard из магазина приложений
-2.1.1) Запускаем и нажимаем на плюсик в верхнем правом углу
-2.1.2) Далее выбираем *"создать из файла или архива"* и находим наш скачанный *peerN.conf*
-2.1.3) Альтернативно, если мы знаем, что хотим установить впн на смартфон, то можно скачать с сервера файл не .conf, а .png. Это будет файл с qr-кодом, открыв который на компьютере и отсканировав на телефоне, конфиг добавится автоматически.
+### **Настройка WireGuard на разных платформах** -![Alt Text](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_ios1.png)

-![Alt Text](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_ios2.jpg)

+#### **Смартфоны (Android, iOS)** +1. Установите приложение WireGuard из магазина приложений. +2. Откройте приложение и нажмите на кнопку `+` в верхнем правом углу. +3. Выберите **"Создать из файла или архива"** и укажите загруженный файл `peerN.conf`. +4. Альтернативный вариант: если известно, что подключение будет использоваться на смартфоне, можно скачать QR-код (`peerN.png`). Откройте его на компьютере и отсканируйте камерой телефона. -2.2) **Для Windows и Mac** похожая ситация
-2.2.1) Достаточно нажать на кнопку *"Добавить туннель"* слева снизу и выбрать файл peerN.conf
-2.2.2) Альтернативно, можно нажать ни на саму кнопку "Добавить туннель", а немного правее, и выбрать там пункт *"Добавить пустой туннель"*. После чего, в появившееся окно вставить содержимое файла *peerN.conf*
+**Примеры интерфейса на iOS:**
+![WireGuard iOS 1](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_ios1.png)
+![WireGuard iOS 2](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_ios2.jpg)
-![Alt Text](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_win1.png)

-![Alt Text](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_win2.png)

-![Alt Text](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_win3.png)

+--- -2.3) **Для Linux**
-2.3.1) В зависимости от используемого дистрибутива необходимо установить wireguard, способы установки описаны в пункте 1.
-2.3.2) Далее необходимо создать папку *wireguard*, если ее нет в */etc/wireguard* и поместить туда наш скачанный конфиг
-2.3.3) Запустить подключение с помощью команды
- `wg-quick up peerN` , где *peerN* - это название нашего файла *peerN.conf*
-2.3.3.1) Чтобы отключиться можно выполнить по аналогии
- `wg-quick down peerN`
-2.3.3.2) Если не удалось подключиться, и повалились ошибки, необходимо проверить установленные пакеты, и если их нет, то доустановить:
- `apt update && apt install iproute2 iptables`
+#### **Windows и macOS** +1. Установите WireGuard с [официального сайта](https://www.wireguard.com/install/). +2. Нажмите **"Добавить туннель"** в нижнем левом углу и выберите файл `peerN.conf`. +3. Альтернативный вариант: вместо загрузки файла можно выбрать **"Добавить пустой туннель"** и вручную вставить содержимое `peerN.conf`. +**Примеры интерфейса на Windows:**
+![WireGuard Windows 1](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_win1.png)
+![WireGuard Windows 2](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_win2.png)
+![WireGuard Windows 3](https://git.ai.infran.ru/ilyukhin/docker-wireguard-client/raw/branch/main/wg_win3.png)
-### Дополнительно -##### Настройка маршрутов -По умолчанию во всех конфигурационных файлах клиентов весь трафик будет идти через ВПН. За это отвечает параметр **AllowedIPs**. +--- -В файле `.conf` он выставлен как `AllowedIPs = 0.0.0.0/0`. -Понять это можно, как - данные по любому IP адресу отправляй через ВПН. +#### **Linux** +1. Установите WireGuard: + ```bash + sudo apt update && sudo apt install wireguard + ``` + Для других дистрибутивов инструкции находятся [на официальном сайте](https://www.wireguard.com/install/). + +2. Создайте папку `/etc/wireguard`, если ее нет: + ```bash + sudo mkdir -p /etc/wireguard + ``` -Если вы хотите пропускать только конкретные IP через ВПН, а остальные игнорировать, то есть несколько вариантов: -1) Первый вариант использовать сайт https://www.procustodibus.com/blog/2021/03/wireguard-allowedips-calculator/ +3. Скопируйте загруженный конфиг в `/etc/wireguard/`: + ```bash + sudo cp peerN.conf /etc/wireguard/ + ``` - Там есть инструкция по тому, как с ним работать (кроме того, там довольно неплохо расписаны построения маршрутов, так что советую прочитать). - - Всё, что вам нужно будет оттуда, это скопировать получившиеся IP адреса для AllowedIPs и вставить в ваш конфигурационный сайт (список может быть очень большим). +4. Запустите VPN: + ```bash + sudo wg-quick up peerN + ``` + Где `peerN` — это название конфигурационного файла (например, `peer5`). -2) Второй вариант использовать `ip route`. В отличие от первого, который должен работать на всех устройствах, данный вариант работает только на Linux. +5. Чтобы отключиться: + ```bash + sudo wg-quick down peerN + ``` - Для этого в вашем конфигурационном файле в блоке **[Interface]** добавьте следующие строки: +6. Если не удалось подключиться и появляются ошибки, установите необходимые пакеты: + ```bash + sudo apt update && sudo apt install iproute2 iptables + ``` -``` +--- + +### **Дополнительно: настройка маршрутов** +По умолчанию весь трафик идет через VPN. Это регулируется параметром `AllowedIPs` в файле `.conf`. + +#### **Вариант 1: Разрешить только определенные IP-адреса через VPN** +Можно использовать онлайн-калькулятор: +[WireGuard AllowedIPs Calculator](https://www.procustodibus.com/blog/2021/03/wireguard-allowedips-calculator/) + +В нем можно указать список исключений, после чего скопировать и вставить сгенерированные IP-адреса в `AllowedIPs`. + +#### **Вариант 2: Использование `ip route` для настройки исключений (Linux)** +Добавьте в конфигурационный файл WireGuard (`peerN.conf`) исключения, которые должны проходить **мимо VPN**: + +```ini [Interface] PrivateKey = ... Address = ... -# Добавляем исключения перед включением WireGuard +# Добавляем маршруты перед включением 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 +# Удаляем маршруты после отключения 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 @@ -99,16 +133,15 @@ PublicKey = ... AllowedIPs = 0.0.0.0/0 ``` -Здесь мы создаем правило, которое пропускает трафик по адресам `1.2.3.4` и `5.6.7.0/24` через `192.168.1.1` используя интерфейс `eth0`. А после отключения от ВПН, мы удаляем эти правила. +В этом примере: +- `1.2.3.4` и `5.6.7.0/24` будут направляться через основной интерфейс `eth0`, а не через VPN. +- После отключения WireGuard исключения удаляются. -**ВАЖНО**: если мы хотим, чтобы трафик шел в интренет, то `eth0` должен быть интерфейсом, предоставляющим эту возможность. - -Узнать, какой интерфейс использовать можно через команду: +Чтобы правильно указать интерфейс (`eth0`), используйте команду: ```bash ip address ``` - -Проверить получившиеся маршруты можно через: +Для проверки маршрутов выполните: ```bash ip route show table main ``` \ No newline at end of file