Задать вопрос
  • Как пустить трафик на instagram.com в туннель, имея openwrt-роутер?

    ValdikSS
    @ValdikSS
    В общем случае средствами лишь маршрутизации — никак. Это технически возможно, но никто этого еще не сделал (и я расстраиваюсь этому факту не первый год!).

    Выходов несколько:
    1. Добавлять IP-адреса доменов в момент резолва в лист маршрутизации VPN
    Необходимо настроить DNS-сервер так, чтобы в момент запроса поддомена необходимых доменов (например, *.instagram.com) полученные IP-адреса добавлялись в список маршрутизации через VPN.
    Это можно сделать, например, с помощью dnsmasq ipset.
    Необходимо настроить маршрутизацию по списку ipset, а dnsmasq будет добавлять новые адреса, которые запрашивает пользователь, в этот список.

    Недостаток способа заключается в необходимости использовать только DNS на роутере (DNS-over-HTTPS или любой сторонний резолвер не подойдёт — IP-адреса не будут добавляться в ipset и маршрутизации в VPN не будет), а также в том, что любой добавленный IP-адрес будет маршрутизирован в VPN: если два домена используют один и тот же IP-адрес, разделить их маршрутизацию не получится, оба будут маршрутизироваться через VPN.

    В OpenWrt настраивается с помощью пакета pbr. Он не поддерживает регулярные выражения, как вы заметили, но они и не нужны: просто напишите любой домен, и словно это зона, все поддомены домена будут маршрутизированы в VPN. По-моему, pbr даже по-другому и не работает (нельзя маршрутизировать конкретный домен без его поддоменов).
    Пример с доменами Netflix. Обнаружить все домены Instagram можно с помощью F12 - Network в браузере.

    2. Обнаруживать домены в трафике, перемаршрутизировать через список маршрутизации VPN позже
    Вариация первого метода с модулями вроде xt_tls, позволяющим обнаружить обращение к определённому домену из TLS-трафика, чтобы также добавить IP-адрес в ipset для маршрутизации в VPN.

    Преимущество в том, что клиент может использовать любой DNS-сервер. Недостаток в том, что первый раз соединение всегда либо зависнет, либо разорвётся, и только второе и последующие заработают через VPN.
    Вот здесь можно почитать, почему так происходит.

    В OpenWrt модуль отсутствует.

    3. Терминировать трафик на «умный» прокси-сервер, который поддерживает маршрутизацию по доменам
    Весь TCP/UDP-трафик перенаправляется на локальный прокси-сервер, способный выявлять домены прямо из трафика и маршрутизировать их в зависимости от правил. Примеры подобных прокси: v2fly, xray, sing-box, и др. (все есть в OpenWrt).

    Недостаток метода в том, что весь трафик будет обрабатываться userspace-программой: на низкопроизводительных роутерах это может привести к серьезному замедлению, некоторые VoIP-программы не будут звонить (из-за несовпадения UDP-порта, который создала программа, и UDP-порта, который использует прокси), и поддерживаются только UDP и TCP, другие протоколы (ICMP, GRE, IPIP, что угодно) через такой прокси работать не будут.
    Преимущество в лёгкой настройке и довольно стабильной работе.

    Алгоритм определения доменов, необходимых для маршрутизации, не отличается от описанного в #1.
    Ответ написан
    Комментировать
  • Как настроить проброс ARP пакетов (ARP-proxy) через OpenVPN туннель Mikrotik-Mikrotik?

    ValdikSS
    @ValdikSS
    Вы уверены, что приложение работает именно так?
    Обнаружение в приложении может выполняться либо каким-то собственным протоколом по Broadcast/multicast, либо стандартными, вроде mDNS/DNS-SD, через Multicast.
    ARP вряд ли получится использовать именно для обнаружения, если это, конечно, не единичное особое устройство, где производитель заранее знает MAC-адрес.

    OpenVPN tun тунеллирует только L3-трафик, поэтому не сможет маршрутизировать Ethernet ARP-пакеты (и любой другой Ethernet/L2 и IP broadcast-трафик). Для этого вам нужен туннель с поддержкой L2 — OpenVPN tap, как один из возможных.

    Если речь об обычном смарт-ТВ и стандартных протоколах, то, скорее всего, речь всё-таки о multicast. Его поддерживает OpenVPN tun, нужно настраивать маршрутизацию мультикаст-трафика уже средствами самого роутера.
    Некоторые программы могут намеренно устанавливать TTL=1 в пакетах, чтобы трафик не маршрутизировался в другие сети — вам необходимо увеличивать TTL у таких пакетов.

    Более подробно понять принцип работы программы можно из дампов трафика. Они также помогут диагностировать проблемы с его прохождением через VPN.
    Ответ написан
    2 комментария
  • Какой ближайший хоп у России с европейской страной?

    ValdikSS
    @ValdikSS
    Всё зависит от вашего местоположения, от связности вашего провайдера, от ширины его каналов, от стыков, на каких присутствуют интересующие вас провайдеры.

    Я обычно делаю так:
    • Заходим на https://looking.house/points.php, ищем наиболее географически близкие страны/города
    • Пингуем тестовые адреса интересующих провайдеров, смотрим трассировку
    • Смотрим трассировку с серверов на свой IP-адрес
    • Берём сервер, где ниже пинги и шире каналы
    Ответ написан
    Комментировать
  • Как выкинуть VPN-сеть гостевой ОС наружу?

    ValdikSS
    @ValdikSS
    1. Сделайте внутреннюю сеть в виртуальной машине, для связи между хостом и ВМ
    2. Сделайте еще один сетевой интерфейс в виртуальной машине: bridge с физическим сетевым интерфейсом, через который у вас работает интернет
    3. Настройте ВМ маршрутизатором (маршрутизация трафика между интерфейсом хост-ВМ и VPN)
    4. На хосте впишите IP-адрес ВМ через интерфейс хост-ВМ в качестве шлюза, а физический интерфейс с интернетом отключите
    Ответ написан
    Комментировать
  • Каким способом настроить маршрутизацию между роутером и orange pi?

    ValdikSS
    @ValdikSS
    https://habr.com/ru/articles/835602/comments/#comm...
    s_lhf2ugh0cvnna8kkxrcbz-8e8.png
    (Wi-Fi-роутер это Orange Pi)
    1. Подключить Orange Pi кабелем в существующую локальную сеть
    2. Включить маршрутизацию на Orange Pi (sysctl net.ipv4.ip_forward=1)
    3. Убедиться, что в iptables нет запрещающих маршрутизацию правил
    4. Установить zapret nfqws и настроить на обработку маршрутизируемого трафика (если будете использовать nftables — см. баг)
    5. Прописать настройки сети в Orange Pi статически, установить IP-адрес Orange Pi в качестве шлюза на конечных устройствах. Такая опция есть на любом устройстве, даже на телевизоре. В общем случае достаточно прописать DHCP option 3 на роутере, тогда изменять вручную шлюзы не потребуется.
    Всё. Не надо ни физически ничего переподключать, ни поднимать дополнительную сеть Wi-Fi.

    OpenWrt пробовал, очень мало памяти и ничего не поставить.
    У вашего роутера 16 МБ памяти, её хватит на всё с большим запасом. Вам не нужно отдельное устройство в виде Orange Pi.
    Ответ написан
    Комментировать
  • Как получить доступ с OpenVPN сервера к локальной сети клиента?

    ValdikSS
    @ValdikSS
    Многопользовательские L3-туннели (в т.ч. OpenVPN TUN, WireGuard) не позволяют указывать IP-адрес, через который происходит маршрутизация (ip route … via 10.9.0.2) — эта опция требует L2-связности. Вам нужно настроить внутреннюю маршрутизацию OpenVPN.

    В конфигурационный файл на сервере добавить:
    client-config-dir ccd
    route 192.168.1.0 255.255.255.0

    Создать файл ccd/имя_клиента с содержимым:
    iroute 192.168.1.0 255.255.255.0

    И добавить маршруты на устройствах сети 192.168.1.0/24 через VPN при необходимости (в вашем случае не нужно).
    Ответ написан
    1 комментарий
  • Поключение через L2tp к провайдеру?

    ValdikSS
    @ValdikSS
    L2TP используется в случаях, когда сетевая инфраструктура арендуется несколькими провайдерами, или же такая примитивная, что не позволяет надёжно аутентифицировать и авторизовать клиента штатными методами среды (либо их просто нет).

    В протоколе нет шифрования, для шифрования L2TP-подключение устанавливают внутри IPsec-сессии. Если провайдер не предоставляет L2TP+IPsec, то вы по нему не подключитесь.
    Ответ написан
    3 комментария
  • Как ускорить YouTube на OpenWRT?

    ValdikSS
    @ValdikSS
    Я установил на роутер zapret nfqws, не используя стандартные скрипты из поставки. Конфигурация такая, какая описана вот в этом баге:

    https://github.com/bol-van/zapret/discussions/262

    Взял бинарник из репозитория, написал простейший init-скрипт (/etc/init.d/nfqws) для openwrt с вшитыми параметрами, написал свои правила firewall’а. Оригинальные тоже хорошие (и обрабатывают разные конфигурации), но вот эти банально проще.

    # cat /etc/init.d/nfqws 
    #!/bin/sh /etc/rc.common
    
    USE_PROCD=1
    START=91
    
    PROG=/etc/zapret/nfqws/nfqws
    
    start_service() {
      procd_open_instance
      procd_set_param command "$PROG"
      procd_append_param command --dpi-desync=fake
      procd_append_param command --dpi-desync-fooling=md5sig,badseq
      procd_append_param command --dpi-desync-split-pos=1
      procd_append_param command --dpi-desync-repeats=12
      procd_append_param command --dpi-desync-ttl=4
      procd_append_param command --qnum=200
      procd_append_param command --hostlist=/etc/zapret/nfqws/youtube.txt
    #  procd_append_param command --hostlist=/tmp/domains-export.txt
      procd_set_param stdout 1 # forward stdout of the command to logd
      procd_set_param stderr 1 # same for stderr
      procd_close_instance
    }


    С моими правилами файрволла (connbytes) в nfqws копируются только первые 8 пакетов, а дальше всё маршрутизируется как обычно. /etc/zapret/zapret.nft:

    chain zapret_lan_hook {
        type filter hook forward priority mangle;
    
    #    iifname {"br-lan"} \
          ip daddr != {0.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 100.64.0.0/10, 169.254.0.0/16, 224.0.0.0/3, 255.255.255.255/32} \
          tcp dport {80, 443} ct original packets lt 8 counter queue flags bypass to 200 comment "zapret IPv4 443 tcp"
    
    #    iifname {"br-lan"} \
          ip6 daddr != {::ffff:0:0/96, fc00::/7, fe80::/10, ff00::/8} \
          tcp dport {80, 443} ct original packets lt 8 counter queue flags bypass to 200 comment "zapret IPv6 443 tcp"
    
    #    iifname {"br-lan"} \
          ip daddr != {0.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 100.64.0.0/10, 169.254.0.0/16, 224.0.0.0/3, 255.255.255.255/32} \
          udp dport 443 ct original packets lt 8 counter queue flags bypass to 200 comment "zapret IPv4 443 udp"
    
    #    iifname {"br-lan"} \
          ip6 daddr != {::ffff:0:0/96, fc00::/7, fe80::/10, ff00::/8} \
          udp dport 443 ct original packets lt 8 counter queue flags bypass to 200 comment "zapret IPv6 443 udp"
    }


    Нужно заinclude’ить скрипт в настройках firewall’а. /etc/config/firewall:

    config include 'zapret'
    	option type 'nftables'
    	option path '/etc/zapret/zapret.nft'
    	option position 'table-post'
    	option enabled '1'


    Необходимо отключить offloading, с ним, скорее всего, работать не будет (но я не проверял, оригинальные правила учитывают этот момент).

    В таком виде всё установить можно на ЛЮБОЙ роутер, даже на 4/32, при большом желании (скриптом скачивания бинарника в оперативную память, при необходимости).

    /etc/zapret/nfqws/youtube.txt:

    youtube.com
    youtu.be
    googlevideo.com
    googleapis.com
    gvt1.com
    ggpht.com
    ytimg.com
    youtube-nocookie.com
    play.google.com
    video.google.com
    youtube-ui.l.google.com
    youtubeeducation.com
    youtubekids.com
    Ответ написан
    2 комментария
  • Как заставить proxmox работать по wi-fi?

    ValdikSS
    @ValdikSS
    Вы хотите подключиться с Proxmox к существующей сети Wi-Fi и маршрутизировать трафик в виртуальные машины?
    Так, в общем случае, не получится — Wi-Fi это не Ethernet, его нельзя объединить в мост с Ethernet-адаптерами.
    Ответ написан
  • Какие есть лёгкие init системы и как их добавлять?

    ValdikSS
    @ValdikSS
    Вам нужно либо запускать getty или аналог в качестве сервиса openrc, либо в вашем init-скрипте запускать openrc-демон последним, с помощью exec

    exec [-cl] [-a name] [command [arguments]]
        If command is specified, it replaces the shell.  No new process  is  created.   The
        arguments become the arguments to command.  If the -l option is supplied, the shell
        places a dash at the beginning of the zeroth argument passed to command.   This  is
        what  login(1)  does.   The  -c  option causes command to be executed with an empty
        environment.  If -a is supplied, the shell passes name as the  zeroth  argument  to
        the  executed  command.   If  command  cannot  be  executed for some reason, a non-
        interactive shell exits, unless the execfail shell  option  is  enabled.   In  that
        case,  it returns failure.  An interactive shell returns failure if the file cannot
        be executed.  If command is not specified, any  redirections  take  effect  in  the
        current  shell,  and  the return status is 0.  If there is a redirection error, the
        return status is 1.
    Ответ написан
    Комментировать
  • Завернуть траффик с роутера на ПК через GDPI?

    ValdikSS
    @ValdikSS
    GoodbyeDPI не поддерживает маршрутизируемый трафик.
    Самое простое — настроить zapret на самом роутере, либо же установить виртуальную машину с линукс-роутером и настроить на ней.
    Ответ написан
    2 комментария
  • Какой роутер выбрать для настройки прокси?

    ValdikSS
    @ValdikSS
    Принципиально с поддержкой альтернативных прошивок, вроде OpenWrt, DD-WRT, Tomato, или с прошивкой с широкими возможностями, вроде Keenetic.
    https://openwrt.org/toh/views/toh_available_16128
    Ответ написан
  • Как пробросить VPN через точку доступа?

    ValdikSS
    @ValdikSS
    Ответ написан
    Комментировать
  • Анонимность при использовании WireGuard VPN, видит ли мои действия человек, давший конфиг?

    ValdikSS
    @ValdikSS
    Владелец VPN-сервера может видеть всё то же, что видит провайдер без использования VPN: на какие сайты заходите, какими программами пользуетесь, и т.п.
    Ответ написан
    1 комментарий
  • Как обновить Exim4 в Ubuntu 22 LTS?

    ValdikSS
    @ValdikSS
    Примерная инструкция:

    Скачайте исходник пакета:
    apt source exim4

    Установите зависимости для сборки:
    apt build-dep exim4

    Скачайте патчи из debian:
    https://sources.debian.org/data/main/e/exim4/4.96-15%2Bdeb12u5/debian/patches/78_01-Fix-MIME-parsing-of-filenames-specified-using-multip.patch
    https://sources.debian.org/data/main/e/exim4/4.96-15%2Bdeb12u5/debian/patches/78_02-MIME-support-RFC-2331-for-name-.-Bug-3099.patch


    Импортируйте в пакет:
    export QUILT_PATCHES=debian/patches
    export QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index" 
    quilt import 78_01-Fix-MIME-parsing-of-filenames-specified-using-multip.patch
    quilt import 78_02-MIME-support-RFC-2331-for-name-.-Bug-3099.patch
    quilt push -a


    И соберите
    dpkg-buildpackage -nc -Jauto
    Ответ написан
    1 комментарий
  • Как связать несколько локальных сетей через WireGuard на ubuntu?

    ValdikSS
    @ValdikSS
    Многопользовательские L3-туннели (в т.ч. OpenVPN TUN, WireGuard) не позволяют указывать IP-адрес, через который происходит маршрутизация (ip route … via 10.8.0.4) — эта опция требует L2-связности.
    Используйте директиву AllowedIPs в WireGuard, она настроит и внутреннюю машрутизацию, и маршрутизацию ОС, и внутренний фильтр source IP.
    Ответ написан
    Комментировать
  • Как продебажить доступ к сайту компании через их VPN?

    ValdikSS
    @ValdikSS
    Проблема заключается в непрохождении пакетов ICMP.
    shouldiblockicmp.com
    Ответ написан
    Комментировать
  • Возможно ли ухудшение скорости Youtube только на телевизорах?

    ValdikSS
    @ValdikSS
    Кто может понимает что происходит?
    YouTube замедляется на оборудовании ТСПУ. https://zona.media/news/2024/07/12/youtube
    На ТВ оно сильное, скорее всего, из-за отсутствия поддержки протокола QUIC — его замедляют меньше.
    Ответ написан
    1 комментарий
  • Как при сборке дебки или при ее обновлении, указать файлы конфигурации?

    ValdikSS
    @ValdikSS
    Файлы в /etc/ помечаются conffiles автоматически при сборке пакета.

    dh_installdeb(1) automatically flags any files under the /etc directory as conffiles, so if your program only has conffiles there you do not need to specify them in this file. For most package types, the only place conffiles should ever be is under /etc, and so this file doesn't need to exist.
    https://www.debian.org/doc/manuals/maint-guide/dot...

    Если вам нужно добавить дополнительные файлы как conffiles, это решается внесением путей в debian/conffiles или debian/<packagename>.conffiles, в зависимости от версии системы сборки.
    Ответ написан
    Комментировать
  • Git как востановить файлы?

    ValdikSS
    @ValdikSS
    что я делаю не так я не понимаю
    Вы работаете без branch'а, просто во временной ветке (detached head), и коммитите в неё же. Как только вы переключаетесь на другой бранч, Git вам пишет сообщение, что следует бы сохранить изменения в какое-то более надёжное место.

    Изменения не пропали, они просто не видны. Вы можете достать ваш коммит в текущую ветку по его хешу:
    git cherry-pick 53d05bd
    Ответ написан