Pull to refresh
2
0
Send message

Геральт из Ривии с вами не согласен

Теперь выглядит так, что вы пытаетесь ipset-у скормить HTML-страницу вместо списка IP-адресов. Прошёлся по урлам из вашего скрипта. Первые два нормально отдают файлы со списками адресов, а вот третий возвращает HTTP 404 и соответствующую страницу. Похоже, в этом дело.

Что касается "Hash is full, cannot add more elements" - нужно в скрипте указать максимальный размер списка. То есть вместо ipset create vpn_subnets_tmp hash:net прописать ipset create vpn_subnets_tmp hash:net maxelem 262144 (остальные аналогично)

Выглядит так, как будто у вас в системе отсутствует ipset.

Попробуйте `opkg install ipset`

Посмотреть бы на ваш скрипт, который получился в итоге.

Хранение изображений в БД обычно считается антипаттерном по ряду причин:

  • реляционные базы данных (такие как MS SQL) прежде всего работают в рамках транзакционной модели управления данными - вовлечение BLOB-ов в такую модель снижает её эффективность

  • доставка изображений на фронтенд из БД всегда накладнее, чем доставка из файловых хранилищ

  • доставку изображений на фронтенд сложнее масштабировать (нет возможности использовать CDN)

  • если вам критически важны ваши данные и ваш MS SQL работает в режиме восстановления Full, то все ваши изображения попадут в транзакционный журнал - его размер будет стремительно расти и расходы на его обслуживание возрастут кратно

  • изображения стремительно увеличивают размер БД, что приводит к деградации производительности

А ещё есть библиотека CFFI. Она умеет не только в Windows, но и в Linux/Mac.
Если использовать список отдельных IP адресов, то помимо максимального количества элементов, правильно будет поменять hash:net на hash:ip, а в настройках файрвола option match dest_net на option match dest_ip.
Я бы ещё предложил улучшение на основании комментариев выше. Чтобы файрволл не рестартовался по крону и не рвал все соединения (пусть даже на 2 секунды) — лучше в кроне прописать не начальный скрипт hirkn, а другой скрипт «мягкой замены» списков. Например, такой:
/etc/hirkn_renew.sh
#!/bin/sh

dir=/tmp/lst
mkdir -p $dir

echo "Run download lists"
curl -z $dir/subnet.lst https://antifilter.download/list/subnet.lst --output $dir/subnet.lst
curl -z $dir/ipsum.lst https://antifilter.download/list/ipsum.lst --output $dir/ipsum.lst

echo "Create temporary sets"
ipset destroy -q vpn_subnets_tmp || true
ipset destroy -q vpn_ipsum_tmp || true
ipset create vpn_subnets_tmp hash:net
ipset create vpn_ipsum_tmp hash:net

echo "Fill temporary sets"
cat $dir/subnet.lst | xargs -n1 ipset add vpn_subnets_tmp
cat $dir/ipsum.lst | xargs -n1 ipset add vpn_ipsum_tmp

echo "Swap with real sets"
ipset swap vpn_subnets_tmp vpn_subnets
ipset swap vpn_ipsum_tmp vpn_ipsum
ipset destroy vpn_subnets_tmp
ipset destroy vpn_ipsum_tmp

Если при объявлении ipset в конфиге UCI firewall указать не option match 'src_net', а option match 'dest_net', то как раз будет dst.

На самом деле я на своём роутере уже настроил вашу схему используя конфиги UCI, без изменения в /etc/firewall.user. Вот фрагмент:
Фрагмент /etc/config/firewall
config ipset
        option name             'vpn_subnets'
        option match            dest_net
        option family           ipv4
        option storage          hash
        option loadfile         '/tmp/lst/subnet.lst'

config ipset
        option name             'vpn_ipsum'
        option match            dest_net
        option family           ipv4
        option storage          hash
        option loadfile         '/tmp/lst/ipsum.lst'

config rule
        option name             Mark-VPN-Subnets
        option src              lan
        option proto            all
        option ipset            'vpn_subnets'
        option set_xmark        '0x1'
        option family           ipv4
        option target           MARK

config rule
        option name             Mark-VPN-IP-Sum
        option src              lan
        option proto            all
        option ipset            'vpn_ipsum'
        option set_xmark        '0x1'
        option family           ipv4
        option target           MARK

Спасибо автору за отличную статью! У меня вопрос\уточнение по поводу
Добавим два правила маркировки пакетов, они не вписываются в синтаксис UCI openwrt, поэтому добавляем их «как есть» в /etc/firewall.user.

Я делал нечто подобное вот так:
firewall config fragment
config ipset
option external 'VPN-Whitelist'
option match 'dest_ip'
option family 'ipv4'
option storage 'hash'

config rule
option name 'Mark-Whitelist-Packets'
option src 'lan'
option proto 'all'
option ipset 'VPN-Whitelist'
option set_mark '0x99'
option family 'ipv4'
option target 'MARK'


Здесь также нельзя?

Information

Rating
Does not participate
Registered
Activity