Jump to content

IAmYourBatya

Forum Members
  • Posts

    3
  • Joined

  • Last visited

Posts posted by IAmYourBatya

  1. 7 часов назад, avn сказал:

    Штатно на роутере правила работать не будут из-за hwnat

    Странно. Сделал

    iptables -t mangle -L -nv | grep -i ssredir
    iptables -t nat -L -nv | grep -i ssredir

    Получаю ненулевые результаты, счетчики пакетов меняются. Если вас не затруднит, сможете прояснить? А то гуглёж выдает только скромную статью на сайте кинетика https://help.keenetic.com/hc/ru/articles/214470905-Сетевой-ускоритель. Может, просто не все пакеты будут проходить через эти таблицы? Или правила все-таки не должны срабатывать полностью?

  2. 36 минут назад, avn сказал:

    Штатно на роутере правила работать не будут из-за hwnat

    iptables -w -t mangle -A SSREDIR -p udp -j MARK --set-mark 1
    iptables -w -t mangle -A SSREDIR -p udp -j TPROXY --on-port "${SSREDIR_LOCAL_PORT}" --tproxy-mark 0x01/0x01

    И так же, нужно у приложения ss-redir включить режим tproxy.

    Как я упомянул:

    Цитата

    не разбираюсь в этих ваших компухтерах

    ss-redir запускаю с ключом -u, потому что в инструкции описано как "Enable UDP relay. TPROXY is required in redir mode. You may need root permission". Этого недостаточно?

    Цитата

    Штатно на роутере правила работать не будут из-за hwnat

    Подскажите, пожалуйста, что тогда делать? Только отключать аппаратный сетевой ускоритель?

  3. Привет!

    Расскажу, как я настроил свой аппарат. Исходные данные:

    Keenetic Ultra KN-1810, версия ОС 3.7.4. Домашняя сеть 172.22.0.0/16, через прозрачный прокси будет ходить диапазон 172.22.12.0/24. Настройки сделаны намеренно таким образом, чтобы при обрыве связи в туннеле или остановке демона устройства не ходили в интернет через основной канал. Все можете настроить под себя.

    1. Установить необходимые пакеты:

    # opkg install shadowsocks-libev-ss-redir iptables ipset bind-dig kmod

    2. Создать файл /opt/etc/config/ssredir.conf с содержимым:

    SS_SERVER_HOST="ИМЯ_СЕРВЕРА"
    SS_SERVER_IP=`/opt/bin/dig +short $SS_SERVER_HOST | tail -1`
    SS_SERVER_PORT=ПОРТ_СЕРВЕРА
    SS_SERVER_PASSWORD="ПАРОЛЬ"
    SS_SERVER_METHOD="АЛГОРИТМ_ШИФРОВАНИЯ"
    SOURCE_NETWORK="172.22.12.0/24" # ЗДЕСЬ УКАЖИТЕ ТО, ЧТО АКТУАЛЬНО ДЛЯ ВАС
    PIDFILE="/opt/var/run/ss-redir.pid"
    SSREDIR="/opt/bin/ss-redir"
    SSREDIR_CONFIG="/opt/etc/shadowsocks.json"
    SSREDIR_LOCAL_ADDRESS="0.0.0.0"
    SSREDIR_LOCAL_PORT="10800"
    SSREDIR_TIMEOUT=300

    3. Создать и сделать исполняемым файл /opt/etc/init.d/S100ssredir:

    #!/bin/sh
    
    PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin
    
    . /opt/etc/config/ssredir.conf
    
    write_config()
    {
            echo "{">"${SSREDIR_CONFIG}"
            echo "\"server\": [\"${SS_SERVER_IP}\"],">>"${SSREDIR_CONFIG}"
            echo "\"server_port\": ${SS_SERVER_PORT},">>"${SSREDIR_CONFIG}"
            echo "\"password\": \"${SS_SERVER_PASSWORD}\",">>"${SSREDIR_CONFIG}"
            echo "\"method\": \"${SS_SERVER_METHOD}\",">>"${SSREDIR_CONFIG}"
            echo "\"mode\": \"tcp_and_udp\",">>"${SSREDIR_CONFIG}"
            echo "\"local_address\": \"${SSREDIR_LOCAL_ADDRESS}\",">>"${SSREDIR_CONFIG}"
            echo "\"local_port\": \"${SSREDIR_LOCAL_PORT}\",">>"${SSREDIR_CONFIG}"
            echo "\"timeout\": \"${SSREDIR_TIMEOUT}\",">>"${SSREDIR_CONFIG}"
            echo "}">>"${SSREDIR_CONFIG}"
    }
    
    ssredir_status ()
    {
            [ -f $PIDFILE ] && [ -d /proc/`cat $PIDFILE` ]
    }
    
    start()
    {
            $SSREDIR -u -c "${SSREDIR_CONFIG}" -f "${PIDFILE}"
    }
    
    stop()
    {
            kill `cat $PIDFILE`
    }
    
    case "$1" in
            start)
                    if ssredir_status
                    then
                            echo ss-redir already running
                    else
                            write_config
                            start
                    fi
                    ;;
            stop)
                    if ssredir_status
                    then
                            stop
                    else
                            echo ss-redir is not running
                    fi
                    ;;
            status)
                    if ssredir_status
                    then
                            echo ss-redir already running with pid `cat $PIDFILE`
                    else
                            echo ss-redir is not running
                    fi
                    ;;
    
            restart)
                    stop
                    sleep 3
                    start
                    ;;
            *)
                    echo "Usage: $0 {start|stop|restart|status}"
                    ;;
    esac

    4. Создать и сделать исполняемым файл /opt/etc/ndm/fs.d/100-ssredir.sh:

    #!/bin/sh
    
    [ "$1" != "start" ] && exit 0
    
    . /opt/etc/config/ssredir.conf
    
    BYPASS_RESERVED_IPS="${SS_SERVER_IP} \
    0.0.0.0/8 \
    10.0.0.0/8 \
    127.0.0.0/8 \
    169.254.0.0/16 \
    172.16.0.0/12 \
    192.168.0.0/16 \
    224.0.0.0/4 \
    240.0.0.0/4 \
    "
    
    ipset create ss_bypass_set hash:net >/dev/null 2>&1
    ipset flush ss_bypass_set
    for line in $BYPASS_RESERVED_IPS; do
        ipset add ss_bypass_set $line
    done
    
    if [ -z "$(ip route list table 100)" ]; then
        ip route add local default dev lo table 100
        ip rule add fwmark 1 lookup 100
    fi
    
    exit 0

    5. Создать и сделать исполняемым файл /opt/etc/ndm/netfilter.d/100-ssredir.sh:

    #!/bin/sh
    
    [ "$type" == "ip6tables" ] && exit 0
    [ $(iptables-save | grep :SSREDIR | wc -l) -eq 2 ] && exit 0
    
    insmod /lib/modules/$(uname -r)/xt_TPROXY.ko
    
    iptables -w -t nat -N SSREDIR
    iptables -w -t mangle -N SSREDIR
    
    exit 0

    6. Создать и сделать исполняемым файл /opt/etc/ndm/netfilter.d/101-ssredir.sh:

    #!/bin/sh
    
    [ "$type" == "ip6tables" ] && exit 0
    [ "$table" != "nat" ] && exit 0
    [ ! -z "$(iptables-save | grep tcp | grep ss_bypass_set)" ] && exit 0
    
    . /opt/etc/config/ssredir.conf
    
    iptables -w -t nat -A SSREDIR -p tcp -m set --match-set ss_bypass_set dst -j RETURN
    iptables -w -t nat -A SSREDIR -p tcp -j REDIRECT --to-ports "${SSREDIR_LOCAL_PORT}"
    iptables -w -t nat -A PREROUTING -s "${SOURCE_NETWORK}" -p tcp -j SSREDIR
    
    exit 0

    7. Создать и сделать исполняемым файл /opt/etc/ndm/netfilter.d/102-ssredir.sh:

    #!/bin/sh
    
    [ "$type" == "ip6tables" ] && exit 0
    [ "$table" != "mangle" ] && exit 0
    [ ! -z "$(iptables-save | grep udp | grep ss_bypass_set)" ] && exit 0
    
    . /opt/etc/config/ssredir.conf
    
    iptables -w -t mangle -A SSREDIR -p udp -m set --match-set ss_bypass_set dst -j RETURN
    iptables -w -t mangle -A SSREDIR -p udp -j TPROXY --on-port "${SSREDIR_LOCAL_PORT}" --tproxy-mark 0x01/0x01
    iptables -w -t mangle -A SSREDIR -p udp -j MARK --set-mark 1
    iptables -w -t mangle -A PREROUTING -s "${SOURCE_NETWORK}" -p udp -j SSREDIR
    
    exit 0

    Ужасно не нравится метод генерации конфига json, но более красивого способа не знаю, потому что не разбираюсь в этих ваших компухтерах. Еще пересборку ipset'а BYPASS_RESERVED_IPS можно было бы добавить не к инициализации внешних устройств, а привязать в старту и остановке демона в init.d, но мне и так нормально.

×
×
  • Create New...