Для начала необходимо узнать версию системы и ядра.
Для этого в консоли нужно ввести команду 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-сервере завершена.
Скачайте с сервера файл ~/awg/my_phone.conf и перешлите его на целевое Android-устройство.
Установите на Android-устройстве приложение AmneziaWG и добавьте новый интерфейс через импорт файла my_phone.conf
Примечание: за место файла my_phone.conf можно использовать файл my_phone.png (это QR-код).
Активируйте только что добавленный интерфейс и проверьте в браузере ваш внешний IP-адрес (сервис 2ip.ru).
На 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-пакеты по любой из ссылок:
Нужно скачать 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 и нажимаем кнопку Add new interface...
В появившемся окне указываем название AWG и тип AmneziaWG VPN. После нажатия кнопки Create Interface появится окно Interfaces/AWG.
В окне 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 не создавать маршруты для перенаправления трафика).
Переходим на вкладку Advanced Settings.
•Значение "MTU" = 1420
•Значение "Use default gateway" = enabled
•Значение "Use custom DNS servers" = "8.8.8.8" (будем работать в обход провайдерского DNS).
Переходим на вкладку 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").
Переходим на вкладку 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, что бы ваши настройки сохранились и применились.
После добавления нового интерфейса AWG на страничке Status/AmneziaWG (либо на VPN/AmneziaWG) появится новое соединение с именем "my_router".
При правильной настройке и работающем VDS-сервере сражу же должны появиться удачные рукопожатия (Latest handshake).
Для проверки работоспособности можно в терминале ввести команду ping -I AWG facebook.com
Теперь нужно перейти на вкладку Network/Firewall/General Settings и нажать кнопку "Add" (в разделе Zones).
В появившемся окне 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 можно наблюдать новые правила для трафика.
После этого можно приступать к настройке RuAntiBlock, либо к настройке podkop'а.