Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

Всех приветствую! Можно ли сделать так, чтобы роутинг работал для клиентов впн сети (на роутере стоит сервер ikev2)? Раньше всё работало с тором, с помощью двух строчек в netfilter.d

iptables -t nat -A PREROUTING -s 172.20.8.0/24 -i eth3 -p udp -m set --match-set unblock dst -j REDIRECT --to-port 9141
iptables -t nat -A PREROUTING -s 172.20.8.0/24 -i eth3 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141

где, 172.20.8.0/24 - ip адрес клиентов впн

eth3 - интерфейс провайдера

Как сделать что-то подобное для данного способа роутинга?

  • Ответов 145
  • Создана
  • Последний ответ

Топ авторов темы

Опубликовано
16 часов назад, Givanich сказал:

Всех приветствую! Можно ли сделать так, чтобы роутинг работал для клиентов впн сети (на роутере стоит сервер ikev2)? Раньше всё работало с тором, с помощью двух строчек в netfilter.d

iptables -t nat -A PREROUTING -s 172.20.8.0/24 -i eth3 -p udp -m set --match-set unblock dst -j REDIRECT --to-port 9141
iptables -t nat -A PREROUTING -s 172.20.8.0/24 -i eth3 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141

где, 172.20.8.0/24 - ip адрес клиентов впн

eth3 - интерфейс провайдера

Как сделать что-то подобное для данного способа роутинга?

Странные дела творятся...
После обновления роутера до прошивки 4.2.1, список bypass заработал у клиентов впн.

  • 3 недели спустя...
Опубликовано

В связи с активацией ech cloudflare на всех ресурсах с бесплатным cloudflare не открываются тысячи сайтов. Эти сайты не состоят в списках блокировок. Есть ли какое-то решение через adguard отключить этот ech или автоматом перенаправлять через другой маршрут адреса содержащие ech?

Сайт для примера https://qbittorrent.org

Опубликовано
10 часов назад, MaximUSNG сказал:

В связи с активацией ech cloudflare на всех ресурсах с бесплатным cloudflare не открываются тысячи сайтов. Эти сайты не состоят в списках блокировок. Есть ли какое-то решение через adguard отключить этот ech или автоматом перенаправлять через другой маршрут адреса содержащие ech?

Сайт для примера https://qbittorrent.org

AGH - проверил два раза на двух разных браузерах и так же один раз на провайдере второй через WG cloudflare

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

-3.jpg.a271ce85082431ba21df1c5dd0cf6481.jpg

 

Опубликовано
10 часов назад, vasek00 сказал:

AGH - проверил два раза на двух разных браузерах и так же один раз на провайдере второй через WG cloudflare

Возможно провайдер еще не активировал блокировку эту. Наши сайты сейчас поголовно отключают эту функцию. Иностранные на 99% оставят все как есть. Через впн работает да, но потребуется слишком много дополнительных ресурсов прописывать, которые по факту не заблокированы РКН.

Проверить включен ли ECH можно тут на примере openstreetmap  https://browserleaks.com/ip/openstreetmap.org

Сама новость. И да там не написано про блокировку, но это как и с ютубом внедрили без комментариев https://portal.noc.gov.ru/ru/news/2024/11/07/рекомендуем-отказаться-от-cdn-сервиса-cloudflare

Пока нашел такой способ отключения ech в ответе DNS для Adguard home. В фильтрах прописать:

||*^$dnstype=HTTPS,dnsrewrite=NXDOMAIN;;

  • 2 недели спустя...
Опубликовано

Обобщив опыт и приведенные здесь решения, написал скрипт, который выполнит все шаги по установке и настройке ipset для использования в связке с ADGhome.

За основу взята эта инструкция, но без создания отдельной политики - изменения применяются ко всем устройствам.

Репозиторий на github.

Детально проверить возможности нет, буду благодарен за обратную связь, предложения и пожелания.

Опубликовано
8 часов назад, Ground_Zerro сказал:

