Skip to content

AmneziaWG installing

Oleg S. edited this page Nov 13, 2024 · 19 revisions

Установка 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. https://github.com/lolo6oT/awg-openwrt/releases
  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.

  • Значение "Protocol" = "AmneziaWG VPN"
  • Значение "Bring up on boot" = enabled
  • Значение "Private Key" возьмите из файла my_router.conf (параметр "Interfaces/PrivateKey").
  • Значение "Public Key" возьмите из файла my_router.conf (параметр "Interfaces/_PublicKey").
  • Значение "Listen Port" не указывайте (пусть порт на клиенте будет случайным).
  • Значение "IP-Addresses" возьмите из файла my_router.conf (параметр "Interfaces/Address") вместе с маской.
  • Значение "No Host Routes" = not active (это заставит абсолютно весь трафик идти через туннель AWG)

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

Interfaces/AWG/Advanced Settings

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

  • Значение "MTU" = 1420
  • Значение "Use default gateway" = enabled
  • Значение "Use custom DNS servers" = "8.8.8.8" (будем работать в обход провайдерского DNS).

Interfaces/AWG/AmneziaWG Settings

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

  • Значение "Jc" возьмите из файла my_router.conf (параметр "Interfaces/Jc").
  • Значение "Jmin" возьмите из файла my_router.conf (параметр "Interfaces/Jmin").
  • Значение "Jmax" возьмите из файла my_router.conf (параметр "Interfaces/Jmax").
  • Значение "S1" возьмите из файла my_router.conf (параметр "Interfaces/S1").
  • Значение "S2" возьмите из файла my_router.conf (параметр "Interfaces/S2").
  • Значение "H1" возьмите из файла my_router.conf (параметр "Interfaces/H1").
  • Значение "H2" возьмите из файла my_router.conf (параметр "Interfaces/H2").
  • Значение "H3" возьмите из файла my_router.conf (параметр "Interfaces/H3").
  • Значение "H4" возьмите из файла my_router.conf (параметр "Interfaces/H4").

Interfaces/AWG/Peers

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

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

  • Значение "Peer disabled" = not active
  • Значение "Description" = "my_router" (можете любое название указать).
  • Значение "Peer disabled" = not active
  • Значение "Public Key" возьмите из файла my_router.conf (параметр "Peer/PublicKey").
  • Значение "Private Key" не указывайте ничего.
  • Значение "Preshared Key" не указывайте ничего.
  • Значение "Allowed IPs" = "0.0.0.0/0"
  • Значение "Route Allowed IPs" = not active
  • Значение "Endpoint Host" возьмите из файла my_router.conf (параметр "Peer/Endpoint") только IP-адрес.
  • Значение "Endpoint Port" возьмите из файла my_router.conf (параметр "Peer/Endpoint") только номер порта.
  • Значение "Persistent Keep Alive" = 60 (можете указать иное значение).

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

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

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

image

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

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

image

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

image

Network/Firewall/General Settings

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

Firewall - Zone settings

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

  • Значение "Name" = "awg"
  • Значение "Input" = "reject"
  • Значение "Output" = "accept"
  • Значение "Forward" = "reject"
  • Значение "Masquerading" = enabled
  • Значение "MSS clamping" = enabled
  • Значение "Covered networks" = "AWG"
  • Значение "Allow forward to destination zones" = пусто
  • Значение "Allow forward from source zones" = "lan"

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

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

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

image

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