Jump to content

AdGuard Home для селективной маршрутизации доменов


Recommended Posts

Подскажите, а есть возможность все это сделать не через VPN а через Tor?

То есть так же, чтобы через Тор шли только выбранные сайты?

Да поймут меня владельцы Playstation - единственный рабочий сейчас способ покупки игр через турецкий аккаунт требует создания учетной записи на необходимом сайте именно из сети тор (при заходе через VPN - сайт жалуется, что ты пользуешься впн и не дает создать учетку).

И я думаю такой сайт не единственный. А тор как альтернативное решение думаю хорошо бы подошел в этом случае...

Link to comment
Share on other sites

  • 4 weeks later...

В 4.1 идентификаторы таблиц маршрутизации стали динамически меняться.

Так что инструкция отсюда

доработана, требуется доустановить пакеты curl и jq. Добавлено динамическое чтение идентификатора маркировки в скриптах

/opt/etc/ndm/netfilter.d/010-bypass.sh

 

/opt/etc/ndm/netfilter.d/011-bypass6.sh

По примеру предоставленному @avn:

В 08.08.2023 в 23:29, avn сказал:

Можно mark так найти

curl -kfsS http://localhost:79/rci/show/ip/policy 2>/dev/null | jq -r '.[] | select(.description == "Unblock-VPN") | .mark'

 

 

Edited by r13
  • Thanks 1
  • Upvote 3
Link to comment
Share on other sites

В 01.09.2023 в 15:32, Mapuk37 сказал:

Подскажите, а есть возможность все это сделать не через VPN а через Tor?

Здравствуйте скажите на какой порт у вас настроен tor? 

Link to comment
Share on other sites

17 минут назад, Denis P сказал:

Прошу тем, кому актуально, поддержать вот эту идею
https://github.com/AdguardTeam/AdGuardHome/issues/6233
Это позволит полноценно использовать ipset create timeout, что в свою очередь даст возможность для поддержания списков ipset и маршрутов в актуальном состоянии, т.е если домен резолвится в тот же адрес - счетчик timeout будет просто обновлен, если в другой - по истечении timeout он автоматически будет удален из ipset. В данный момент это тоже возможно, но если адрес уже содержится в кэше agh, он не добавляется в ipset, что слегка ломает всю логику и счетчик timeout не обновляется.

Нафиг не нужно. Timeout для ipset и такой же в agh. А каждый раз дергать ipset для обновления ( удаления и добавления)  для того, что бы обновить время timeout так себе идея.

Edited by avn
  • Thanks 1
Link to comment
Share on other sites

  • 4 months later...
В 07.08.2023 в 09:39, r13 сказал:

бонусом будет резервирование/агрегация каналов предоставляемая политиками

Не могу понять, почему это работает, если в /opt/etc/ndm/netfilter.d/010-bypass.sh мы вручную указываем nwg0?

Link to comment
Share on other sites

1 час назад, Freedom сказал:

Не могу понять, почему это работает, если в /opt/etc/ndm/netfilter.d/010-bypass.sh мы вручную указываем nwg0?

Там отрицание, не nwg0

Link to comment
Share on other sites

1 час назад, r13 сказал:

Там отрицание, не nwg0

Точно, но это не меняет сути. Тут явно указывается на конкретное VPN-соединение. Получается нельзя использовать другие соединения в указанной политике, иначе трафик будет маркироваться неправильно, на сколько я понимаю, хотя у меня все работало, даже когда поставил в политике на 1-е место другое VPN-соединение, но все-равно, предполагаю лучше так не делать

Edited by Freedom
Link to comment
Share on other sites

Уф, наконец поборол проблему (переход с 398 на 4Х), проблема как всегда в прокладке между монитором и стулом

В гайде тут:

Забыто упомянуто (точнее ранее это проскальзовало в скринах, но в итоге пропало) как сделать корректно сделать политики :)

1) в впн соединениях указываем  (ранее в 3.9.8 это не требовалось)

image.png.9ed271b4022729ff5f74948e2e563f26.png

2) В политиках создаем новую политику доступа  и называем ее также как в скриптах (у меня main)

В подключениях политики указываем (только) 1 или несколько VPN соединений через которые будут идти маршрутизированные данные (я тут добавлял и впн и основной и ЭТО И БЫЛА ОШИБКА)

image.png.829e53b42be3eb7e8a5486c61410338c.png

Большое спасибо @r13

 

  • Upvote 2
Link to comment
Share on other sites

@r13 @avn - господа! А как быть, если "резервное" подключение создается средствами Entware. Например sing-box. Как найти mark?

