Допустим, что у вас есть роутер, который не поддерживает Amnezia протокол, а вам необходимо пустить часть домашнего трафика через VPN соединение. Эту задачу можно решить, подняв в вашей сети хост с Amnezia клиентом и передавая трафик через него.

Итак дано:

  • роутер Mikrotik со стоковой прошивкой
  • виртуальная машина с ОС Debian, поднятая в локальной сети

Настройка Debian 13 хоста с Amnezia

Почему мы выбираем Debian? Он стабилен, быстр и потребляет мало ресурсов. Нам хватит хоста с 1 vCPU и 738 МБ RAM (можно даже с 512, но это будет в притык). В примере ниже будет использоваться Debian 13, т.к. это последняя поддерживаемая на данный момент версия ОС. Скачать ISO образ можно с официального сайта.

План сетапа таков:

  1. добавить нужные репозитории для пакетов амнезии
  2. поставить необходимые пакеты
  3. настроить клиента awg

Для начала установим зависимости:

apt update
apt install libxcb-cursor0 libxcb-xinerama0 libxcb-icccm4 libxcb-keysyms1 libopengl0
apt install -y python3-launchpadlib gnupg2 linux-headers-$(uname -r)

Затем, добавим ключ keyserver.ubuntu.com и репозиторий ppa, т.к. родных пакетов для Debian нет.

TMP_DIR=$(mktemp -d)
gpg --homedir "$TMP_DIR" --keyserver hkps://keyserver.ubuntu.com --recv-keys 57290828
gpg --homedir "$TMP_DIR" --export --export-options export-minimal 57290828 | tee /etc/apt/keyrings/amnezia.gpg > /dev/null
rm -rf "$TMP_DIR"
chmod 644 /etc/apt/keyrings/amnezia.gpg
echo "deb [signed-by=/etc/apt/keyrings/amnezia.gpg] https://ppa.launchpadcontent.net/amnezia/ppa/ubuntu noble main" | tee -a /etc/apt/sources.list.d/amnezia.list
Примечание: для установки на Debian 12 потребуется подключить другой репозиторий:
echo "deb [signed-by=/etc/apt/keyrings/amnezia.gpg] https://ppa.launchpadcontent.net/amnezia/ppa/ubuntu jammy main" | tee /etc/apt/sources.list.d/amnezia.list

Установим пакеты awg и зависимости:

apt update
apt search amnezia
apt-get install -y amneziawg amneziawg-tools resolvconf iptables curl

Включим маршрутизацию на уровне ядра и создадим клиента:

sysctl -w net.ipv4.ip_forward=1
mkdir -p /etc/amnezia/amneziawg
nano /etc/amnezia/amneziawg/awg0.conf
awg-quick up awg0

В файл etc/amnezia/amneziawg/awg0.conf необходимо положить конфигурацию awg клиента, которую вы получили с сервера awg.

Если вы не хотите пускать весь трафик через awg на данном хосте, то в awg0.conf в поле AllowedIPs необходимо указать список хостов и сетей, которые будут маршрутизироваться через сетевой адаптер awg0.

В общем случае ваш файл должен иметь такую структуру (все поля необходимо заполнить значениями):

[Interface]
PrivateKey = 
Address = 
DNS = 
MTU = 
Jc = 
Jmin = 
Jmax = 
S1 = 
S2 = 
S3 = 
S4 = 
H1 = 
H2 = 
H3 = 
H4 = 

[Peer]
PublicKey = 
PresharedKey = 
Endpoint = 
AllowedIPs = 5.28.192.0/21, 91.105.192.0/23, 91.108.4.0/16, 149.154.160.0/20, 149.154.164.0/22, 34.160.111.145/32, ::/0
PersistentKeepalive = 

Приведен пример с маршрутизацией только telegram серверов.

Когда мы выполняем команду awg-quick up, то запускает скрипт, который создает сетевой адаптер awg0 и добавляет маршруты в таблицу маршрутизации. Вручную это делать не требуется. Ниже пример успешного запуска скрипта:

Проверить состояние адаптера можно командой: ifconfig awg0, а таблицу маршрутов командой ip route.

Обратите внимание, что в случае перезагрузки хоста, адаптер не поднимется автоматически. Для включения этой возможности, необходимо настроить службу systemd (в имени службы после @ указывается актуальное имя сетевого адаптера):

systemctl enable awg-quick@awg0

Второй момент, который надо учесть — если вы оставите конфигурацию AllowedIPs клиента по-умолчанию, то после подключения, вы потеряете доступ к хосту по ssh. Надо исключать подсети, с которых вы будете подключаться к хосту для его администрирования.

Настройка маршрутизации Mikrotik по спискам

Теперь у нас есть хост с поднятым amneziawg клиентом. Необходимо роутить на него только избранный трафик. Для этого в Mikrotik делаем L7 маршрутизацию по спискам.

  1. Создаем адресный лист и добавляем в него целевые хосты
  2. Создаем правило в iptables таблице nat цепочке prerouting для маркировки трафика

    chain = prerouting
    dst. address list = VPN-AWG-DE (тот, что создали в п.1)
    in interface = bridge
    action = mark routing
    new routing mark = to-awg  (тот, что создали в п.2)
  3. В разделе Routing -> Tables создаем новую таблицу маршрутизации и указываем ту метку, что создали в пункте 2. У меня это to-awg.
  4. В разделе IP -> Routes создаем статическую запись для той таблицы, которую. мы только что сделали (в моем случае to-awg) и указываем статический IP хоста Debian (192.168.88.45 в моем примере).
    DST address может быть как 0.0.0.0 (и тогда мы руководствуемся адресными списками выше, ^1031 указывает на номер такого списка, у меня их несколько; между собой списки для 0.0.0.0 ранжируются по полю Distance 1 = высший приоритет) так и просто статическим адресом назначения (то, что идет через список main):

В примере выше через таблицу to-awg на debian пойдут хосты, которые указаны в списке VPN-AWG-DEи также статически прописаны в таблице маршрутов (8.6.112.0/24).

[Посещений: 1, из них сегодня: 1]

Добавить комментарий