Можно чуть подробней про этот способ?

Что во что и как прописывать?

В custom filtering rules, только немного правильнее будет вот так

||*^$dnstype=HTTPS,dnsrewrite=NOERROR

Опубликовано

Добрый день! Возникла одна проблема с ДНС adguard home.

Если участник сети использует сторонние днс сервера, то в этом случае обход для этого устройства не работает.

Как принудительно направить все днс запросы от клиентов, на сервер Adguard Home?

if [ -z "$(iptables-save 2>/dev/null | grep "udp \-\-dport 53 \-j DNAT")" ]; then
	iptables -w -t nat -I PREROUTING -i br0 -p udp --dport 53 -j DNAT --to 192.168.1.1
fi

if [ -z "$(iptables-save 2>/dev/null | grep "tcp \-\-dport 53 \-j DNAT")" ]; then
	iptables -w -t nat -I PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to 192.168.1.1
fi

К сожалению правило выше, не работает, несмотря на то что правило добавляется.

Некоторые устройства в сети, не дают править настройки ipv4.

Опубликовано (изменено)
В 21.11.2024 в 16:16, Givanich сказал:

Некоторые устройства в сети, не дают править настройки ipv4.

Речь как понимаю об использовании устройством или программой своего ДНС, но в тэтом случае это скорее всего DoT или DoH. 

DoT (DNS over TLS)
Порт: 853 (TCP)
DoH (DNS over HTTPS)
Порт: 443 (TCP)

А в правиле только 53 UDP.
Попробуйте аналогичным способом редиректить DNS запросы этих устройств на ADG используя перенаправление на него этх портов.

 

PS
Хотя шифрованное соединение им установить не удастся.. Но вдруг они начнут в этом случае использовать DNS роутера полученное ими по DHCP.

Изменено пользователем Ground_Zerro
Опубликовано

Подскажите, пожалуйста, как можно сделать эти маршруты эксклюзивными?

Например, я пропускаю траффик через ngw0 для домена example.com, и если интерфейс ngw0 недоступен, то траффик начинает проходить через дефолтный eth2.2@eth2 (не VPN интерфейс). Хотелось бы чтобы траффик для сайта example.com не проходил совсем, если интерфейс ngw0 недоступен.

Опубликовано (изменено)
2 часа назад, olsh сказал:

Подскажите, пожалуйста, как можно сделать эти маршруты эксклюзивными?

Например, я пропускаю траффик через ngw0 для домена example.com, и если интерфейс ngw0 недоступен, то траффик начинает проходить через дефолтный eth2.2@eth2 (не VPN интерфейс). Хотелось бы чтобы траффик для сайта example.com не проходил совсем, если интерфейс ngw0 недоступен.

Вопрос вам - я пропускаю траффик через ngw0 для домена example.com речь идет про AdGuard Home, каким способом или как.

Изменено пользователем vasek00
Опубликовано (изменено)
On 11/27/2024 at 7:53 PM, vasek00 said:

Вопрос вам - я пропускаю траффик через ngw0 для домена example.com речь идет про AdGuard Home, каким способом или как.

Трафик пропускаю с помощью AGH, как описано в первом сообщение в этой ветке.

Изменено пользователем olsh
Опубликовано
1 час назад, olsh сказал:

Трафик пропускаю с помощью AGH, как описано в первом сообщение в этой ветке.

Я вас просил объяснить что и как у вас я пропускаю траффик через ngw0 для домена example.com

а вы как говорится по-простому - почитайте.

 

Опубликовано
В 21.11.2024 в 08:16, Givanich сказал:

Добрый день! Возникла одна проблема с ДНС adguard home.

Если участник сети использует сторонние днс сервера, то в этом случае обход для этого устройства не работает.

Как принудительно направить все днс запросы от клиентов, на сервер Adguard Home?

if [ -z "$(iptables-save 2>/dev/null | grep "udp \-\-dport 53 \-j DNAT")" ]; then
	iptables -w -t nat -I PREROUTING -i br0 -p udp --dport 53 -j DNAT --to 192.168.1.1