PS Создал политику по имени скрипта запуска S99sing-box. `show ip polycy` всегда выдает

{
    "policy": {
        "Policy1": {
            "description": " S99sing-box",
            "mark": "ffffaac",
            "table4": 12,
            "route4": {
                "route": [
                    {
                        "destination": "10.0.0.0/24",
                        "gateway": "0.0.0.0",
                        "interface": "GigabitEthernet1",
                        "metric": 0,
                        "flags": "U",
                        "rejecting": false,
                        "proto": "boot",
                        "floating": false,
                        "static": false
                    },
                    {
                        "destination": "172.16.250.0/30",
                        "gateway": "0.0.0.0",
                        "interface": "",
                        "metric": 0,
                        "flags": "U",
                        "rejecting": false,
                        "proto": "boot",
                        "floating": false,
                        "static": false
                    },
                    {
                        "destination": "192.168.1.0/24",
                        "gateway": "0.0.0.0",
                        "interface": "Bridge0",
                        "metric": 0,
                        "flags": "U",
                        "rejecting": false,
                        "proto": "boot",
                        "floating": false,
                        "static": false
                    }
                ]
            },
            "table6": 11,
            "route6": {}
        }
    },
    "prompt": "(config)"
}

Первый маршрут всегда wan (10.0.0.0), второй tun0 (sing-box), третий lan (bridge). Или так и должно быть?

PS Это стенд с 1811 на прошивке 4.1

Link to comment
Share on other sites

1 час назад, zyxmon сказал:

@r13 @avn - господа! А как быть, если "резервное" подключение создается средствами Entware. Например sing-box. Как найти mark?

PS Создал политику по имени скрипта запуска S99sing-box. `show ip polycy` всегда выдает

{
    "policy": {
        "Policy1": {
            "description": " S99sing-box",
            "mark": "ffffaac",
            "table4": 12,
            "route4": {
                "route": [
                    {
                        "destination": "10.0.0.0/24",
                        "gateway": "0.0.0.0",
                        "interface": "GigabitEthernet1",
                        "metric": 0,
                        "flags": "U",
                        "rejecting": false,
                        "proto": "boot",
                        "floating": false,
                        "static": false
                    },
                    {
                        "destination": "172.16.250.0/30",
                        "gateway": "0.0.0.0",
                        "interface": "",
                        "metric": 0,
                        "flags": "U",
                        "rejecting": false,
                        "proto": "boot",
                        "floating": false,
                        "static": false
                    },
                    {
                        "destination": "192.168.1.0/24",
                        "gateway": "0.0.0.0",
                        "interface": "Bridge0",
                        "metric": 0,
                        "flags": "U",
                        "rejecting": false,
                        "proto": "boot",
                        "floating": false,
                        "static": false
                    }
                ]
            },
            "table6": 11,
            "route6": {}
        }
    },
    "prompt": "(config)"
}

Первый маршрут всегда wan (10.0.0.0), второй tun0 (sing-box), третий lan (bridge). Или так и должно быть?

PS Это стенд с 1811 на прошивке 4.1

Может я вопроса не понял?

json=`curl -kfsS http://localhost:79/rci/show/ip/policy 2>/dev/null | jq -r '.[] | select(.description == " S99sing-box")'`
xt_mark=`echo $json | jq -r '.mark'`
xt_table=`echo $json | jq -r '.table4'`
xt_iface=`ip -4 route show table ${xt_table} | awk '/default/ { print $3 }'`

 

Link to comment
Share on other sites

@zyxmon в случае использования интерфейса созданного в entware непонятно в чем будет профит от использования политики, так как переключать default route для такого интерфейса все равно придется так же через скрипты. Возможно в данном случае инструкция из первого поста темы более релевантна.

  • Upvote 1
Link to comment
Share on other sites

10 часов назад, zyxmon сказал:

