├── 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 | 
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 | 
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 | 
221 |
222 | 10) Запускаем контейнер через WinBox в разделе меню "container" и проверяем что туннель у нас поднялся. В логах MikroTik вы увидите характерные сообщения о запуске контейнера.
223 | В окне терминала подключаемся к консоли самого контейнера
224 | ```
225 | /container shell 0
226 | ```
227 | 11) **Проверка! Убедитесь что у вас появился поднятый интерфейс awg0 выполнив в контейнере**
228 | ```
229 | ip a
230 | ```
231 | 
232 |
233 | Если интерфейс появился, можно сделать трассировку и убедиться, что сетевой пакет ушёл в туннель AWG. Если на первом хопе вы увидели адрес 172.18.20.1 значит настройка файла конфигурации клиента с [WireGuard калькулятором ](https://www.procustodibus.com/blog/2021/03/wireguard-allowedips-calculator/)произведена неверно.
234 |
235 | 
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 | 
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 | 
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 | 
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 | 
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 | 
329 |
330 | На этапе выбора программного обеспечения устанавливаем Xfce (более стабилен при подключении через RDP), SSH сервер и стандартные системные утилиты.
331 |
332 | 
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 | 
396 |
397 | Вставляем сформированный конфиг AmneziaWireGuard или OpenVPN в приложение. Включаем автозапуск при входе пользователя и автоподключение.
398 |
399 | 
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 | 
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 | 
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 |
--------------------------------------------------------------------------------