Теперь выглядит так, что вы пытаетесь 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 (остальные аналогично)
Хранение изображений в БД обычно считается антипаттерном по ряду причин:
реляционные базы данных (такие как MS SQL) прежде всего работают в рамках транзакционной модели управления данными - вовлечение BLOB-ов в такую модель снижает её эффективность
доставка изображений на фронтенд из БД всегда накладнее, чем доставка из файловых хранилищ
доставку изображений на фронтенд сложнее масштабировать (нет возможности использовать CDN)
если вам критически важны ваши данные и ваш MS SQL работает в режиме восстановления Full, то все ваши изображения попадут в транзакционный журнал - его размер будет стремительно расти и расходы на его обслуживание возрастут кратно
изображения стремительно увеличивают размер БД, что приводит к деградации производительности
Если использовать список отдельных IP адресов, то помимо максимального количества элементов, правильно будет поменять hash:net на hash:ip, а в настройках файрвола option match dest_net на option match dest_ip.
Я бы ещё предложил улучшение на основании комментариев выше. Чтобы файрволл не рестартовался по крону и не рвал все соединения (пусть даже на 2 секунды) — лучше в кроне прописать не начальный скрипт hirkn, а другой скрипт «мягкой замены» списков. Например, такой:
Если при объявлении 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
Геральт из Ривии с вами не согласен
Теперь выглядит так, что вы пытаетесь 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, то все ваши изображения попадут в транзакционный журнал - его размер будет стремительно расти и расходы на его обслуживание возрастут кратно
изображения стремительно увеличивают размер БД, что приводит к деградации производительности
hash:net
наhash:ip
, а в настройках файрволаoption match dest_net
наoption match dest_ip
.option match 'src_net'
, аoption match 'dest_net'
, то как раз будет dst.На самом деле я на своём роутере уже настроил вашу схему используя конфиги UCI, без изменения в /etc/firewall.user. Вот фрагмент:
Я делал нечто подобное вот так:
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'
Здесь также нельзя?