Ответы пользователя по тегу Linux
  • Как передать большой файл по ssh без промежуточного хранения?

    ValdikSS
    @ValdikSS
    tar -cz /home/target | sshpass -p 'pwd' ssh -p 23 username@server.com 'cd /unpack/me/here && tar -zx'
    Ответ написан
    2 комментария
  • Linux. Перенаправление всего трафика между интерфейсами?

    ValdikSS
    @ValdikSS
    ip route add default dev eth1 table 1000
    ip route add ip.диапазон.для.gre dev gre0 table 1000
    ip rule add from ip.диапазон.для.gre lookup 1000
    Ответ написан
    1 комментарий
  • Как пустить трафик на 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.
    Ответ написан
    Комментировать
  • Каким способом настроить маршрутизацию между роутером и 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.
    Ответ написан
    Комментировать
  • Как ускорить 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.
    Ответ написан
    Комментировать
  • Как использовать Tracemalloc для оптимизации использования памяти?

    ValdikSS
    @ValdikSS
    Скорее всего, у вас glibc malloc не отдаёт память.
    Если запуск следующей команды освободит память, то дело точно в этом:
    sudo gdb --batch -ex 'call malloc_trim(0)' --pid PID_OF_PYTHON_PROCESS

    Где PID_OF_PYTHON_PROCESS — pid процесса.

    Решений несколько: от задания MALLOC_ARENA_MAX=2 MALLOC_TRIM_THRESHOLD_=65536 до использования альтернативных аллокаторов, например, jemalloc.
    Ответ написан
  • Как можно в Linux настроить маршрутизацию для доменов 1-ого уровня?

    ValdikSS
    @ValdikSS
    Вам нужен DNS-резолвер, устанавливающий отображение (соответствие, маппинг) настоящего IP-адреса домена в свободный IP-адрес большой внутренней подсети, и отдающий запрашиваемому клиенту адрес из внутренней подсети. Эту сеть маршрутизируйте через нужный вам интерфейс.
    Ответ написан
    2 комментария
  • Как и где легче создать свой шаблонный образ linux?

    ValdikSS
    @ValdikSS
    Подойдёт mkosi, buildah.
    Ответ написан
    Комментировать
  • Как в iptables разрешить только туннельный трафик?

    ValdikSS
    @ValdikSS
    -P INPUT ACCEPT
    -P FORWARD DROP
    -P OUTPUT ACCEPT
    -A FORWARD -i int2 -o tun0 -j ACCEPT
    -A FORWARD -i tun0 -o int2 -j ACCEPT
    -A OUTPUT -o int1 -d ip-адрес-vpn-сервера -j ACCEPT
    -A OUTPUT -o int1 -d 192.168.8.0/24 -j ACCEPT
    -A OUTPUT -o int1 -j DROP


    И аналогичные для IPv6.
    Ответ написан
  • Как настроить блок AllowedIPs в wireguard на ОС: Fedora 40 или Ubuntu 24.04?

    ValdikSS
    @ValdikSS
    Вероятно, необходимо добавить маршрут до 8.8.8.8/32 — DNS-резолвера, указанного в конфигурации.

    В Linux, при использовании systemd-resolved, адрес DNS-резолвера привязывается к интерфейсу, а у вас нет маршрута до него через WireGuard. В Windows запросы выполняются через физический интерфейс (либо через несколько резолверов параллельно)
    Прочитайте про проблему XY и больше не составляйте вопросы настолько размыто.
    Ответ написан
    6 комментариев
  • Как организовать видимость IP адресов VPN-клиентов внутри локальной сети?

    ValdikSS
    @ValdikSS
    То, что вы хотите получить, является стандартным поведением маршрутизации в целом и VPN в частности. Переключение в режим L2 (tap) вам не даст никаких преимуществ и не приблизит к решению проблемы.

    Вероятно, у вас включён source NAT для подсети VPN. Отключите его, правильно настройте маршрутизацию на всех точках, и всё заработает.
    Ответ написан
    1 комментарий
  • Как переадресовть ip vds на ПК?

    ValdikSS
    @ValdikSS
    Такой возможности нет, Outline — это прокси, а не VPN.
    Вам нужен настоящий VPN-протокол: OpenVPN, WireGuard, IPsec, L2TP, IPIP, GRE, …
    Ответ написан
    Комментировать
  • Linux USB HID эмуляция на ПК - возможно?

    ValdikSS
    @ValdikSS
    Чтобы эмулировать устройства, USB-контроллер в вашем компьютере должен поддерживать dual role, т.е. переключаться в OTG-режим. Вот наиболее полная статья, как это сделать на конкретном устройстве, со ссылками на другие.

    В Linux уже есть USB HID-гаджет, достаточно запрограммировать его. Вот первый попавшийся пример в интернете.

    Наиболее универсальный метод — сделать эмулятор на микроконтроллере, эмулирующий клавиатуру с одной стороны и принимающий команды клавиатуры, например, через CDC ACM или HID (чтобы работало без установки драйверов) с другой.
    Ответ написан
    Комментировать
  • Можно ли задать различные права пользователя и java приложения в Linux?

    ValdikSS
    @ValdikSS
    Policykit позволит настроить правила доступа максимально гибко.
    https://wiki.debian.org/PolicyKit

    Грубо говоря, мне нужно сделать так, чтобы при включении ПК автоматически входил пользователь и автоматически запускалось приложение. При этом всё должно быть безопасно, у пользователя должен быть очень ограниченный набор прав и он не должен иметь возможность выполнять команды, которые может выполнять java приложение.
    Возможно, в этом случае вам и вовсе не нужен Desktop Environment? Запускайте своё приложение единственным на весь экран (режим киоска), пользователь будет ограничен только его функциями.
    Ответ написан
    1 комментарий
  • Как заблокировать с помощью iptables все исходящие запросы на сервые подсети?

    ValdikSS
    @ValdikSS
    На уровне маршрутизации:
    ip rule add to 10.0.0.0/8 oif enp0s31f6 prohibit
    ip rule add to 192.168.0.0/16 oif enp0s31f6 prohibit
    ip rule add to 172.16.0.0/12 oif enp0s31f6 prohibit
    Ответ написан
    2 комментария
  • Как создать виртуальную сеть на уровне IP?

    ValdikSS
    @ValdikSS
    QEMU эмулирует компьютер с устройствами. Так как в виртуальной машине эмулируется сетевая карта Ethernet, то и на ответной стороне тоже ожидается что-то с поддержкой Ethernet.

    Подключайте сеть по иному L2-каналу, например, по серийному порту через PPP, а на хосте у вас будет pppd, ожидающий соединение на противоположной части порта. Протокол PPP не туннелирует Ethernet.
    Ответ написан
    Комментировать
  • Как правильно запретить выход на "серые" сети через eth0?

    ValdikSS
    @ValdikSS
    На уровне маршрутизации:
    ip rule add to 10.0.0.0/8 oif enp0s31f6 prohibit
    ip rule add to 192.168.0.0/16 oif enp0s31f6 prohibit
    ip rule add to 172.16.0.0/12 oif enp0s31f6 prohibit
    Ответ написан
    Комментировать