├── Containers ├── amnezia-wg-docker-platforms-nat.zip └── amnezia-wg-docker-platforms.zip ├── Demonstration ├── 1.png ├── 10.png ├── 11.png ├── 12.png ├── 13.png ├── 14.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png ├── 9.png └── logo.png ├── Images ├── amd64-nat.tar ├── amd64.tar ├── arm-nat.tar ├── arm.tar ├── arm64-nat.tar └── arm64.tar └── README.md /Containers/amnezia-wg-docker-platforms-nat.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Containers/amnezia-wg-docker-platforms-nat.zip -------------------------------------------------------------------------------- /Containers/amnezia-wg-docker-platforms.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Containers/amnezia-wg-docker-platforms.zip -------------------------------------------------------------------------------- /Demonstration/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/1.png -------------------------------------------------------------------------------- /Demonstration/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/10.png -------------------------------------------------------------------------------- /Demonstration/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/11.png -------------------------------------------------------------------------------- /Demonstration/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/12.png -------------------------------------------------------------------------------- /Demonstration/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/13.png -------------------------------------------------------------------------------- /Demonstration/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/14.png -------------------------------------------------------------------------------- /Demonstration/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/2.png -------------------------------------------------------------------------------- /Demonstration/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/3.png -------------------------------------------------------------------------------- /Demonstration/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/4.png -------------------------------------------------------------------------------- /Demonstration/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/5.png -------------------------------------------------------------------------------- /Demonstration/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/6.png -------------------------------------------------------------------------------- /Demonstration/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/7.png -------------------------------------------------------------------------------- /Demonstration/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/8.png -------------------------------------------------------------------------------- /Demonstration/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/9.png -------------------------------------------------------------------------------- /Demonstration/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Demonstration/logo.png -------------------------------------------------------------------------------- /Images/amd64-nat.tar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Images/amd64-nat.tar -------------------------------------------------------------------------------- /Images/amd64.tar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Images/amd64.tar -------------------------------------------------------------------------------- /Images/arm-nat.tar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Images/arm-nat.tar -------------------------------------------------------------------------------- /Images/arm.tar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Images/arm.tar -------------------------------------------------------------------------------- /Images/arm64-nat.tar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Images/arm64-nat.tar -------------------------------------------------------------------------------- /Images/arm64.tar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/catesin/AmneziaVPN-MikroTik/93390f4a1be596afda2a234cdc76472c20868829/Images/arm64.tar -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # :boom: AmneziaWG + MikroTik :boom: 2 | 3 | ![img](Demonstration/logo.png) 4 | 5 | :dizzy: Аналог [XRay Vless Reality + MikroTik ](https://github.com/catesin/Xray-vless-reality-MikroTik) 6 | 7 | В данном репозитории рассматривается работа MikroTik RouterOS V7.17+ с проектом [Amnezia WG](https://docs.amnezia.org/ru/documentation/amnezia-wg/). В процессе настройки, относительно вашего оборудования, следует выбрать вариант реализации с [контейнером](https://help.mikrotik.com/docs/display/ROS/Container) внутри RouterOS или без контейнера. 8 | 9 | :school: Внимание! Инструкция среднего уровня сложности. Перед применением настроек вам необходимо иметь опыт в настройке MikroTik уровня сертификации MTCNA. 10 | 11 | В репозитории присутствуют готовые контейнеры Docker в каталоге **"Images"** которые можно сразу использовать внутри RouterOS. Предусмотрена маршрутизация IPv6. Контейнеры делятся на три архитектуры **ARM, ARM64 и x86**. Под каждую архитектуру собрано два контейнера с NAT и без NAT. Он нам нужен что бы использовать правило masquerade при передаче трафика через контейнер. Если настраивается прозрачная маршрутизация, NAT не обязателен. 12 | 13 | :point_right: Особенности контейнеров с NAT: 14 | 1) Не требуют дополнительной настройки на стороне сервера VPS. 15 | 2) Более тяжеловесны. Может быть критично для некоторых устройств MikroTik с маленькой внутренней памятью. 16 | 17 | :point_right: Особенности контейнеров без NAT: 18 | 1) Требуют [дополнительной](#MikroTik_container_3) настройки на стороне сервера VPS 19 | 2) Более лёгкие по объёму 20 | 21 | Вариант №2 без контейнера подойдёт к любому домашнему роутеру который хоть немного умеет работать с аналогичными в MikroTik адрес-листами или имеет расширенный функционал по маршрутизации. 22 | 23 | ------------ 24 | 25 | * [Преднастройка RouterOS](#Pre_edit) 26 | * [Вариант №1. RouterOS с контейнером](#R_AWG) 27 | - [Сборка контейнера на Windows](#MikroTik_container_1) 28 | - [Готовые контейнеры](#Build_ready) 29 | - [Настройка контейнера в RouterOS](#MikroTik_container_2) 30 | - [Настройка серверной части для контейнеров без NAT](#MikroTik_container_3) 31 | * [Вариант №2. RouterOS без контейнера](#RLA) 32 | - [Установка Debian Linux](#MikroTik_linux_1) 33 | - [Установка xrdp](#MikroTik_linux_2) 34 | - [Включение маршрутизации в Linux](#MikroTik_linux_3) 35 | - [Установка клиента AmneziaVPN](#MikroTik_linux_4) 36 | - [Настройка IPtables](#MikroTik_linux_5) 37 | - [Автовход xfce](#MikroTik_linux_6) 38 | - [Настройка роутера](#MikroTik_linux_7) 39 | 40 | 41 | ------------ 42 | 43 | 44 | ## Преднастройка RouterOS 45 | 46 | Создадим отдельную таблицу маршрутизации: 47 | ``` 48 | /routing table 49 | add disabled=no fib name=r_to_vpn 50 | ``` 51 | Добавим address-list "to_vpn" что бы находившиеся в нём IP адреса и подсети заворачивать в пока ещё не созданный туннель 52 | ``` 53 | /ip firewall address-list 54 | add address=8.8.4.4 list=to_vpn 55 | ``` 56 | Добавим address-list "RFC1918" что бы не потерять доступ до RouterOS при дальнейшей настройке 57 | ``` 58 | /ip firewall address-list 59 | add address=10.0.0.0/8 list=RFC1918 60 | add address=172.16.0.0/12 list=RFC1918 61 | add address=192.168.0.0/16 list=RFC1918 62 | ``` 63 | 64 | 65 | Добавим правила в mangle для address-list "RFC1918" и переместим его в самый верх правил 66 | ``` 67 | /ip firewall mangle 68 | add action=accept chain=prerouting dst-address-list=RFC1918 in-interface-list=!WAN 69 | ``` 70 | 71 | Добавим правило транзитного трафика в mangle для address-list "to_vpn" 72 | ``` 73 | /ip firewall mangle 74 | add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-list=to_vpn in-interface-list=!WAN \ 75 | new-connection-mark=to-vpn-conn passthrough=yes 76 | ``` 77 | Добавим правило для транзитного трафика отправляющее искать маршрут до узла назначения через таблицу маршрутизации "r_to_vpn", созданную на первом шаге 78 | ``` 79 | add action=mark-routing chain=prerouting connection-mark=to-vpn-conn in-interface-list=!WAN new-routing-mark=r_to_vpn \ 80 | passthrough=yes 81 | ``` 82 | Маршрут по умолчанию в созданную таблицу маршрутизации "r_to_vpn" добавим чуть позже. 83 | 84 | :exclamation:Два выше обозначенных правила будут работать только для трафика, проходящего через маршрутизатор. 85 | Если вы хотите заворачивать трафик, генерируемый самим роутером (например команда ping 8.8.4.4 c роутера для проверки туннеля в контейнере), тогда добавляем ещё два правила (не обязательно). 86 | Они должны находиться по порядку, следуя за выше обозначенными правилами. 87 | ``` 88 | /ip firewall mangle 89 | add action=mark-connection chain=output connection-mark=no-mark \ 90 | dst-address-list=to_vpn new-connection-mark=to-vpn-conn-local \ 91 | passthrough=yes 92 | add action=mark-routing chain=output connection-mark=to-vpn-conn-local \ 93 | new-routing-mark=r_to_vpn passthrough=yes 94 | ``` 95 | 96 | 97 | ------------ 98 | 99 | 100 | ## Вариант №1. RouterOS с контейнером 101 | 102 | ### Сборка контейнера на Windows 103 | 104 | Данный пункт настройки подходит только для устройств с архитектурой **ARM, ARM64 или x86**. Перед запуском контейнера в RouteOS убедитесь что у вас [включены контейнеры](https://help.mikrotik.com/docs/display/ROS/Container). С полным списком устройств можно ознакомится [тут](https://mikrotik.com/products/matrix). [Включаем поддержку контейнеров в RouterOS](https://www.google.com/search?q=%D0%9A%D0%B0%D0%BA+%D0%B2%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C+%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D1%8B+%D0%B2+mikrotik&oq=%D0%BA%D0%B0%D0%BA+%D0%B2%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C+%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D1%8B+%D0%B2+mikrotik). 105 | Так же предполагается что на устройстве (или если есть USB порт с флешкой) имеется +- 70 Мбайт свободного места для разворачивания контейнера внутри RouterOS. Если места не хватает, его можно временно расширить [за счёт оперативной памяти](https://www.youtube.com/watch?v=uZKTqRtXu4M). После перезагрузки RouterOS, всё что находится в RAM, стирается. 106 | 107 | 108 | **Где взять контейнер?** Его можно собрать самому из текущего репозитория каталога **"Containers"** или скачать готовый образ под выбранную архитектуру из каталога **"Images"**. 109 | Скачав готовый образ [переходим сразу к настройке](#MikroTik_container_2). 110 | 111 | 112 | Для самостоятельной сборки следует установить подсистему Docker [buildx](https://github.com/docker/buildx?tab=readme-ov-file), "make" и "go". 113 | 114 | В текущем примере будем собирать на Windows: 115 | 1) Скачиваем [Docker Desktop](https://docs.docker.com/desktop/) и устанавливаем 116 | 2) Скачиваем нужный архив с NAT или без NAT (различия описаны в начале статьи) для сборки из каталога **"Containers"** под вашу архитектуру RouterOS. 117 | 3) Распаковываем архив 118 | 3) Открываем CMD и переходим в распакованный каталог (cd <путь до каталога>) 119 | 4) Запускаем Docker с ярлыка на рабочем столе (окно приложения должно просто висеть в фоне при сборке) и через cmd собираем контейнер под выбранную архитектуру RouterOS 120 | 121 | - ARMv7 (arm/v7) — спецификация 7-го поколения оборудования ARM, которое поддерживает только архитектуру AArch32. 122 | - ARMv8 (arm64/v8) — спецификация 8-го поколения оборудования ARM, которое поддерживает архитектуры AArch32 и AArch64. 123 | - AMD64 (amd64) — это 64-битный процессор, который добавляет возможности 64-битных вычислений к архитектуре x86 124 | 125 | Для ARMv8 126 | ``` 127 | docker buildx build --build-arg ARCHITECTURE=arm64 --no-cache --progress=plain --platform linux/arm64/v8 --output=type=docker --tag docker-awg:latest . && docker save docker-awg:latest > docker-awg.tar 128 | ``` 129 | 130 | Для ARMv7 131 | ``` 132 | docker buildx build --build-arg ARCHITECTURE=arm --no-cache --progress=plain --platform linux/arm/v7 --output=type=docker --tag docker-awg:latest . && docker save docker-awg:latest > docker-awg.tar 133 | ``` 134 | 135 | Для amd64 136 | ``` 137 | docker buildx build --build-arg ARCHITECTURE=amd64 --no-cache --progress=plain --platform linux/amd64 --output=type=docker --tag docker-awg:latest . && docker save docker-awg:latest > docker-awg.tar 138 | ``` 139 | Иногда процесс создания образа может подвиснуть из-за плохого соединения с интернетом. Следует повторно запустить сборку. 140 | После окончания сборки, необходимо загрузить появившийся архив "docker-awg.tar" в корень на RouterOS. 141 | 142 | 143 | 144 | ### Настройка контейнера в RouterOS 145 | 146 | В текущем примере на устройстве MikroTik флешки нет. Хранить будем всё в корне. 147 | Если у вас есть USB порт и флешка, лучше размещать контейнер на ней. Можно комбинировать память загрузив образ в расшаренный диск [за счёт оперативной памяти](https://www.youtube.com/watch?v=uZKTqRtXu4M), а сам контейнер разворачивать в постоянной памяти. 148 | 149 | :exclamation:**Если контейнер не запускается на флешке.** 150 | Например, вы хотите разместить контейнер в каталоге /usb1/docker/awg. Не создавайте заранее каталог awg на USB-флеш-накопителе. При создании контейнера добавьте в команду распаковки параметр "root-dir=usb1/docker/awg", в этом случае контейнер распакуется самостоятельно создав каталог /usb1/docker/awg и запустится без проблем. 151 | 152 | **Перемещаем собранный или готовый контейнер на диск устройства.** 153 | В текущем примере название контейнера будет "docker-awg.tar". 154 | Если вы скачали готовый контейнер из каталога **"Images"**, переименуйте его в "docker-awg.tar" для применения нижеследующих команд. 155 | 156 | В RouterOS выполняем: 157 | 1) Создадим интерфейс для контейнера 158 | ``` 159 | /interface veth 160 | add address=172.18.20.2/30 gateway=172.18.20.1 gateway6="" name=docker-awg-veth 161 | ``` 162 | 163 | 2) Добавим правило в mangle для изменения mss для трафика, уходящего в контейнер. Поместите его после правила с RFC1918 (его мы создали ранее). 164 | ``` 165 | /ip firewall mangle 166 | add action=change-mss chain=forward new-mss=1360 out-interface=docker-awg-veth passthrough=yes protocol=tcp tcp-flags=syn tcp-mss=1453-6553 167 | ``` 168 | 169 | 3) Назначим на созданный интерфейс IP адрес. IP 172.18.20.2 возьмёт себе контейнер, а 172.18.20.1 будет адрес RouterOS. 170 | ``` 171 | /ip address 172 | add interface=docker-awg-veth address=172.18.20.1/30 173 | ``` 174 | 4) В таблице маршрутизации "r_to_vpn" создадим маршрут по умолчанию ведущий на контейнер 175 | ``` 176 | /ip route 177 | add distance=1 dst-address=0.0.0.0/0 gateway=172.18.20.2 routing-table=r_to_vpn 178 | ``` 179 | 5) Включаем masquerade для всего трафика, уходящего в контейнер. 180 | ``` 181 | /ip firewall nat 182 | add action=masquerade chain=srcnat out-interface=docker-awg-veth 183 | ``` 184 | 6) Создадим каталог в корне "wg" 185 | ``` 186 | /file add type=directory name=wg 187 | ``` 188 | Поместите в данный каталог файл подключения клиента к серверу AWG. В примере это файл awg0.conf, текстовую конфигурацию для которого, сформировало приложение AmneziaVPN. (Копируем настройки Amnezia WireGuard из приложения в виде текста и вставляем в файл awg0.conf). 189 | Не используйте автоматически сформированный маршрут по умолчанию (0.0.0.0/0) в разделе конфигурации клиента [Peer] => AllowedIPs. Для расчёта разрешённых подсетей, отправляемых в туннель, используйте [WireGuard калькулятор](https://www.procustodibus.com/blog/2021/03/wireguard-allowedips-calculator/). 190 | В качестве разрешённых сетей нужно прописать маршрут "0.0.0.0/0" и в исключения добавить три сети: 191 | 192 | - 172.18.20.0/30 (сеть связующая роутер и контейнер из текущего примера) 193 | - 123.123.123.123/32 (адрес из поля [Peer] => Endpoint в конфигурации клиента AWG. Фактически это адрес куда будет подключаться наш контейнер с AWG) 194 | - 10.8.1.*/32 (сеть из поля [Interface] => Address в конфигурации клиента AWG) 195 | 196 | Полученный результат из калькулятора вставляем в [Peer] => AllowedIPs конфигурации клиента AWG. 197 | Должно получиться примерно так 198 | 199 | ![img](Demonstration/1.png) 200 | 201 | 7) Создадим каталог в корне "tmp". Для временных файлов контейнера. 202 | ``` 203 | /file add type=directory name=tmp 204 | ``` 205 | 8) Создадим запись "mounts" для проброса файла конфигурации клиента AWG в контейнер 206 | ``` 207 | /container mounts 208 | add dst=/etc/amnezia/amneziawg/ name=awg_conf src=/wg 209 | ``` 210 | 9) Теперь создадим сам контейнер 211 | ``` 212 | /container config 213 | set tmpdir=tmp 214 | 215 | /container 216 | add hostname=amnezia interface=docker-awg-veth logging=yes start-on-boot=yes mounts=awg_conf file=docker-awg.tar 217 | ``` 218 | Подождите немного пока контейнер распакуется до конца и файл "docker-awg.tar" можно удалить. В итоге у вас должна получиться похожая картина, в которой есть распакованный контейнер и файл конфигурации AWG. 219 | 220 | ![img](Demonstration/2.png) 221 | 222 | 10) Запускаем контейнер через WinBox в разделе меню "container" и проверяем что туннель у нас поднялся. В логах MikroTik вы увидите характерные сообщения о запуске контейнера. 223 | В окне терминала подключаемся к консоли самого контейнера 224 | ``` 225 | /container shell 0 226 | ``` 227 | 11) **Проверка! Убедитесь что у вас появился поднятый интерфейс awg0 выполнив в контейнере** 228 | ``` 229 | ip a 230 | ``` 231 | ![img](Demonstration/3.png) 232 | 233 | Если интерфейс появился, можно сделать трассировку и убедиться, что сетевой пакет ушёл в туннель AWG. Если на первом хопе вы увидели адрес 172.18.20.1 значит настройка файла конфигурации клиента с [WireGuard калькулятором ](https://www.procustodibus.com/blog/2021/03/wireguard-allowedips-calculator/)произведена неверно. 234 | 235 | ![img](Demonstration/4.png) 236 | 237 | 238 | **Для контейнеров с NAT:** 239 | :fire::fire::fire: Поздравляю! Настройка для вас завершена. Можно проверить доступность IP 8.8.4.4 из списка "to_vpn" (этот адрес мы добавили ранее). 240 | 241 | **Для контейнеров без NAT:** 242 | Теперь сетевые пакеты которые вы отправляете с рабочего места или с RouterOS на 8.8.4.4 (этот адрес ранее мы добавили в адрес-лист "to_vpn") будут проходить правило masquerade и заворачиваться на контейнер. 243 | Наши сетевые пакеты доходят до адреса назначения 8.8.4.4 и возвращаются до сервера AmneziaVPN, но дальше в туннель на наш контейнер в MikroTik уже не вернутся. 244 | Тут дело в том, что сервер AmneziaVPN, запущенный так же в контейнере на удалённом VPS и к которому происходит подключение через AWG туннель, 245 | знает что к нему подключился клиент с определённым IP адресом из сети 10.8.1.0/24, но ничего не знает про сеть 172.18.20.0/30, связующую наш роутер и контейнер. 246 | Добавим её на стороне сервера в следующем разделе. 247 | 248 | 249 | ## Настройка серверной части AmneziaWG для контейнеров без NAT 250 | 251 | Предполагается что вы уже установили VPS сервер с AmneziaVPN и настроили протокол AmneziaWG через приложение. 252 | Каждый протокол VPN запускается в своём контейнере. Нам остаётся найти его. 253 | Подключаемся к VPS серверу и ищем название нашего контейнера. 254 | ``` 255 | docker ps -a 256 | ``` 257 | ![img](Demonstration/5.png) 258 | 259 | Подключаемся к его shell 260 | ``` 261 | docker exec -it amnezia-awg bash 262 | ``` 263 | Определяем название интерфейса AWG через ``` ip a ``` или посмотрев содержимое каталога через ``` ls -l /opt/amnezia/awg/```. 264 | У вас интерфейс AWG может быть с другим названием. 265 | 266 | ![img](Demonstration/6.png) 267 | 268 | Временно гасим интерфейс wg0 и всю его конфигурацию. 269 | ``` 270 | wg-quick down /opt/amnezia/awg/wg0.conf 271 | ``` 272 | Открываем конфиг через текстовый редактор Vim (к сожалению других в контейнере нет) [Заранее попрактикуйтесь](https://www.google.com/search?q=vim+%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B) как редактировать текст, сохранять и выходить из редактора. 273 | ``` 274 | vi /opt/amnezia/awg/wg0.conf 275 | ``` 276 | Находим [Peer] нашего клиента (фактически он будет таким же как и в конфиге клиента в разделе [Interface]) по выданному адресу и добавляем нашу сеть 172.18.20.0/30 к AllowedIPs. 277 | Должно получиться так: 278 | 279 | ![img](Demonstration/7.png) 280 | 281 | Открываем скрипт где хранятся правила IPtables 282 | ``` 283 | vi /opt/amnezia/start.sh 284 | ``` 285 | 286 | Изменяем существующие правила MASQUERADE или добавляем свои по аналогии в конец списка 287 | ``` 288 | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 289 | iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE 290 | ``` 291 | Должно получиться так: 292 | 293 | ![img](Demonstration/8.png) 294 | 295 | В конце просто запускаем конфиг и выходим из контейнера. 296 | ``` 297 | wg-quick up /opt/amnezia/awg/wg0.conf 298 | exit 299 | exit 300 | ``` 301 | 302 | :fire::fire::fire: **Поздравляю! Настройка завершена. Можно проверить доступность IP 8.8.4.4 из списка "to_vpn" (этот адрес мы добавили ранее).** 303 | 304 | Что мы получили в итоге? Прозрачную маршрутизацию до контейнера AmneziaWG на стороне сервера. 305 | RouterOS отправляет помеченные соединения в контейнер=>контейнер заворачивает трафик в туннель AWG=>Контейнер AWG на стороне VPS сервера получая пакет. 306 | Благодаря нашему обратному маршруту 172.18.20.0/30 сервер будет знать куда ему отправлять пакеты в обратную сторону=> далее пакет проходит правила NAT и выходит в интернет. 307 | 308 | PS. В контейнере есть "cat" для быстрого просмотра содержимого файлов, "top" для ознакомления с запущенными процессами. 309 | Так же можно безболезненно перезагружать сервер VPS, добавлять или удалять других пользователей AWG. 310 | 311 | ------------ 312 | 313 | ## Вариант №2. RouterOS без контейнера 314 | 315 | Не известно введут ли разработчики MikroTik возможность нативной интеграции с AmneziaVPN. 316 | Вполне вероятно, что этого может не произойти. Если вам не повезло и ваш MikroTik не поддерживает контейнеры, не расстраивайтесь. 317 | Есть вполне рабочее решение, подходящее большинству роутеров (не только MikroTik). 318 | Нам нужен [дополнительный мини ПК](https://www.google.com/search?q=%D0%BC%D0%B8%D0%BD%D0%B8+%D0%BF%D0%BA+%D0%B4%D0%BB%D1%8F+linux) с одним сетевым портом и возможностью установить на него [Debian Linux](https://www.debian.org/). 319 | Идея заключается в единоразовой настройке Debian с помощью экрана монитора с клавиатурой и последующее удалённое управление без необходимости подключения периферийных устройств. 320 | 321 | 322 | ### Установка Debian Linux 323 | 324 | Предполагается, что вы сможете самостоятельно установить Debian на мини ПК через GUI с редактированием некоторых значений в процессе установки, подключением кабеля ethernet к локальной сети вашего роутера. 325 | В настройках BIOS мини ПК желательно сделать автозапуск системы при появлении питания. 326 | Установка Debian Linux потребуется в самой минимальной конфигурации 327 | 328 | ![img](Demonstration/9.png) 329 | 330 | На этапе выбора программного обеспечения устанавливаем Xfce (более стабилен при подключении через RDP), SSH сервер и стандартные системные утилиты. 331 | 332 | ![img](Demonstration/10.png) 333 | 334 | Дальнейшие действия можно сделать подключившись через SSH к мини ПК. 335 | 336 | Дадим root доступ для нашего пользователя (у вас он может быть другим) 337 | 338 | ``` 339 | su - 340 | sudo usermod -aG sudo root-home 341 | ``` 342 | 343 | P.S. По вкусу можно установить ```apt install mc htop -y``` 344 | 345 | 346 | ### Установка xrdp 347 | 348 | Для удалённого управления клиентом AmneziaVPN нам понадобится RDP 349 | 350 | ``` 351 | apt-get update 352 | apt-get install xrdp -y 353 | systemctl enable xrdp 354 | systemctl start xrdp 355 | ``` 356 | 357 | 358 | ### Включение маршрутизации в Linux 359 | 360 | Маршрутизация нам необходима, так-как нужно передавать пакеты от роутера через Debian в туннель клиента AmneziaVPN. 361 | Фактически наш Debian будет ещё одним роутером. 362 | 363 | Открываем файл 364 | ``` 365 | nano /etc/sysctl.conf 366 | ``` 367 | 368 | Ищем строку ```net.ipv4.ip_forward=```, раскомментируем и приводим к виду ```net.ipv4.ip_forward=1```. Сохраняем файл и перезагружаемся. 369 | Проверяем результат выполнив 370 | 371 | ``` 372 | sysctl net.ipv4.ip_forward 373 | ``` 374 | 375 | Должен получиться вывод ```net.ipv4.ip_forward = 1``` 376 | 377 | 378 | ### Установка клиента AmneziaVPN 379 | 380 | Подключаемся через RDP к мини ПК и устанавливаем AmneziaVPN, заранее переместив скачанный "AmneziaVPN_Linux_Installer.bin" в Debian. Переходим в каталог с файлом. 381 | 382 | В текущем примере файл лежит в каталоге ```/opt/amneziavpn``` 383 | 384 | Открываем терминал внутри RDP сессии и выполняем 385 | 386 | ``` 387 | cd /opt/amneziavpn 388 | sudo chmod u+x AmneziaVPN_Linux_Installer.bin 389 | sudo apt-get install libxcb-icccm4 libfontconfig1 libxcb-glx0 libx11-xcb1 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-shape0 libxcb-sync1 libxcb-xfixes0 libxcb-xinerama0 libxcb-xkb1 libxkbcommon-x11-0 libgl1 -y 390 | ./AmneziaVPN_Linux_Installer.bin 391 | ``` 392 | 393 | После появления окна приложения AmneziaVPN делаем стандартную процедуру установки. В результате вы должны получить установленное приложение 394 | 395 | ![img](Demonstration/11.png) 396 | 397 | Вставляем сформированный конфиг AmneziaWireGuard или OpenVPN в приложение. Включаем автозапуск при входе пользователя и автоподключение. 398 | 399 | ![img](Demonstration/12.png) 400 | 401 | 402 | ### Настройка IPtables 403 | 404 | Весь трафик, отправляемый в туннель, нужно провести через правило NAT MASQUERADE иначе удаённый сервер не будет знать куда отправлять трафик в обратную сторону. 405 | 406 | Установим IPtables. На все сообщения в процессе установки отвечаем "ДА" 407 | ``` 408 | sudo apt install iptables-persistent iptables -y 409 | ``` 410 | 411 | Теперь нам нужно определиться с названием интерфейса, который создаст клиент AmneziaVPN. 412 | **В текущем примере мы будем подключатсья через протокол AWG. При использовании OpenVPN имя интерфейса может быть другим.** 413 | Подключаемся к VPN и смотрим название интерфейса в выводе ```ip a``` 414 | 415 | ![img](Demonstration/13.png) 416 | 417 | Включаем MASQUERADE для данного интерфейса и сохраняемся, что бы после перезагрузки правила не удалились. 418 | 419 | ``` 420 | iptables -t nat -A POSTROUTING -o amn0 -j MASQUERADE 421 | iptables-save 422 | iptables-save > /etc/iptables/rules.v4 423 | ip6tables-save > /etc/iptables/rules.v6 424 | ``` 425 | 426 | Перезагружаемся и смотрим результат 427 | ``` 428 | iptables -t nat -L -n -v 429 | ``` 430 | 431 | В цепочке "Chain POSTROUTING" должно присутствовать наше правило: 432 | 433 | ![img](Demonstration/14.png) 434 | 435 | 436 | ### Автовход xfce 437 | 438 | Для того чтобы включить автоматический вход в систему на debian, необходимо отредактировать файл ```/etc/gdm3/daemon.conf```. 439 | Авторизуемся и входим под root ```su -``` 440 | Можно воспользоваться текстовым редактором nano : 441 | 442 | ``` 443 | sudo nano /etc/lightdm/lightdm.conf 444 | ``` 445 | 446 | Ищем следующие строки, скорее всего они будут у Вас закомментированы 447 | 448 | ``` 449 | [Seat:*] 450 | #autologin-user= 451 | ``` 452 | 453 | Приводим строку к виду. У вас пользователь может быть другим. 454 | 455 | ``` 456 | autologin-user=root-home 457 | ``` 458 | 459 | Перезагружаемся и смотрим результат. У нас срабатывает автологон, автозапуск клиента AmneziaVPN и автоподключение к VPN. 460 | 461 | Но есть один момент. После автологона пользователя вы не сможете подключиться в ту же сессию RDP. Это особенность Linux. 462 | Повторное подключение может потребоваться, когда нужна перенастройка клиента AmneziaVPN. 463 | 464 | Для сброса сессии подключаемся через SSH (без прав root) под пользователем, запускающим клиент AmneziaVPN и выполняем logout в Xfce. В нашем случае это пользователь root-home. 465 | 466 | ``` 467 | xfce4-session-logout --logout 468 | ``` 469 | 470 | После можно спокойно подключаться через RDP. 471 | 472 | 473 | ### Настройка роутера 474 | 475 | Теперь нам остаётся завернуть нужный трафик на IP адрес Debian в локальной сети. 476 | 477 | Для MikroTik. В таблице маршрутизации "r_to_vpn" создадим маршрут по умолчанию ведущий на Debian и правило MASQUERADE для локальных сетей 478 | 479 | ``` 480 | /ip route 481 | add distance=1 dst-address=0.0.0.0/0 gateway= routing-table=r_to_vpn 482 | 483 | /ip firewall nat 484 | add action=masquerade chain=srcnat routing-mark=r_to_vpn 485 | ``` 486 | 487 | Теперь можно проверить трассировку до 8.8.4.4 Трафик должен уходить на Debian. 488 | IP адреса назначения, которые MikroTik завернёт в VPN, будут отправляться на Debian, а он в свою очередь завернёт трафик в туннель, который поднимет клиентское приложение AmneziaVPN. 489 | 490 | [Donate :sparkling_heart:](https://telegra.ph/Youre-making-the-world-a-better-place-01-14) 491 | 492 | 493 | --------------------------------------------------------------------------------