fi

if [ -z "$(iptables-save 2>/dev/null | grep "tcp \-\-dport 53 \-j DNAT")" ]; then
	iptables -w -t nat -I PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to 192.168.1.1
fi

К сожалению правило выше, не работает, несмотря на то что правило добавляется.

Некоторые устройства в сети, не дают править настройки ipv4.

Скрытый текст
#!/bin/sh

[ "$type" != "iptables" -a "$type" != "ip6tables" ] && exit 0
[ "$table" != "filter" ] && exit 0

ipt4() {
	if ! iptables -C "$@" &>/dev/null; then
		iptables -w -I "$@" || exit 0
	fi
}

ipt6() {
	if ! ip6tables -C "$@" &>/dev/null; then
		ip6tables -w -I "$@" || exit 0
	fi
}

ipt() {
	local F=ipt4
	[ "$type" == "iptables" ] || F=ipt6
	"$F" "$@"
}

if [ "$type" == "iptables" ]; then
	IPSET=block4-doh
else
	IPSET=block6-doh
fi;

# Block DoT from Local
ipt _NDM_SL_FORWARD -t filter -i br+ -p tcp --dport 853 -m state --state NEW -j REJECT
ipt _NDM_SL_FORWARD -t filter -i br+ -p udp --dport 853 -m state --state NEW -j REJECT

# Block DoH from Local
ipt _NDM_SL_FORWARD -t filter -i br+ -p tcp --dport 443 -m state --state NEW -m set --match-set ${IPSET} dst -j REJECT
ipt _NDM_SL_FORWARD -t filter -i br+ -p udp --dport 443 -m state --state NEW -m set --match-set ${IPSET} dst -j REJECT

exit 0

block-doh.txt

# Google Public DNS
8.8.8.8
8.8.4.4
2001:4860:4860::8888
2001:4860:4860::8844

# Cloudflare-DNS
#1.1.1.1
1.0.0.1
#2606:4700:4700::1111
2606:4700:4700::1001

# Yandex.DNS
77.88.8.8
77.88.8.1
2a02:6b8::feed:0ff
2a02:6b8:0:1::feed:0ff

# Quad9 DNS
9.9.9.9
9.9.9.10
2620:fe::fe
2620:fe::10

block-doh.sh

#!/bin/sh

ipset create block4-doh hash:net family inet -exist
ipset create block6-doh hash:net family inet6 -exist

while read line || [ -n "$line" ]; do

	[ -z "$line" ] && continue
	[ "${line:0:1}" = "#" ] && continue

	addr4=$(echo $line | grep -Eo '^([0-9]{1,3}\.){3}[0-9]{1,3}(/[0-9]{1,2}){0,1}$')
	if [ ! -z "$addr4" ]; then
		ipset -exist add block4-doh $addr4
		continue
	fi

	addr6=$(echo $line | grep -Eo '^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}(/[0-9]{1,3}){0,1}$')
	if [ ! -z "$addr6" ]; then
		ipset -exist add block6-doh $addr6
		continue
	fi

done < /opt/etc/block-doh.txt

 

 

Опубликовано (изменено)
29 минут назад, avn сказал:
  Скрыть содержимое
#!/bin/sh

[ "$type" != "iptables" -a "$type" != "ip6tables" ] && exit 0
[ "$table" != "filter" ] && exit 0

ipt4() {
	if ! iptables -C "$@" &>/dev/null; then
		iptables -w -I "$@" || exit 0
	fi
}

ipt6() {
	if ! ip6tables -C "$@" &>/dev/null; then
		ip6tables -w -I "$@" || exit 0
	fi
}

ipt() {
	local F=ipt4
	[ "$type" == "iptables" ] || F=ipt6
	"$F" "$@"
}

if [ "$type" == "iptables" ]; then
	IPSET=block4-doh
