
В последнее время наблюдаются проблемы с подключением VPN с мобильного устройства, а приложения на телефоне то и дело отказываются работать из-за активного VPN соединения.
Я не популяризирую средства обхода блокировок, а рассказываю о техническом решении по настройки ОС в образовательных целях.
Эта статья — практическое руководство, основанное на реальном опыте настройки AmneziaWG на Debian 11. В итоге мы получим стабильный split‑tunneling, где:
Выбранный траффик идёт через awg0 (Сервер 2)
весь остальной трафик — через eth0 (через Сервер 1)
после перезагрузки всё запускается автоматически
1. Установка AmneziaWG на Debian
Официальный PPA AmneziaWG предназначен для Ubuntu, а не Debian (причем самая доступная мне в тот момент версия Debian, была 11). Если установить пакет amneziawg-dkms, он не соберётся, потому что:
ядро Debian не совпадает с Ubuntu
нет подходящих kernel headers
DKMS падает с ошибкой
Поэтому на Debian AmneziaWG работает в userspace‑режиме, и это нормально.
Устанавливаем только нужные пакеты:
sudo apt install -y software-properties-common python3-launchpadlib gnupg2 curl sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 57290828 echo “deb https://ppa.launchpadcontent.net/amnezia/ppa/ubuntu focal main” | sudo tee /etc/apt/sources.list.d/amneziawg.list echo “deb-src https://ppa.launchpadcontent.net/amnezia/ppa/ubuntu focal main” | sudo tee -a /etc/apt/sources.list.d/amneziawg.list sudo apt update && sudo apt install -y amneziawg
Но чтобы заработало не хватит одного пакета linux-headers-$(uname -r и для моей версии ОС этого пакета в стандартном репозитории не было.
echo “deb http://deb.debian.org/debian bullseye-backports main” | sudo tee /etc/apt/sources.list.d/backports.list sudo apt update sudo apt install -t bullseye-backports linux-image-5.15-amd64 linux-headers-5.15-amd64
Размещение конфигураци:
sudo mkdir -p /etc/amnezia/amneziawg sudo cp my.conf /etc/amnezia/amneziawg/awg0.conf sudo chmod 600 /etc/amnezia/amneziawg/awg0.conf
После этого интерфейс awg0 поднимается:
sudo awg-quick up awg0
Но этого лучше пока не делать - пропадет связь по SSH - можно будет подключится через AWG-сервер по внутреннему IP. Можно - а зачем? Поэтому просто пока так не делаем...
2. Проблема: AmneziaWG перехватывает весь трафик
После запуска:
awg-quick up awg0
AmneziaWG автоматически:
добавляет default route через awg0
перенаправляет весь трафик в туннель
И вот тут мы понимаем, что нам нужен выборочный Split‑Tunneling
Скрытый текст
UPD:
Спасибо за подсказку в комментариях, оказывается можно в конфиге добавить Table = off, чтобы весь траффик не заворачивался в тоннель
[Interface] PrivateKey = <твой приватный ключ> Address = 10.8.0.2/24 DNS = 1.1.1.1 Table = off [Peer] PublicKey = <публичный ключ сервера> Endpoint = IP:51820 AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 0
3. Отключаем systemd‑юниты AmneziaWG
Debian автоматически создаёт юниты:
awg0.service
awg-quick@awg0.service
Они добавляют fwmark и default route, даже если их нет в конфиге.
Отключаем:
sudo systemctl disable awg0.service sudo systemctl disable awg-quick@awg0.service sudo systemctl stop awg0.service sudo systemctl stop awg-quick@awg0.service
Теперь AWG больше не вмешивается в маршрутизацию.
4. Создаём правильный автозапуск AWG
Создаём systemd‑юнит, который:
поднимает awg0
удаляет default route awg0
удаляет fwmark
добавляет Telegram‑подсети
работает после перезагрузки
sudo nano /etc/systemd/system/awg-start.service
[Unit] Description=Start AmneziaWG (awg0) cleanly with split tunneling After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/awg-start.sh [Install] WantedBy=multi-user.target
5. Скрипт, который исправляет маршрутизацию
sudo nano /usr/local/bin/awg-start.sh
#!/bin/bash # Поднимаем AWG awg-quick up awg0 # Ждём появления интерфейса for i in {1..10}; do if ip link show awg0 >/dev/null 2>&1; then break fi sleep 1 done # Удаляем default route, который AmneziaWG добавляет автоматически ip route del default dev awg0 2>/dev/null # Удаляем fwmark-правило ip rule del fwmark 0xca6c table 51820 2>/dev/null # Добавляем Telegram-подсети nets=( 149.154.160.0/20 149.154.164.0/22 91.108.8.0/22 91.108.56.0/22 91.108.4.0/22 95.161.64.0/20 149.154.167.0/24 91.108.16.0/22 91.108.12.0/22 91.105.192.0/23 91.108.20.0/22 185.76.151.0/24 5.28.128.0/17 ) for net in "${nets[@]}"; do ip route add "$net" dev awg0 2>/dev/null done exit 0
Делаем исполняемым (не забываем ... а вдруг, а мало-ли ...):
sudo chmod +x /usr/local/bin/awg-start.sh
6. Включаем автозапуск
sudo systemctl daemon-reload sudo systemctl enable awg-start.service sudo systemctl start awg-start.service
7. Проверка
Обычный трафик:
curl https://ifconfig.me
→ через eth0
Через awg0:
curl --interface awg0 https://ifconfig.me
→ через awg0
Наш маршрут:
ping 149.154.167.51
→ через awg0
После перезагрузки всё работает автоматически.
Итог
Мы получили полностью рабочий split‑tunneling для AmneziaWG на Debian:
корректная установка DKMS
отключение проблемных systemd‑юнитов
автоматическое удаление default‑маршрута awg0
ручное добавление "нужных" подсетей
автозапуск AWG при старте системы
Теперь:
Нужный идёт через VPN (Сервер 2)
весь остальной трафик — напрямую (через Сервер 1)
после перезагрузки всё работает стабильно
