Установка AmneziaWG и других нужных утилит на VDS-сервере

Для начала необходимо узнать версию системы и ядра.

Для этого в консоли нужно ввести команду hostnamectl:

root@user:~# hostnamectl

Operating System: Ubuntu 22.04.4 LTS

          Kernel: Linux 5.15.0-118-generic

    Architecture: x86-64`

Если у вас устаревшее ядро (например 5.4), то настоятельно рекомендую обновить систему и ядро, т.к. на старом ядре драйвер AWG у меня в dmesg вываливал ошибки.

Далее все команды выполнятся от рута. Поэтому если вы не под рутом, то имеет смысл выполнить команду:

sudo su

cd ~

Подключаем к системе полный список всех доступных репозиторив с исходниками системы (Ubuntu/Debian).

Для этого в файл /etc/apt/sources.list разблокируем доп. репозитории с исходными кодами:

cp -f /etc/apt/sources.list /etc/apt/sources.list.backup

sed "s/# deb-src/deb-src/" /etc/apt/sources.list.backup > /etc/apt/sources.list

Обновляем систему:

apt update -y && apt upgrade -y

Заранее разрешаем маршрутизацию трафика для драйвера AWG:

echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/00-amnezia.conf

Перезагружаемся:

reboot

Перед установкой модулей AWG убедитесь, что на диске свободно как минимум 1,5GB пространства.

Для этого выполните команду: df -h

После перезагрузки не забываем войти под рутом (если ещё нет):

sudo su

После обновления системы можно приступать к установке модулей AmneziaWG.

Создаём новую директорию и переходим в неё:

mkdir -p ~/awg

cd ~/awg

Устанавливаем все пакеты AmneziaWG:

add-apt-repository -y ppa:amnezia/ppa

apt install -y amneziawg

Проверяем версию установленного пакета AWG:

root@user:~/awg# awg --version

wireguard-tools v1.0.20210914 - https://git.zx2c4.com/wireguard-tools/

(разрабы AWG забыли в исходниках свою версию проставить и названия изменить)

Проверяем наличие в системе всех необходимых драйверов:

root@user:~/awg# lsmod | grep amnezia

amneziawg              98304  0

curve25519_x86_64      36864  2 amneziawg,wireguard

libchacha20poly1305    16384  2 amneziawg,wireguard

libcurve25519_generic  49152  3 amneziawg,curve25519_x86_64,wireguard

ip6_udp_tunnel         16384  2 amneziawg,wireguard

udp_tunnel             20480  2 amneziawg,wireguard

Если у вас не "проглядывается" драйвер amneziawg, то попробуйте выполнить команду: modprobe amneziawg

Проверяем актуальность установленной версии драйвера AWG:

root@user:~/awg# modinfo amneziawg | grep ver

version:        1.0.0

srcversion:     5C0E002076C0223605D8472

vermagic:       5.15.0-118-generic SMP mod_unload modversions

Теперь приступим к установке доп. утилит.

Устанавливаем питон и т.п.:

apt install curl wget python3 python3-pip

Проверяем версию установленного питона:

root@user:~/awg# python3 --version

Python 3.10.12

Примечание: нужна версия питона не ниже 3.8

Устанавливаем доп. модули для питона:

pip3 install qrcode

Скачиваем спец. скрипт для работы с конфигами AWG:

mkdir -p ~/awg

cd ~/awg

wget -O awgcfg.py https://gist.githubusercontent.com/remittor/8c3d9ff293b2ba4b13c367cc1a69f9eb/raw/awgcfg.py

Примечание: исходники этой утилиты находятся тут: https://gist.github.com/remittor/8c3d9ff293b2ba4b13c367cc1a69f9eb

Заранее выбираем номер UDP-порта, который будет прослушивать AWG. Например: 49666

Так же выбираем подсеть. Например: 10.9.9.1/24

Генерируем основной конфиг AWG (значения ключей i и p поменяйте на свои):

root@user:~/awg# python3 awgcfg.py --make /etc/amnezia/amneziawg/awg0.conf -i 10.9.9.1/24 -p 49666

Make AWG server config: "/etc/amnezia/amneziawg/awg0.conf"...

Main network iface: "ens3"

Tunnel iface: "awg0"

AWG server config file "/etc/amnezia/amneziawg/awg0.conf" created!

Генерируем конфиг-шаблон, который будет использоваться для создания клиентских конфигов и QR-кодов:

root@user:~/awg# python3 awgcfg.py --create

Create template for client configs: "_defclient.config"...

External IP-Addr: "XXX.XXX.XXX.XXX"

Server IP-Addr: "XXX.XXX.XXX.XXX"

Template client config file "_defclient.config" created!

Примечание: за место XXX.XXX.XXX.XXX вы должны увидеть внешний IP-адрес вашего VDS-сервера.

Добавляем пару клиентов в основной конфиг AWG:

root@user:~/awg# python3 awgcfg.py -a "my_phone"

Add new client config "my_phone"...

New client "my_phone" added! IP-Addr: "10.9.9.2/32"

==== OK =====

root@user:~/awg# python3 awgcfg.py -a "my_router"

Add new client config "my_router"...

New client "my_router" added! IP-Addr: "10.9.9.3/32"

==== OK =====

Генерируем клиентские конфиги:

root@user:~/awg# python3 awgcfg.py -c -q

Generate client configs...

Generate QR codes...

==== OK =====

После этого в директории "~/awg" появятся клиентские конфиги и QR-коды:

root@user:~/awg# find . -name '*.conf'

./my_phone.conf

./my_router.conf

Поднимаем туннельный интерфейс AWG:

root@user:~/awg# awg-quick up awg0

[#] ip link add awg0 type amneziawg

[#] awg setconf awg0 /dev/fd/63

[#] ip -4 address add 10.9.9.1/24 dev awg0

[#] ip link set mtu 1420 up dev awg0

[#] iptables -A INPUT -p udp --dport 49666 -m conntrack --ctstate NEW -j ACCEPT --wait 10 --wait-interval 50; iptables -A FORWARD -i ens3 -o awg0 -j ACCEPT --wait 10 --wait-interval 50; iptables -A FORWARD -i awg0 -j ACCEPT --wait 10 --wait-interval 50; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE --wait 10 --wait-interval 50; ip6tables -A FORWARD -i awg0 -j ACCEPT --wait 10 --wait-interval 50; ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADE --wait 10 --wait-interval 50

Проверяем созданный основной AWG-конфиг:

awg showconf awg0

Примечание: команда должна выполнится без ошибок и показать отпарсенный AWG-конфиг.

Проверяем созданный AWG-интерфейс:

root@user:~/awg# awg show

interface: awg0

  public key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  private key: (hidden)

  listening port: 49666

  jc: XX

  jmin: XX

  jmax: XXX

  s1: XX

  s2: XXX

  h1: XXXXXXXXXX

  h2: XXXXXXXXXX

  h3: XXXXXXXXXX

  h4: XXXXXXXXXX

 

peer: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  allowed ips: 10.9.9.2/32

 

peer: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  allowed ips: 10.9.9.3/32

Выключаем туннельный интерфейс AWG:

awg-quick down awg0

Добавляем в автозагрузку поднятие AWG-интерфейса:

systemctl enable --now awg-quick@awg0

systemctl restart awg-quick@awg0.service

Проверяем статус созданного сервиса awg-quick@awg0.service:

root@user:~/awg# systemctl status awg-quick@awg0.service

● awg-quick@awg0.service - WireGuard via wg-quick(8) for awg0

     Loaded: loaded (/etc/systemd/system/awg-quick@.service; enabled; vendor preset: enabled)

     Active: active (exited) since Sun 2024-08-11 11:42:40 CEST; 41s ago

       Docs: man:awg-quick(8)

             man:awg(8)

    Process: 12734 ExecStart=/usr/bin/awg-quick up awg0 (code=exited, status=0/SUCCESS)

   Main PID: 12734 (code=exited, status=0/SUCCESS)

        CPU: 200ms

 

Aug 11 11:42:39 user systemd[1]: Starting WireGuard via wg-quick(8) for awg0...

Aug 11 11:42:39 user awg-quick[12734]: [#] ip link add awg0 type amneziawg

Aug 11 11:42:39 user awg-quick[12734]: [#] awg setconf awg0 /dev/fd/63

Aug 11 11:42:39 user awg-quick[12734]: [#] ip -4 address add 10.9.9.1/24 dev awg0

Aug 11 11:42:40 user awg-quick[12734]: [#] ip link set mtu 1420 up dev awg0

Aug 11 11:42:40 user awg-quick[12734]: [#] iptables -A INPUT -p udp --dport 49666 -m conntrack --ctstate NEW -j ACCEPT --wait 10 --wait-interval 50; iptabl>

Ещё раз проверяем статус AWG:

awg show

На этом настройка AWG на VDS-сервере завершена.

 

Установка AmneziaWG на Android-устройстве

Скачайте с сервера файл ~/awg/my_phone.conf и перешлите его на целевое Android-устройство.

Установите на Android-устройстве приложение AmneziaWG и добавьте новый интерфейс через импорт файла my_phone.conf

Примечание: за место файла my_phone.conf можно использовать файл my_phone.png (это QR-код).

Активируйте только что добавленный интерфейс и проверьте в браузере ваш внешний IP-адрес (сервис 2ip.ru).

 

Установка AmneziaWG на OpenWRT-устройстве

На VDS-сервере создайте новый конфиг под ваш OpenWRT-роутер (если ранее этого не сделали):

python3 awgcfg.py -a "my_router" -c -q

И перезапустите AWG на VDS-сервере (если создали новый клиентский конфиг):

systemctl restart awg-quick@awg0.service

Скопируйте файл ~/awg/my_router.conf куда-либо (этот файл содержит настройки для OpenWRT).

Если у вас на роутере установлена версия OpenWrt ниже чем 23.05, то следует обновиться!

Скачайте необходимые IPK-пакеты по любой из ссылок:

  1. 1.https://github.com/lolo6oT/awg-openwrt/releases  

  2. 2.https://github.com/Slava-Shchipunov/awg-openwrt/releases  

Нужно скачать 3 файла под вашу платформу (архитектура процессора, который установлен в роутере):

kmod-amneziawg.ipk

amneziawg-tools.ipk

luci-proto-amneziawg.ipk (либо luci-app-amneziawg.ipk)

Откройте в браузере панель управления вашим OpenWRT-роутером и залогиньтесь.

Перейдите на вкладку System/Software и нажмите на "Update lists...". Дождитесь обновления списка пакетов.

На той же вкладке System/Software нажмите на "Upload Package..." и последовательно установите все 3 ранее скаченные IPK-файла.

Перезагрузите роутер.

После входа в LuCI должен появится новый раздел Status/AmneziaWG (либо VPN/AmneziaWG).

Network/Interfaces

Переходим в раздел Network/Interfaces и нажимаем кнопку Add new interface...

В появившемся окне указываем название AWG и тип AmneziaWG VPN. После нажатия кнопки Create Interface появится окно Interfaces/AWG.

Interfaces/AWG/General Settings

В окне Interfaces/AWG перейдите на закладку General Settings.

Примечание: Если вы планируете использовать частичное перенаправление трафика (например при помощи RuAntiBlock, либо podkop), то значение параметра No Host Routes должно быть enabled (это заставит AWG не создавать маршруты для перенаправления трафика).

Interfaces/AWG/Advanced Settings

Переходим на вкладку Advanced Settings.

Interfaces/AWG/AmneziaWG Settings

Переходим на вкладку AmneziaWG Settings.

Interfaces/AWG/Peers

Переходим на вкладку Peer и нажимаем кнопку Add Peer, что бы появилось окно Interfaces/AWG/Peers.

В появившемся окне Interfaces/AWG/Peers указываем:

После нажатия кнопки "Save" в списке Peers появится новая строка с именем, которое было указано в поле "Description".

Далее снова нажимайте "Save", что бы интерфейс AWG создался.

В текущем окне Network/Interfaces нажмите кнопку Save & Apply, что бы ваши настройки сохранились и применились.

imageimage

После добавления нового интерфейса AWG на страничке Status/AmneziaWG (либо на VPN/AmneziaWG) появится новое соединение с именем "my_router".

При правильной настройке и работающем VDS-сервере сражу же должны появиться удачные рукопожатия (Latest handshake).

imageimage

Для проверки работоспособности можно в терминале ввести команду ping -I AWG facebook.com

imageimage

Network/Firewall/General Settings

Теперь нужно перейти на вкладку Network/Firewall/General Settings и нажать кнопку "Add" (в разделе Zones).

Firewall - Zone settings

В появившемся окне Firewall - Zone settings нужно заполнить поля на вкладке General Settings:

Нажимаем кнопку "Save".

В окне "Network/Firewall" нажимаем кнопку "Save & Apply", что бы ваши настройки сохранились и применились.

Теперь в разделе Zones можно наблюдать новые правила для трафика.

imageimage

После этого можно приступать к настройке RuAntiBlock, либо к настройке podkop'а.