else
	IPSET=block6-doh
fi;

# Block DoT from Local
ipt _NDM_SL_FORWARD -t filter -i br+ -p tcp --dport 853 -m state --state NEW -j REJECT
ipt _NDM_SL_FORWARD -t filter -i br+ -p udp --dport 853 -m state --state NEW -j REJECT

# Block DoH from Local
ipt _NDM_SL_FORWARD -t filter -i br+ -p tcp --dport 443 -m state --state NEW -m set --match-set ${IPSET} dst -j REJECT
ipt _NDM_SL_FORWARD -t filter -i br+ -p udp --dport 443 -m state --state NEW -m set --match-set ${IPSET} dst -j REJECT

exit 0

block-doh.txt

# Google Public DNS
8.8.8.8
8.8.4.4
2001:4860:4860::8888
2001:4860:4860::8844

# Cloudflare-DNS
#1.1.1.1
1.0.0.1
#2606:4700:4700::1111
2606:4700:4700::1001

# Yandex.DNS
77.88.8.8
77.88.8.1
2a02:6b8::feed:0ff
2a02:6b8:0:1::feed:0ff

# Quad9 DNS
9.9.9.9
9.9.9.10
2620:fe::fe
2620:fe::10

block-doh.sh

#!/bin/sh

ipset create block4-doh hash:net family inet -exist
ipset create block6-doh hash:net family inet6 -exist

while read line || [ -n "$line" ]; do

	[ -z "$line" ] && continue
	[ "${line:0:1}" = "#" ] && continue

	addr4=$(echo $line | grep -Eo '^([0-9]{1,3}\.){3}[0-9]{1,3}(/[0-9]{1,2}){0,1}$')
	if [ ! -z "$addr4" ]; then
		ipset -exist add block4-doh $addr4
		continue
	fi

	addr6=$(echo $line | grep -Eo '^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}(/[0-9]{1,3}){0,1}$')
	if [ ! -z "$addr6" ]; then
		ipset -exist add block6-doh $addr6
		continue
	fi

done < /opt/etc/block-doh.txt

 

 

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


_NDM_DNS_FORWARD_BLOCK
_NDM_HOTSPOT_DNSREDIR
_NDM_FORWARD_DNS_BLOCK_DOH
_NDM_IC_REDIRECT

Изменено пользователем Denis P
Опубликовано (изменено)
9 минут назад, Denis P сказал:

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


_NDM_DNS_FORWARD_BLOCK
_NDM_HOTSPOT_DNSREDIR
_NDM_FORWARD_DNS_BLOCK_DOH
_NDM_IC_REDIRECT

У меня нету таких цепочек.

4.3.a7

$ iptables -nvL _NDM_DNS_FORWARD_BLOCK
iptables: No chain/target/match by that name.

 

Изменено пользователем avn
Опубликовано
12 часа назад, avn сказал:

У меня нету таких цепочек.

4.3.a7

$ iptables -nvL _NDM_DNS_FORWARD_BLOCK
iptables: No chain/target/match by that name.

 

в iptables-save тоже нет?
еще возможно они появляются при установке компонента контентной фильтрации

Опубликовано (изменено)
В 30.11.2024 в 07:53, avn сказал:
#!/bin/sh

Спасибо.

Скажите, я правильно понимаю, что добавленные правила остаются активными до перезагрузки системы или явного удаления и чтобы они применялись после каждой перезагрузки, скрипт нужно добавить в автозагрузку через cron или опереться на какой-то другой триггер для инициализации скрипта при срабатывании определенных условий?

И еще вопрос: сработает если сделать так?
 

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

block-doh.sh

#!/bin/sh

# Создание ipset для IPv4 и IPv6, если они еще не существуют
ipset create block4-doh hash:net family inet -exist
ipset create block6-doh hash:net family inet6 -exist

