Ответы пользователя по тегу OpenWrt
  • Как пустить трафик на 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.
    Ответ написан
    Комментировать
  • Поключение через 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 комментария
  • Как запретить устройству обьявлять себя шлюзом?

    ValdikSS
    @ValdikSS
    Настройте DHCP-сервер (в OpenWrt это dnsmasq по умолчанию), чтобы он не отдавал опцию 3 (Router).
    Ответ написан
    1 комментарий
  • Как сделать виртуальный не управляемый свитч в OpenWRT?

    ValdikSS
    @ValdikSS
    Например, с помощью интерфейсов macvlan.
    https://developers.redhat.com/blog/2018/10/22/intr...
    Ответ написан
    Комментировать
  • Как настроить роутер на openwrt с клиентом openvpn так, чтобы весь трафик был завернут в впн, а без него интернет бы не работал?

    ValdikSS
    @ValdikSS
    Заведите VPN-соединение в отдельную зону, а у зоны WAN (физическое подключение) отключите возможность маршрутизации из LAN в WAN.
    Ответ написан
    Комментировать
  • Как ограничить трафик WIFI клиентам на OpenWRT роутере?

    ValdikSS
    @ValdikSS
    Установите систему captive portal, вроде coovachilli.
    Ответ написан
    Комментировать
  • Агрегация lan на openwrt, возможна ли?

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

    https://forum.openwrt.org/t/best-way-to-configure-...
    Ответ написан
  • Фильтрация соединений в мосту на openwrt?

    ValdikSS
    @ValdikSS
    modprobe br_netfilter
    Ответ написан
    Комментировать
  • Как сделать маршрутизацию локального устройства на VPN?

    ValdikSS
    @ValdikSS
    Опция route в клиентском конфигурационном файле.
    Пример: route 8.8.8.8 255.255.255.255
    Ответ написан
  • Как настроить Strongswan (или другой встроенный в Винду VPN) на OpenWRT без сертификатов по паролю с Винды?

    ValdikSS
    @ValdikSS
    Windows полноценно, без дополнительных настроек, поддерживает только аутентификацию сервера по сертификату из списка публичных центров сертификации. Сертификат может быть бесплатным, например, вполне подойдёт Let's Encrypt или вовсе ZeroSSL, который можно выписать на IP-адрес, а не домен.

    Аутентификация клиента может быть по логину и паролю (EAP-MSCHAPv2), как вы и хотите.

    Настройка производилась на Ubuntu 20.04
    Установка: apt install strongswan libcharon-extra-plugins

    Получить сертификат на IP-адрес в ZeroSSL, поместить certificate.crt в /etc/ipsec.d/certs/server.crt, private.key в /etc/ipsec.d/private/server.key, ca_bundle.crt в /etc/ipsec.d/cacerts/ca_bundle.crt

    Содержимое /etc/ipsec.conf
    conn %default
    	dpdaction=clear
    	dpddelay=35s
    	dpdtimeout=300s
    
    	fragmentation=yes
    	rekey=no
    
    	ike=aes128gcm16-aes256gcm16-sha1-sha256-sha384-modp1024,3des-aes128-aes192-aes256-sha1-sha256-sha384-modp1024,aes256-sha1-sha256-sha384-modp2048
    
    	# left - local (server) side
    	left=%any
    	leftauth=pubkey
    	leftcert=server.crt
    	leftsendcert=always
    	leftsubnet=0.0.0.0/0
    
    	# right - remote (client) side
    	right=%any
    	rightauth=pubkey
    	rightsourceip=192.168.155.0/24
    	rightdns=8.8.8.8
    
    conn ikev2-eap-mschapv2
    	keyexchange=ikev2
    	rightauth=eap-mschapv2
    	eap_identity=%any
    	auto=add


    Содержимое /etc/ipsec.secrets:
    : RSA server.key
    user1 : EAP "password1"


    Остаётся только настроить маршрутизацию и NAT.
    В Windows нужно настроить подключение IPsec IKEv2 на этот IP-адрес, с именем user1 и паролем password1.
    Ответ написан
    2 комментария
  • Как получить доступ по ssh к openwrt роутеру подключенному в режиме клиента wifi?

    ValdikSS
    @ValdikSS
    Если я правильно понял, у вас есть основной роутер, раздающий интернет, и роутер с OpenWRT, не выполняющий никакой дополнительной функции на данный момент.

    Измените логику настроек в OpenWRT так, чтобы WAN-зоны не было вовсе, а была одна большая LAN. VLAN у WAN-порта тоже заведите в LAN. У LAN отключите DHCP, назначьте статический адрес. Такой настройкой у вас OpenWRT будет выступать свитчом.
    Ответ написан
    Комментировать
  • Как перенаправлять трафик в зависимости от сайта в openwrt?

    ValdikSS
    @ValdikSS
    Если у вас подобных сайтов немного, и они никогда не меняют IP-адреса (или делают это очень редко), можно прописать их в качестве статичных маршрутов через tun0.
    Если доменов много, они периодически меняют IP-адреса, то один из вариантов — маршрутизация «по доменному имени». Это можно реализовать с помощью опции ipset в dnsmasq и маршрутизации адресов внутри ip set. Альтернативный вариант — сделать подобное на стороне сервера, по принципу VPN АнтиЗапрета — маршрутизировать в VPN только одну подсеть, а на серверной стороне устанавливать маппинг адреса в эту подсеть для определенных доменов.
    Ответ написан
    Комментировать