Требования:
Установка пакетов:
В терминале выполните команду:
opkg install adguardhome-go ipset iptables ip-full curl jq
В CLI роутера выполните команды:
opkg dns-override
system configuration save
После этого перезагружаем роутер.
(далее все команды должны будут выполняться в теримнале)
Интерфейс для первоначальной настройки AGH будет доступен по адресу:
http://ваш-ip-роутера:3000
По этому адресу надо перейти в настройки AGH и выполнить первоначальные настройки с помощью маcтера настроек AGH. В первом окне настроек, смените 80й порт на 3000 и жмите далее. Все остальные настройки используемые по умолчанию подойдут для большинства случаев.
Скрипты:
Создайте файл /opt/etc/init.d/S52ipset со следующим содержимым:
#!/bin/sh
PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
if [ "$1" = "start" ]; then
ipset create bypass hash:ip
ipset create bypass6 hash:ip family inet6
fi
Создайте файл /opt/etc/ndm/netfilter.d/010-bypass.sh для ipv4 со следующим содержимым:
#!/bin/sh
[ "$type" == "ip6tables" ] && exit
[ "$table" != "mangle" ] && exit
[ -z "$(ipset --quiet list bypass)" ] && exit
if [ -z "$(iptables-save | grep bypass)" ]; then
mark_id=`curl -kfsS http://localhost:79/rci/show/ip/policy 2>/dev/null | jq -r '.[] | select(.description == "policy_vpn") | .mark'`
iptables -w -t mangle -A PREROUTING ! -i nwg0 -m conntrack --ctstate NEW -m set --match-set bypass dst -j CONNMARK --set-mark 0x$mark_id
iptables -w -t mangle -A PREROUTING ! -i nwg0 -m set --match-set bypass dst -j CONNMARK --restore-mark
fi
Где:
nwg0 - это сетевой интерфейс VPN-соединения для выборочного обхода блокировок.
policy_vpn - это созданная политика в которой был включено VPN-соединение
Создайте файл /opt/etc/ndm/netfilter.d/011-bypass6.sh для ipv6 со следующим содержимым:
#!/bin/sh
[ "$type" != "ip6tables" ] && exit
[ "$table" != "mangle" ] && exit
[ -z "$(ipset --quiet list bypass6)" ] && exit
if [ -z "$(ip6tables-save | grep bypass6)" ]; then
mark_id=`curl -kfsS http://localhost:79/rci/show/ip/policy 2>/dev/null | jq -r '.[] | select(.description == "policy_vpn") | .mark'`
ip6tables -w -t mangle -A PREROUTING ! -i nwg0 -m conntrack --ctstate NEW -m set --match-set bypass6 dst -j CONNMARK --set-mark 0x$mark_id
ip6tables -w -t mangle -A PREROUTING ! -i nwg0 -m set --match-set bypass6 dst -j CONNMARK --restore-mark
fi
Где:
nwg0 - это сетевой интерфейс VPN-соединения для выборочного обхода блокировок.
policy_vpn - это созданная политика в которой был включено VPN-соединение
Что бы узнать название своего интерфейса, используйте команду:
ip addr
Сделайте скрипты исполняемыми:
chmod +x /opt/etc/init.d/S52ipset
chmod +x /opt/etc/ndm/netfilter.d/010-bypass.sh
chmod +x /opt/etc/ndm/netfilter.d/011-bypass6.sh
Список доменов для обхода блокировок:
Найдите в конфигурационном файле AGH /opt/etc/AdGuardHome/AdGuardHome.yaml строчку
ipset_file: ""
и замените на
ipset_file: /opt/etc/AdGuardHome/ipset.conf
Создайте файл /opt/etc/AdGuardHome/ipset.conf Он будет единственным, требующим редактирования время от времени, в зависимости от изменения вашего персонального списка доменов для разблокировки. Он имеет следующий синтаксис:
intel.com,ipinfo.io/bypass,bypass6
instagram.com,cdninstagram.com/bypass,bypass6
epicgames.com,gog.com/bypass,bypass6
Если не будет использоваться ipv6, то:
intel.com,ipinfo.io/bypass
instagram.com,cdninstagram.com/bypass
epicgames.com,gog.com/bypass
Т.е. в левой части через запятую указаны домены, требующие обхода блокировок, справа после слэша — название ipset, в который AGH складывает результаты разрешения DNS-имён. Можно указать всё в одну строчку, можно разделить логически на несколько строк как в примере. Домены третьего уровня и выше также включаются в обход блокировок, т.е. указание intel.com включает www.intel.com, download.intel.com и пр. Рекомендую добавить какой-нибудь «сигнальный» сервис, показывающий ваш текущий IP-адрес (ipinfo.io в примере). Так вы сможете проверить работоспособность настроенного решения. Учтите, что AGH не перечитывает изменённый файл, поэтому после правки требуется перезапускать его с помощью команды:
/opt/etc/init.d/S99adguardhome restart
По завершению всех настроек, требуется перезагрузить роутер. После перезагрузки роутера проверьте в веб-интерфейсе Системный журнал, в нём не должно быть красных строк, связанных с настроенными скриптами.
Диагностика проблем:
Убедитесь в том, что набор ipset создан и наполняется в процессе работы:
# Проверка ipv4
ipset --list bypass
# Проверка ipv6
ipset --list bypass6
Вывод должен быть не пустой.
Посмотрите, существуют ли правила netfilter для пометки пакетов:
# Проверка ipv4
iptables-save | grep bypass
# Проверка ipv6
ip6tables-save | grep bypass6