# Чтение файла и добавление IP-адресов в ipset
while IFS= read -r line || [ -n "$line" ]; do
    # Пропуск пустых строк и комментариев
    [ -z "$line" ] || [ "${line#\#}" != "$line" ] && continue
    
    # Добавление IP-адресов в соответствующий ipset
    case "$line" in
        *:* ) ipset -exist add block6-doh "$line" ;;  # IPv6 адреса
        * ) ipset -exist add block4-doh "$line" ;;     # IPv4 адреса
    esac
done < /opt/etc/block-doh.txt

filter-block.sh

#!/bin/sh

# Проверка типа таблицы и выхода из скрипта, если не соответствует
[ "$type" != "iptables" ] && [ "$type" != "ip6tables" ] && exit 0
[ "$table" != "filter" ] && exit 0

# Универсальная функция для добавления правил iptables/ip6tables
add_rule() {
    local cmd=$1
    shift
    if ! $cmd -C "$@" &>/dev/null; then
        $cmd -w -I "$@" || exit 1
    fi
}

# Определение команды на основе типа таблицы
IP_CMD="iptables"
IPSET_NAME="block4-doh"
[ "$type" = "ip6tables" ] && { IP_CMD="ip6tables"; IPSET_NAME="block6-doh"; }

# Маска для фильтрации портов
for port in 853 443; do
    add_rule "$IP_CMD" _NDM_SL_FORWARD -t filter -i br+ -p tcp --dport $port -m state --state NEW -m set --match-set "$IPSET_NAME" dst -j REJECT
    add_rule "$IP_CMD" _NDM_SL_FORWARD -t filter -i br+ -p udp --dport $port -m state --state NEW -m set --match-set "$IPSET_NAME" dst -j REJECT
done

exit 0

 



 

Изменено пользователем Ground_Zerro
  • 2 недели спустя...
Опубликовано (изменено)

Здравствуйте. Хорошо, когда есть настроенное VPN решение в интерфейсе Keenetic. Только вот все популярные протоколы заблокированы РКН и большинство, я уверен, используют другие решения. Я вот использую Xkeen. Куда в этом случае перенаправлять трафик? 

P.S.

Почему в самом Xkeen не настроил политику? У меня там есть она и устройства в ней работают полностью через VPN. А устройства, не входящие в политику, работают напрямую. Но меня достали тормоза Ютуба, хочу строго Ютуб трафик для них пропускать через VPN.

Изменено пользователем Виктор67
Опубликовано (изменено)
В 16.12.2024 в 08:49, Виктор67 сказал:

все популярные протоколы заблокированы

Ну почему же все. Престарелый L2TP  (с IPsec и без него) вполне себе шевелится на подавляющем большинстве провайдеров. Ровно как и PPTP например жив там, где WG и OVPN заблочены.

Не пробовал, но вроде способ остается рабочим в том числе, если например поставить SingBox и настроить на нем Vless, Outline или xRay - любое соединение что поднимает сетевой интерфейс на роутере*.

*если, что меня поправят.

 

В 16.12.2024 в 08:49, Виктор67 сказал:

Почему в самом Xkeen не настроил политику

В нем есть маршрутизация не только на основе политики устройств. Почитайте гайды, посмотрите видео. Не помогу - не пользуюсь.

Изменено пользователем Ground_Zerro
Опубликовано (изменено)
12 часов назад, Ground_Zerro сказал:

Не пробовал, но вроде способ остается рабочим в том числе, если например поставить SingBox и настроить на нем Vless, Outline или xRay - любое соединение что поднимает сетевой интерфейс на роутере*.

В xkeen работает xray. Только вот как узнать, на каком интерфейсе он поднят? И не меняется ли он при перезагрузке? 

Я ввожу ip addr копирую результаты. Далее останавливаю командой xkeen -stop и опять ввожу ip addr и результат тот же самый: ничего не добавляется, не удаляется, не меняется.

Изменено пользователем Виктор67
Опубликовано

@Виктор67

xKeen и так умеет по доменам обходить, без манипуляций из этого топика.
Что нужно - через VPN, что не нужно - напрямую.

