В последнее время наблюдаются проблемы с подключением 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)

  • после перезагрузки всё работает стабильно