Jump to content

ankar84

Forum Members
  • Posts

    403
  • Joined

  • Last visited

  • Days Won

    3

Posts posted by ankar84

  1. В 09.08.2019 в 21:45, Le ecureuil сказал:

    Наверное в будущем нужно для dot/doh будет приделать привязку к домену, сейчас таковая не поддерживается (считалось, что необходимости в этом не будет).

    Давайте тогда отложим ненадолго это.

    Доброго вам дня!

    Подскажите, не пришло ли время для привязки к домену dot/doh серверов?

  2. 7 минут назад, karimovrt сказал:

    Долго долго висит без ответа 

    Тогда давайте посмотрим traceroute до узла в списке. Как я писал выше, для проверки я добавил 2ip.ua в список обхода. Вот что получается у меня:

    ~ # traceroute 2ip.ua
    traceroute to 2ip.ua (77.123.139.189), 30 hops max, 38 byte packets
     1  172.16.82.5 (172.16.82.5)  173.835 ms  173.622 ms  173.751 ms
    2 внешний адрес туннеля

    То есть сразу же первым хопом мы должны получить второй конец тоннеля (в вашем случае это кажется будет 10.0.0.1) а у меня настроено по инструкциям из базы знаний сервер 172.16.82.1 и пир 172.16.82.5

  3. 1 час назад, karimovrt сказал:

    ip route add table 1000 $cidr via 10.64.0.1 - тут именно адрес роутера? Он у меня 10.0.0.4, а адрес вышестоящего (amazon vps) 10.0.0.1

    Адрес роутера на интерфейсе VPN. Видимо да, 10.0.0.4

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

    [ "$id" == "wireguard" ] || exit 0

    wireguard-link-no-down-down)

    Тут я смотрел в журнале роутера когда дергал тумблер своего wireguard подключения. Что в логах написано, то и нужно в этот скрипт записать.

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

    Без нуля? Или с нулём как он написан с startup конфиге?

    В моем случае без нуля (имя брал из журнала Диагностики роутера).

    У вас, возможно и с нулем, посмотрите как определяется в логах.

     

    Обновление: сейчас у себя в логах глянул, у меня тоже с нулем - а именно вот так Wireguard0 называется это подключение. Но точно было с маленькой буквы и без нуля ранее.

    А вот на 3.3.10 вот так. Пойду проверю работу схемы.

    Обновление 2: да, у меня и в диагностике Wireguard0 и в скрипте Wireguard0 и все работает. Вот как выглядит мой скрипт:

    ~ # cat /opt/etc/ndm/ifstatechanged.d/100-add_unblock_route.sh
    #!/bin/sh
    
    [ "$1" == "hook" ] || exit 0
    [ "$change" == "link" ] || exit 0
    [ "$id" == "Wireguard0" ] || exit 0
    
    case ${id}-${change}-${connected}-${link}-${up} in
            Wireguard0-link-no-down-down)
                    ip route flush table 1000
                    ip rule del from all table 1000 priority 1777
            ;;
            Wireguard0-link-yes-up-up)
                    ip rule add from all table 1000 priority 1777
                    /opt/bin/unblock_vpn.sh &
            ;;
    esac
    
    exit 0

     

  4. 47 минут назад, karimovrt сказал:

    Сделал по Вашей схеме (также хочу чтобы бы обход был у l2tp клиентов) Но, не взлетело.

    Давайте по порядку. 

    Выполнили необходимые переименования имен интерфейсов под свой VPN туннель?

    В том же файле /opt/etc/ndm/ifstatechanged.d/100-add_unblock_route.sh нужно сделать замены в следующих строках вместо wireguard имя своего интерфейса

    [ "$id" == "wireguard" ] || exit 0

    wireguard-link-no-down-down)

    wireguard-link-yes-up-up)

    А в строках 10 и 13 предлагаю использовать более универсальную команду, чтобы из всех источников пакеты отправлялись в туннель, если адрес назначения из таблицы 1000

    ip rule add from all table 1000 priority 1776

    Скорее всего нужный вам интерфейс носит название VPNL2TPServer и тогда скрипт должен выглядеть вот так:

    #!/bin/sh
    
    [ "$1" == "hook" ] || exit 0
    [ "$change" == "link" ] || exit 0
    [ "$id" == "VPNL2TPServer" ] || exit 0
    
    case ${id}-${change}-${connected}-${link}-${up} in
    	VPNL2TPServer-link-no-down-down)
    		ip route flush table 1000
    		ip rule del from all table 1000 priority 1776 2>/dev/null
    	;;
    	VPNL2TPServer-link-yes-up-up)
    		ip rule add from all table 1000 priority 1776 2>/dev/null
    		/opt/bin/unblock_vpn.sh &
    	;;
    esac
    
    exit 0

    Но тут я могу и ошибаться, пробуйте.

    57 минут назад, karimovrt сказал:

    Ручной запуск в /opt/etc/ndm/ifstatechanged.d/ вызывает только реконект eoip/ipsec/l2tp соединений, таблица при этом остаётся пустой.

    Нужно понять, заполняется ли вообще таблица.

    Что дает выполнение команды /opt/bin/unblock_vpn.sh ?

    Есть ли у вас файл /opt/etc/unblock-vpn.txt ? Есть ли в нем нужные вам данные?

    В файле /opt/bin/unblock_vpn.sh, так же нужно провести несколько замен под свои данные:

    ip route add table 1000 $cidr via 10.64.0.1 dev nwg1 2>/dev/null

    ip route add table 1000 $addr via 10.64.0.1 dev nwg1 2>/dev/null

    awk '{system("ip route add table 1000 "$1" via 10.64.0.1 dev nwg1 2>/dev/null")}'

    Здесь нужно заменить 10.64.0.1 на IP адрес роутера интерфейса вашего L2TP туннеля, и nwg1 нужно заменить на имя вашего интерфейса L2TP туннеля.

    Посмотреть имена всех интерфейсов можно командой ifconfig

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

    ip route show table 1000

    И если таблица заполнена нужными нам данными можно приступать к следующим шагам в диагностике запустить скрипт 

    /opt/etc/ndm/ifstatechanged.d/100-add_unblock_route.sh

    и проверить таблицу маршрутизации

    ip rule list

    Там должно быть правило 1776, которое направляет все пакеты на адреса и сети из таблицы 1000 в нужный туннель.

    Если такое правило есть то можно приступать к последней стадии диагностики - проверять работу хука на остановку и поднятие туннеля.

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

    Затем снова включить тумблер туннеля и немного подождать. Затем снова проверить таблицу 1000 и список маршрутизации - таблица должна быть заполнена и на нее должен быть маршрут.

  5. 4 минуты назад, Станислав Поветьев сказал:

    Проверяю с самого роутера, мне нужно что бы сам роутер тоже обходил блокировку телеграм, иначе бот не работает на нём.

    Да, трассировка на роутере у меня тоже показывает что запросы идут прямым путем, а не через VPN.

    Но тут или просить помощи у @avn или может кто из других знатоков поможем.

    6 минут назад, Станислав Поветьев сказал:

    ничего не выводит ни в консоль ни в логи кинетика почему то. 

    У меня выводит (скрин прикладывал к посту) добавил в самом конце скрипта unblock_vpn.sh после done

  6. 1 минуту назад, Станислав Поветьев сказал:

    1777:   from all iif br0 lookup 1000

    Нужное нам правило добавлено.

    Осталось понять, откуда проверяете?

    Если с компьютера в домашней сети, который ходит в интернет через интерфейс br0 роутера, то должно работать.

    Если еще из какого-то сегмента сети, который сейчас ходит в интернет через какой-то другой интерфейс, то нужно его так же прописать, как я это делал в примере для l2tp

    ip rule add iif l2tp0 table 1000 priority 1778

     

  7. 8 минут назад, Станислав Поветьев сказал:

    Сделал новый вариант скрипта у себя, но почему то трейс не идет через vpn, хотя таблица заполнена

    Что покажет ip rule list ?

    И ppp0 это интерфейс для вашего туннеля и 10.10.10.1 это адрес роутера на интерфейсе ppp0 ?

  8. 1 минуту назад, avn сказал:

    dnsmasq решает данные проблемы в полном объеме.

    Это понятно и с этим я полностью согласен.

    И сам ранее очень активно использовал DNScrypt-proxy2 для этого.

    Но когда DoT и DoH появились "ис каропки" очень захотелось использовать именно их и вообще максимально штатными средствами.

  9. В 09.08.2019 в 17:45, Le ecureuil сказал:

    нужно для dot/doh будет приделать привязку к домену, сейчас таковая не поддерживается (считалось, что необходимости в этом не будет).

    @Le ecureuil еще не пришло время для этого?

    • Upvote 1
  10. 10 часов назад, avn сказал:

    Полный набор скриптов, которые работают у меня во вложении.

    Сейчас попробовал установить ваши скрипты. 

    Вот сразу несколько моментов для тех, кто делает это с нуля.

    Ставим утилиту dig

    opkg install bind-dig

    Делаем скрипты исполняемыми:

    chmod +x /opt/bin/unblock_vpn.sh
    chmod +x /opt/etc/ndm/ifstatechanged.d/100-add_unblock_route.sh

    Делаем ссылку в крон

    ln -s /opt/bin/unblock_vpn.sh /opt/etc/cron.hourly/01unblock

    Так же подправил шлюз, имя подключения и имя файла с целями на выборочную маршрутизацию на свои.

    Дополнительно отмечу, что данная схема по умолчанию работает для устройств в Домашней сети (те устройства, что ходят через интерфейс br0)

    Если вы, к примеру, подключаетесь к роутеру по L2TP и хотите так же обращаться к нужным ресурсам через VPN то необходимо добавить следующую строку:

    ip rule add iif l2tp0 table 1000 priority 1778

    То есть в моем случае скрипт уже будет выглядеть вот так:

    #!/bin/sh
    
    [ "$1" == "hook" ] || exit 0
    [ "$change" == "link" ] || exit 0
    [ "$id" == "Wireguard0" ] || exit 0
    
    case ${id}-${change}-${connected}-${link}-${up} in
    	Wireguard0-link-no-down-down)
    		ip route flush table 1000
    		ip rule del iif br0 table 1000 priority 1777 2>/dev/null
    		ip rule del iif l2tp0 table 1000 priority 1778 2>/dev/null
    	;;
    	Wireguard0-link-yes-up-up)
    		ip rule add iif br0 table 1000 priority 1777 2>/dev/null
    		ip rule add iif l2tp0 table 1000 priority 1778 2>/dev/null
    		/opt/bin/unblock_vpn.sh &
    	;;
    esac
    
    exit 0

    Итог:

    image.png.554361a3a38329481da9600746eb8f0a.png

    Скрытый текст
    
    ~ # ip route show table 1000
    5.129.186.222 via 172.16.82.1 dev nwg0
    46.148.17.243 via 172.16.82.1 dev nwg0
    77.123.139.189 via 172.16.82.1 dev nwg0
    81.17.30.51 via 172.16.82.1 dev nwg0
    91.108.4.0/22 via 172.16.82.1 dev nwg0
    91.108.8.0/22 via 172.16.82.1 dev nwg0
    91.108.12.0/22 via 172.16.82.1 dev nwg0
    91.108.16.0/22 via 172.16.82.1 dev nwg0
    91.108.56.0/22 via 172.16.82.1 dev nwg0
    91.132.60.13 via 172.16.82.1 dev nwg0
    91.132.60.14 via 172.16.82.1 dev nwg0
    95.161.64.0/20 via 172.16.82.1 dev nwg0
    104.27.140.68 via 172.16.82.1 dev nwg0
    104.27.141.68 via 172.16.82.1 dev nwg0
    104.27.180.254 via 172.16.82.1 dev nwg0
    104.27.181.254 via 172.16.82.1 dev nwg0
    104.28.14.51 via 172.16.82.1 dev nwg0
    104.28.15.51 via 172.16.82.1 dev nwg0
    104.222.176.202 via 172.16.82.1 dev nwg0
    108.174.10.10 via 172.16.82.1 dev nwg0
    149.154.160.0/22 via 172.16.82.1 dev nwg0
    149.154.164.0/22 via 172.16.82.1 dev nwg0
    149.154.167.99 via 172.16.82.1 dev nwg0
    149.154.168.0/22 via 172.16.82.1 dev nwg0
    149.154.172.0/22 via 172.16.82.1 dev nwg0
    185.48.59.9 via 172.16.82.1 dev nwg0
    185.81.128.108 via 172.16.82.1 dev nwg0
    186.2.163.90 via 172.16.82.1 dev nwg0
    188.166.3.205 via 172.16.82.1 dev nwg0
    195.82.146.214 via 172.16.82.1 dev nwg0
    
    ~ # ip rule list
    0:      from all lookup local
    10:     from all fwmark 0xffffcff lookup main
    164:    from all fwmark 0xffffd00 lookup 42
    165:    from all fwmark 0xffffd00 lookup unspec blackhole
    166:    from all fwmark 0xffffd01 lookup 43
    167:    from all fwmark 0xffffd01 lookup unspec blackhole
    222:    from 172.16.82.1 lookup 84
    248:    from all lookup 248
    1777:   from all iif br0 lookup 1000
    32766:  from all lookup main
    32767:  from all lookup default
    

     

    @avn выражаю огромную благодарность за реализацию выборочного обхода через таблицу.

    @keenet07 в этой схеме учтены, кажется, все ваши пожелания вот отсюда - проверяйте.

    • Thanks 1
  11. В 06.02.2020 в 20:27, avn сказал:

    Я бы создал отдельную таблицу.

    Вообще, когда я перечитал пожелания @keenet07 чуть выше как раз пришел к такой идее. Но у меня совсем нет скилов в сетях под Linux.

    Но идея были именно такой. 

    Строим таблицу. В настройках таблицы и только в них заложено, что все содержимое этой таблицы должно ходить через определенный интерфейс (WG в нашем случае).

    В кроне очищаем таблицу, и забиваем таблицу пусть даже моим алгоритмом через nslookup.

    Таким образом после выполнения скрипта получаем только актуальный список адресов для маршрутизации их через VPN.

    @avn большое вам спасибо! скорее всего то, что вы написали мне и нужно было. Просто ваши скрипты мне нужно изучить и "переварить" построчно ;)

    В 06.02.2020 в 20:27, avn сказал:

    ip route add table 1000 $cidr via 10.64.0.1 dev nwg1 2>/dev/null

    я так понимаю тут 10.64.0.1 это адрес роутера в туннеле WG?

    В 06.02.2020 в 20:27, avn сказал:

    dig A +short $line @localhost -p 53 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | cut_local | awk '{system("ip route add table 1000 "$1" via 10.64.0.1 dev nwg1 2>/dev/null")}'

    Правильно ли я понимаю, что если у меня в файле только fqdn ресурсов для обхода, то мне нужна только эта строка?

  12. 10 часов назад, Le ecureuil сказал:

    Вообще нужно отметить странную политику расположения полей с tcp_skb_cb в ядре 4.9

    Может сообщить об этом Линусу?

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

    найдено и починено.

    За это Вам больше спасибо!

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

    За этот образцовый багрепорт @KorDen отблагодарим самым новым и крутым устройством, которое появится уже скоро.

    Мои поздравления уважаемому @KorDen

    Приз полностью заслуженный!

    • Upvote 2
  13. В 28.01.2020 в 18:54, Сергей Грищенко сказал:

    Можно ли через ваш скрипт, сделать такую настройку?

    Мой скрипт подойдёт, если у вас есть VPN подключение (OpenVPN или wireguard) и вы хотите пускать через это VPN подключение не весь трафик к заблокированным ресурсам, а только к нужным только вам заблокированным ресурсам.

    Кстати, как вариант проверки работы схемы я добавил адрес 2ip.ua в файл и теперь на 2ip.ru виду свой реальный внешний IP, а на 2ip.ua вижу внешний адрес VPN подключения - значит скрипт работает 

  14. 2 часа назад, Andrey Che сказал:

    Запускаю скрипт, а в ответ приходит: nslookup: can't resolve 'telegra.ph': Temporary failure in name resolution

    И так по каждому адресу, который в списке. Но если просто ввести nslookup telegra.ph - то отрабатывает нормально и выдаёт адрес.

    В чём может быть проблема?

    У себя тоже встречаю такие ошибки время от времени, но чаще скрипт всё же выполняется корректно и без ошибок. Возможно данные ошибки как-то связаны с DNS, о чем в них и написано, собственно. Но в чём именно заключается проблема мне не известно.

  15. 9 часов назад, keenet07 сказал:

    А ваш скрипт добавляет только первый IP адрес для домена или все какие находятся?

    Должен оба адреса добавлять.

    9 часов назад, keenet07 сказал:

    А эти маршруты будут видны в веб-интерфейсе среди Статических или оно как-то параллельно работает?

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

    Как раз когда писал инструкцию раздумывал указать ли про это, видимо нужно было.

    Выглядит вот так:

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

    image.thumb.png.3bad7df2edaa8b5a270106b40eb2a126.png

     

    • Thanks 1
    • Upvote 1
  16. Пишу по мотивам моего поста в курилке, который сейчас уже в архиве, а мог бы быть многим полезен.

    Иногда на форуме и в канале я вижу вопросы по реализации выборочной маршрутизации некоторых ресурсов через поднятый на роутере VPN туннель, такой как OpenVPN или Wireguard.

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

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

    Скрытый текст
    
    #!/bin/sh
    for i in `cat /opt/root/vpnsitelist.txt`; do
            for j in `nslookup $i | egrep -v 127.0.0.1 | awk '/Addr/ {print $3}' | egrep -v ":"`; do
                    EXISTS=`ip route show $j | wc -l`
                    if [ $EXISTS -eq 0 ]
                    then
                            #route add -host $j dev ovpn_br0 #Необходимо раскомментировать, если у вас используется OpenVPN туннель
    			route add -host $j dev nwg0 #Если у вас используется Wireguard туннель (как у меня)
                            logger "Add $j host to static route to unblock $i"
                    fi
                    if [ $EXISTS -eq 1 ]
                    then
                            logger "Host $j is already in static route to unblock $i"
                    fi
            done
    done
    exit 0 

     

    Небольшие комментарии по скрипту.

    /opt/root/vpnsitelist.txt - это обычный текстовый файл, где в каждой строке находится адрес заблокированного ресурса

    127.0.0.1 - это ваш DNS сервер. У меня используется AdGuardDNS в режиме DoT/DoH из прошивки. У вас может быть другой. Узнать какой у вас можно выполнив команда nslookup ya.ru на роутере.

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

    image.png.b186de0ddccf8982d8b666286a3f3f18.png

    ovpn_br0 - имя интерфейса туннеля OpenVPN. У вас может немного отличаться, чтобы посмотреть какой именно у вас воспользуйтесь командой ifconfig 

    nwg0 - имя интерфейса туннеля Wireguard. У вас может немного отличаться, чтобы посмотреть какой именно у вас воспользуйтесь командой ifconfig 

    Для тех у кого OpenVPN скрипт удобно разместить в директории /opt/etc/ndm/openvpn-up.d/ и сделать симлинк в крон

    ln -s /opt/etc/ndm/openvpn-up.d/1-unblock-static-route /opt/etc/cron.hourly/01unblock

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

    У тех у кого Wireguard можно разместить скрипт в /opt/etc/ndm/ifstatechanged.d но тут нужна доработка по отслеживанию поднятия туннеля.

    Дополнения и улучшения скрипта приветствуются.

    • Upvote 9
×
×
  • Create New...