Вот тут разбирают например.

PS
Интерфейсы можно посмотреть в CLI (Web CLI) командой:
 

show interface

Не могу предметно ничего подсказать, не пользуюсь им. Спросите в теме xKeen или у них в ТГ.

Опубликовано (изменено)
2 часа назад, Ground_Zerro сказал:

xKeen и так умеет по доменам обходить, без манипуляций из этого топика.
Что нужно - через VPN, что не нужно - напрямую.

Я в ветке Xkeen спросил. Проблема в том, что у меня настроен полный пропуск трафика через VPN для устройств, которые добавлены в политику Xkeen. А для тех, кто туда не входит - всё идёт напрямую. И возможности выборочно настроить по отдельным доменам через VPN для тех, кто ходит напрямую, в Xkeen нет. Только если добавить в политику Xkeen. Но это тогда надо всё будет переиначивать, да и в целом это менее надёжно мне видится. Предельно понятно - когда всё идёт через VPN, и для конкретных устройств. Вот я и хотел обсуждаемом в данной ветке решением пробросить трафик для Ютуб у тех соединений, которые идут напрямую. 

По поводу команды 

show interface

Сравнил xkeen -stop и xkeen -start , разницы нет, изменяются только "last-change", "uptime", "last-handshake" . Но эти параметры наверняка меняются сами по себе в реальном времени.

Изменено пользователем Виктор67
Опубликовано (изменено)
В 08.06.2023 в 11:01, Александр Рыжов сказал:

При желании можно использовать несколько VPN-соединений для обращения к разным доменам, для простоты понимания здесь это не описано.

Всем привет.

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

У меня настроена маршрутизация методом из первого поста темы и меня заинтересовало это примечание (цитата).

Возможность использовать несколько туннелей меня заинтересовала потому, что у меня есть туннель для доступа к рабочим локальным ресурсам (gitlab и т.д.), сейчас использую для рабочих задач просто отдельную виртуальную машину (окружение, рабочие инструменты), в которой подключаюсь к рабочей сети пуская трафик виртуалки через рабочий туннель, но было бы неплохо выборочно маршрутизировать нужные домены до рабочей сети прямо на роутере, исключив отдельное поднятие туннеля на машине из данного уравнение (вообще, в конечном счёте виртуалка всё-равно останется, но с хоста иметь доступ к рабочим ресурсам всё-равно полезно).

Здесь хотел бы описать как "использовать несколько "туннелей" для обращения к разным доменам".