PS Создал политику по имени скрипта запуска S99sing-box. `show ip polycy` всегда выдает

                "route": [
                    {
                        "destination": "10.0.0.0/24",
                      ...
                    },
                    {
                        "destination": "172.16.250.0/30",
                        ...
                    },
                    {
                        "destination": "192.168.1.0/24",
                        ...
                    }
                

Первый маршрут всегда wan (10.0.0.0), второй tun0 (sing-box), третий lan (bridge). Или так и должно быть?

Все просто не имеет значения WAN или TUN или PPP, а имеет значение

default dev ppp0  scope link 
10.10.xxх.0/24 dev eth2.9 ...
10.147.ххх.0/24 dev zt_br0 ...
104.21.ххх.ххх dev nwg4 ...
109.126.ххх.ххх dev ppp0 ...
185.107.ххх.ххх dev ppp0 ...
188.114.ххх.ххх dev ppp0 ...
192.168.100.0/24 via 10.147.ххх.ххх dev zt_br0 ....
192.168.130.0/24 dev br0 ...
192.168.150.0/24 dev br1 ...
...

 

Link to comment
Share on other sites

1 час назад, vasek00 сказал:

Все просто не имеет значения WAN или TUN или PPP, а имеет значение

default dev ppp0  scope link 
10.10.xxх.0/24 dev eth2.9 ...
10.147.ххх.0/24 dev zt_br0 ...
104.21.ххх.ххх dev nwg4 ...
109.126.ххх.ххх dev ppp0 ...
185.107.ххх.ххх dev ppp0 ...
188.114.ххх.ххх dev ppp0 ...
192.168.100.0/24 via 10.147.ххх.ххх dev zt_br0 ....
192.168.130.0/24 dev br0 ...
192.168.150.0/24 dev br1 ...
...

 

В таблице имеет значение только это, остальное косвенное

default dev ppp0  scope link 
Link to comment
Share on other sites

1 час назад, avn сказал:

В таблице имеет значение только это, остальное косвенное

default dev ppp0  scope link 

Речь выше шла про то и не про какой он в списке интерфейс, первый WAN или не первый, или br0 второй или он последний - просто пример их расположение от IP.

Edited by vasek00
Link to comment
Share on other sites

Я совсем "не копенгаген" в tc (traffic control). С политиками не вышло, подозреваю, что все таки неправильно поменял роутинг. Надеюсь следующие юзеры лучше меня разбираются (или я где опечатался).

Сделал все по первому посту - и заработало! Однако такая неожиданность - хуки ifcreated или ifstatechanged не работают с сетевыми интерфейсами, созданными Entware. Но с этим то просто..... 

  • Upvote 1
Link to comment
Share on other sites

19 часов назад, zyxmon сказал:

Я совсем "не копенгаген" в tc (traffic control). С политиками не вышло, подозреваю, что все таки неправильно поменял роутинг. Надеюсь следующие юзеры лучше меня разбираются (или я где опечатался).

Сделал все по первому посту - и заработало! Однако такая неожиданность - хуки ifcreated или ifstatechanged не работают с сетевыми интерфейсами, созданными Entware. Но с этим то просто..... 

Подскажите в итоге, всё заработало? Sing-box с XTLS-Reality в режиме tun, а AGH просто как и раньше указывать интерфейс, через который он будет отправлять указанные ресурсы?

Link to comment
Share on other sites

1 час назад, dogoma сказал:

Подскажите в итоге, всё заработало? Sing-box с XTLS-Reality в режиме tun, а AGH просто как и раньше указывать интерфейс, через который он будет отправлять указанные ресурсы?

Заработало. Есть проблема с созданием маршрута - т.к. singbox создает tun0 до окончания сетевой инициализации роутера. Пока поставил паузу в 15 секунд до выполнения `ip route add ....`

 

  • Upvote 1
Link to comment
Share on other sites

6 часов назад, zyxmon сказал:

Заработало. Есть проблема с созданием маршрута - т.к. singbox создает tun0 до окончания сетевой инициализации роутера. Пока поставил паузу в 15 секунд до выполнения `ip route add ....`

 

Опишите пожалуйста как это сделать.

Настроил sing-box, выхлоп с команды "curl --interface tun0 http://myip.wtf/json" получил, adguardhome ранее уже настраивал, перенастроил на tun0 новиспечённый, для теста в байпас вписал ipinfo.io, но сайт не открывается.

Link to comment
Share on other sites

6 часов назад, dogoma сказал:

Опишите пожалуйста как это сделать.

Сначала нужно в скриптовой обвязке заменить nwg0 на tun0. Затем задайте маршрутизацию руками

ip route add default dev tun0 table 1001 

Если теперь все работает, то можно (правда очень криво-костыльно) скриптом S99zsing-box (алфавитно должен после S99sing-box выполняться.

S99zsing-box

  • Upvote 1
Link to comment
Share on other sites

@zyxmon спасибо!

Как-то странно работает. С клиентов wi-fi сети не открываются сайты прописанные в bypass, но клиенты WG (на роутере сервер, к нему подключаются клиенты извне) отлично ходят на эти сайты, ipinfo.io (прописанный в bypass) показывает что нужно.

 

ip addr показывает: image.thumb.png.4111cb2e03bd60f259e02bbfffd5c85b.png

 

в этом случает /opt/etc/ndm/netfilter.d/010-bypass.sh будет с такой подсетью? 172.16.250.0/30

Скрытый текст
#!/bin/sh
 
[ "$type" == "ip6tables" ] && exit
[ "$table" != "mangle" ] && exit
[ -z "$(ip link list | grep tun0)" ] && exit
[ -z "$(ipset --quiet list bypass)" ] && exit
 
if [ -z "$(iptables-save | grep bypass)" ]; then
iptables -w -t mangle -A PREROUTING ! -s 172.16.250.0/30 -m conntrack --ctstate NEW -m set --match-set bypass dst -j CONNMARK --set-mark 1001
iptables -w -t mangle -A PREROUTING ! -s 172.16.250.0/30 -m set --match-set bypass dst -j CONNMARK --restore-mark
fi

 

Edited by dogoma
Link to comment
Share on other sites

2 часа назад, dogoma сказал:

в этом случает /opt/etc/ndm/netfilter.d/010-bypass.sh будет с такой подсетью? 172.16.250.0/30

Да. похоже так. По wi-fi я не проверял.

Link to comment
Share on other sites

1 час назад, zyxmon сказал:

Да. похоже так. По wi-fi я не проверял.

Проверил по проводу, ситуация такая же.

Подскажите, может кто знает как продиагностировать проблему?

На всякий случай выводы команд из шапки:

Скрытый текст

ipset --list bypass не пустой

Name: bypass

Type: hash:ip

Revision: 4

Header: family inet hashsize 1024 maxelem 65536

Size in memory: 3264

References: 2

Members:
... (дальше IP-шники)

 

ip rule list | grep 1001 не пустой

399: from all fwmark 0x3e9 lookup 1001

 

ip route list table 1001 не пустой

default dev tun0 scope link

 

iptables-save | grep bypass не пустой

-A PREROUTING ! -s 172.16.250.0/30 -m conntrack --ctstate NEW -m set --match-set bypass dst -j CONNMARK --set-xmark 0x3e9/0xffffffff

-A PREROUTING ! -s 172.16.250.0/30 -m set --match-set bypass dst -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff



 

Link to comment
Share on other sites

В 29.02.2024 в 14:35, dogoma сказал:

Проверил по проводу, ситуация такая же.

Подскажите, может кто знает как продиагностировать проблему?

На всякий случай выводы команд из шапки:

  Показать содержимое

ipset --list bypass не пустой

Name: bypass

Type: hash:ip

Revision: 4

Header: family inet hashsize 1024 maxelem 65536

Size in memory: 3264

References: 2

Members:
... (дальше IP-шники)

 

ip rule list | grep 1001 не пустой

399: from all fwmark 0x3e9 lookup 1001

 

ip route list table 1001 не пустой

default dev tun0 scope link

 

iptables-save | grep bypass не пустой

-A PREROUTING ! -s 172.16.250.0/30 -m conntrack --ctstate NEW -m set --match-set bypass dst -j CONNMARK --set-xmark 0x3e9/0xffffffff

-A PREROUTING ! -s 172.16.250.0/30 -m set --match-set bypass dst -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff



 

Проблема была не в adguardhome или его настройке.  Проблема была в настройках туннеля. 

Link to comment
Share on other sites

В 10.08.2023 в 09:17, Mapuk37 сказал:

Супер, спасибо.

А есть что-то подобное для сайтов? Например у торрентов часто несколько адресов, на netify не находятся...

 

Тестируя другие решения для маршрутизации обнаружил такой удобный репозиторий: https://github.com/v2fly/domain-list-community/tree/master/data там файлы с именем сайта, в котором список всех используемых им доменов

  • Upvote 2
Link to comment
Share on other sites

  • 2 weeks later...



Так как со временем по теме всё расползлось немножко, то пока разбирался сам, решил попутно собрать воедино актуальную инструкцию:
https://taravasya.github.io/notes/keenetic/agh_keenetic

 
Кажется учёл все последние изменения. Настроил пошагово именно по своей инструкции только ipv4. Выборочное туннелирование работает нормально.

Edited by taravasya
  • Upvote 8
Link to comment
Share on other sites

  • 1 month later...

Все ок работает по инструкции от r13, за исключением одного нюанса. Работают только на основном подключении, проводном интернете. У меня ещё подключен usb может в качестве резерва. Так вот с него обход не работает. Можно ли как то настроить?

Link to comment
Share on other sites

2 часа назад, Mapuk37 сказал:

 Можно ли как то настроить?

AGH может использовать и не зависит от кол-ва провайдеров + ПО роутера и его профили

Скрытый текст
...
  handle_ddr: true
  ipset: []
  ipset_file: /opt/home/AdGuardHome/ipset.conf
  bootstrap_prefer_ipv6: false
...

наличие двух строк в конф файле AGH, одна из которых "ipset_file: /opt/home/AdGuardHome/ipset.conf"

в сам файл ipset.conf например строки или несколько строк

хххх.com,хххххх.io/wg-i
хххххххх.com,ххххх.ххххх.com/wg-i

далее

ipset create wg-i hash:ip

где ее удобней использовать например в скрипт запуска AGH (но учесть если используете вдруг команды скрипта такие как restart/stop/start, хотя когда все отлажено то этого не нужно).

Основное

 iptables -t mangle -I _NDM_HOTSPOT_PRERT -i br0 -s 192.168.IP_клиента/32 -j RETURN
 iptables -t mangle -I _NDM_HOTSPOT_PRERT -i br0 -s 192.168.IP_клиента/32 -j CONNMARK --save-mark 
 iptables -t mangle -I _NDM_HOTSPOT_PRERT -i br0 -s 192.168.IP_клиента/32 -m set --match-set wg-i dst -j MARK --set-mark 0xffff_ПРОФИЛЬ

именно в таком порядке.

Пояcнения - так как в 4.2 произошли изменения по маркировке то как найти нужный профиль было расписано много раз (что ищем так это "show ip policy" нужный профиль и его mark это и будет "0xffff_ПРОФИЛЬ").

Данные команды лучше использовать в скрипте например /opt/etc/ndm/101-AGH.sh

#!/bin/sh

[ "$table" != "mangle" ] && exit 0

if [ -z "$(iptables-save | grep 'wg-i')" ]; then
 iptables -t mangle -I _NDM_HOTSPOT_PRERT -i br0 -s ... RETURN
 iptables -t mangle -I _NDM_HOTSPOT_PRERT -i br0 -s ... --save-mark 
 iptables -t mangle -I _NDM_HOTSPOT_PRERT -i br0 -s ... --set-mark 0xffff_ПРОФИЛЬ
fi

exit 0
  • Thanks 1
Link to comment
Share on other sites

В 01.05.2024 в 17:57, vasek00 сказал:

AGH может использовать и не зависит от кол-ва провайдеров + ПО роутера и его профили

  Показать содержимое
...
  handle_ddr: true
  ipset: []
  ipset_file: /opt/home/AdGuardHome/ipset.conf
  bootstrap_prefer_ipv6: false
...

наличие двух строк в конф файле AGH, одна из которых "ipset_file: /opt/home/AdGuardHome/ipset.conf"

в сам файл ipset.conf например строки или несколько строк

хххх.com,хххххх.io/wg-i
хххххххх.com,ххххх.ххххх.com/wg-i

далее

ipset create wg-i hash:ip

где ее удобней использовать например в скрипт запуска AGH (но учесть если используете вдруг команды скрипта такие как restart/stop/start, хотя когда все отлажено то этого не нужно).

Основное

 iptables -t mangle -I _NDM_HOTSPOT_PRERT -i br0 -s 192.168.IP_клиента/32 -j RETURN
 iptables -t mangle -I _NDM_HOTSPOT_PRERT -i br0 -s 192.168.IP_клиента/32 -j CONNMARK --save-mark 
 iptables -t mangle -I _NDM_HOTSPOT_PRERT -i br0 -s 192.168.IP_клиента/32 -m set --match-set wg-i dst -j MARK --set-mark 0xffff_ПРОФИЛЬ

именно в таком порядке.

Пояcнения - так как в 4.2 произошли изменения по маркировке то как найти нужный профиль было расписано много раз (что ищем так это "show ip policy" нужный профиль и его mark это и будет "0xffff_ПРОФИЛЬ").

Данные команды лучше использовать в скрипте например /opt/etc/ndm/101-AGH.sh

#!/bin/sh

[ "$table" != "mangle" ] && exit 0

if [ -z "$(iptables-save | grep 'wg-i')" ]; then
 iptables -t mangle -I _NDM_HOTSPOT_PRERT -i br0 -s ... RETURN
 iptables -t mangle -I _NDM_HOTSPOT_PRERT -i br0 -s ... --save-mark 
 iptables -t mangle -I _NDM_HOTSPOT_PRERT -i br0 -s ... --set-mark 0xffff_ПРОФИЛЬ
fi

exit 0

Не очень хотелось бы настраивать обход для конкретных клиентов.

Меня устраивает, как сейчас прописано у r13 - обход на всех устройствах, подключающимся с роутеру, просто добавить возможность работы при переключении на мобильный интернет.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...