Файлы необходимо отредактировать так (в начале файла для наглядности отсавил закомментированным старый вариант (строка начинается с #), его можно удалить):

nano /opt/etc/init.d/S52ipset

Добавляем новый "список" "secondlist".

#!/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
#    ip rule add fwmark 1001 table 1001
#fi

if [ "$1" = "start" ]; then
    ipset create bypass hash:ip
    ipset create secondlist hash:ip
    ip rule add fwmark 1001 table 1001
    ip rule add fwmark 1002 table 1002
fi

 

 

nano /opt/etc/ndm/ifstatechanged.d/010-bypass-table.sh

Тут и далее реализация по два туннеля "tun0" и "nwg0", соответственно, подставьте сюда свои.

#!/bin/sh

#[ "$system_name" == "tun0" ] || exit 0
#[ ! -z "$(ipset --quiet list bypass)" ] || exit 0
#[ "${connected}-${link}-${up}" == "yes-up-up" ] || exit 0

#if [ -z "$(ip route list table 1001)" ]; then
#    ip route add default dev $system_name table 1001
#fi

if [ "$system_name" == "tun0" ]; then
    [ ! -z "$(ipset --quiet list bypass)" ] || exit 0
    [ "${change}-${connected}-${link}-${up}" == "link-yes-up-up" ] || exit 0

    if [ -z "$(ip route list table 1001)" ]; then
        ip route add default dev $system_name table 1001
    fi
fi

if [ "$system_name" == "nwg0" ]; then
    [ ! -z "$(ipset --quiet list secondlist)" ] || exit 0
    [ "${change}-${connected}-${link}-${up}" == "link-yes-up-up" ] || exit 0

    if [ -z "$(ip route list table 1002)" ]; then
        ip route add default dev $system_name table 1002
    fi
fi

 

 

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

Тут, соответственно, тоже используйте свои туннели и их подсети.

#!/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

if [ ! -z "$(ip link list | grep tun0)" ] && [ ! -z "$(ipset --quiet list bypass)" ]; then
    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
fi

if [ ! -z "$(ip link list | grep nwg0)" ] && [ ! -z "$(ipset --quiet list secondlist)" ]; then
    if [ -z "$(iptables-save | grep secondlist)" ]; then
        iptables -w -t mangle -A PREROUTING ! -s 10.100.100.78/32 -m conntrack --ctstate NEW -m set --match-set secondlist dst -j CONNMARK --set-mark 1002
        iptables -w -t mangle -A PREROUTING ! -s 10.100.100.78/32 -m set --match-set secondlist dst -j CONNMARK --restore-mark
    fi
fi

 

Далее не забудьте.

chmod +x /opt/etc/init.d/S52ipset
chmod +x /opt/etc/ndm/ifstatechanged.d/010-bypass-table.sh
chmod +x /opt/etc/ndm/netfilter.d/010-bypass.sh

 

Пропишем домены для отправки по разным туннелям (например, gitlab.test.com)

nano /opt/etc/AdGuardHome/ipset.conf

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

ipinfo.io/bypass
gitlab.test.com/secondlist

 

Далее можно перезагрузить роутер или выполнить эти команды.

/opt/etc/init.d/S52ipset start

/opt/etc/ndm/ifstatechanged.d/010-bypass-table.sh

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

/opt/etc/init.d/S99adguardhome restart

Теперь на ipinfo.io будет ходить через первый туннель (tun0 в примере), а на gitlab.test.com — через второй (nwg0). Готово.

 

Есть пара моментов.

Момент 1.

У меня не отрабатывает /opt/etc/ndm/ifstatechanged.d/010-bypass-table.sh (возможно по разным причинам), поэтому использую костыль.

nano /opt/etc/init.d/S99z

С таким содержимым.

#!/bin/sh

sleep 15
PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin

case "$1" in
        start)
            if [ -c /dev/net/tun ] ; then
                ip route add default dev tun0 table 1001
                ip route add default dev nwg3 table 1002
            fi
            ;;
        stop)
            if [ -c /dev/net/tun ] ; then
                ip route del default dev tun0 table 1001
                ip route del default dev nwg3 table 1002
            fi
            ;;
        status)
            ip route list table 1001
            ip route list table 1002
            ;;
        *)
            echo "Usage: $0 {start|stop||status}"
            ;;
esac

Может кто из местных подскажет мне как поправить так, чтобы /opt/etc/ndm/ifstatechanged.d/010-bypass-table.sh отрабатывал, но пока так.

chmod +x /opt/etc/init.d/S99z

/opt/etc/init.d/S99z start

(после start будет ожидание 15 секунд, дождитесь)

 

Момент 2.

В случае с доступом к локальным рабочим ресурсам всё сложнее, в рабочей сети свой dns, который резолвит домены локальных ресурсов.

Предположим это туннель WG, клиент получает такой IP-адрес: 10.100.100.78/32, DNS-сервер: 10.243.5.100, разрешённые IP-адреса: 10.242.0.0/23 и 10.243.5.0/24 (всё в конфигах вашего туннеля). 

Прописываем в Upstream DNS-серверы в AdGuardHome и сохраняем:

[/gitlab.test.com/]10.243.5.100

И теперь запрос gitlab.test.com должен резолвиться сервером 10.243.5.100 и идти через туннель указанный для secondlist. Ура.

Изменено пользователем dogoma

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.