Wi-CAT LLC

Wireless Comprehensive Advanced Technology. Build your network now.

Wi-CAT LLC
Навигация Форума
Вы должны войти, чтобы создавать сообщения и темы.

(решено) Прошу помощи в прикручивании ipset к прошивке.

Для расширения функционала роутера и дальнейших экспериментов решил добавить в прошивку ipset, но чего-то знаний по мэйк-файлам и компиляции не хватает.

Итак, что было сделано:

1) добавил в /configs/all/config-config пару переменных: CONFIG_USER_IPSET и CONFIG_LIB_MNL

2) добавил в /config/config .in

bool 'Build libmnl'		CONFIG_LIB_MNL
.....
.....

bool 'ipset'			CONFIG_USER_IPSET
if [ "$CONFIG_USER_IPSET" = "y" ]; then
    define_bool CONFIG_LIB_MNL y
fi

3) скачал и положил сырцы libmnl 1.0.4 в /libext/libmnl

4) поправил общий для либ /libext/Makefile на предмет сборки этой либы:

dir_$(CONFIG_LIB_MNL)          += libmnl

5) добавил DoConfigure для libmnl

#!/bin/bash

echo "=====================CONFIGURE-LIBNML===================="
APROOTDIR=`pwd`

HBUILD=`uname -m`-pc-linux-gnu
HTARGET=mipsel-linux

if [ ! -f $APROOTDIR/configure ]; then
	libtoolize -c --force
	aclocal
	autoreconf -fi
	autoconf
fi
if [ ! -f $APROOTDIR/Makefile.in ] || [ ! -f $APROOTDIR/missing -a ! -f $APROOTDIR/build-aux/missing ]; then
	automake --add-missing --force-missing --copy --foreign
fi

CONFOPTS="--host=$HTARGET --target=$HTARGET --build=$HBUILD"
CONFOPTS="$CONFOPTS --enable-shared --disable-static"
CONFOPTS="$CONFOPTS --prefix=$APROOTDIR/filesystem \
	  --disable-dependency-tracking \
	  CFLAGS=-D__linux__ libnet_cv_have_packet_socket=y"

./configure $CONFOPTS

6) поправил Makefile.am для этой либы

include $(top_srcdir)/Make_global.am

ACLOCAL_AMFLAGS = -I m4

SUBDIRS = src include examples
DIST_SUBDIRS = src include examples

pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libmnl.pc

${pkgconfig_DATA}: ${top_builddir}/config.status

shared: install
	cp -vfa ./filesystem/lib/*.so*    $(LIBCDIRSHARED)/lib
	-cp -vfa ./filesystem/lib/*.la*    $(LIBCDIRSHARED)/lib
	cp -vfra ./filesystem/include/* $(LIBCDIRSHARED)/include
	rm -rf ./filesystem

7) скачал и положил ipset 7.0 в /user/ipset

8) добавил для пакета DoConfigure

#!/bin/bash

echo "==================CONFIGURE-ISET=============================="
APROOTDIR=`pwd`

HBUILD=`uname -m`-pc-linux-gnu
HTARGET=mipsel-linux

# prefer use bash if multishell
if [ -e /bin/bash ]; then
    SHELL="/bin/bash"
else
    SHELL="/bin/sh"
fi

export SHELL

if [ ! -f $APROOTDIR/configure ]; then
    aclocal
    autoreconf -fi
    autoconf
fi
if [ ! -f $APROOTDIR/Makefile.in ] || [ ! -f $APROOTDIR/missing -a ! -f $APROOTDIR/build-aux/missing ]; then
    automake --add-missing --force-missing --copy
fi

PKG_CONFIG_PATH=$ROOTDIR/libext/libmnl
export PKG_CONFIG_PATH

CONFOPTS="--host=$HTARGET --target=$HTARGET --build=$HBUILD"
# always build static lib (use only by iptables and miniupnpd)
CONFOPTS="$CONFOPTS --with-kmod=yes --with-kbuild=$LINUXDIR "
CONFOPTS="$CONFOPTS --prefix=$APROOTDIR/filesystem --disable-dependency-tracking --disable-shared --enable-static"

./configure $CONFOPTS

9) добавил недостающее в Makefile.am

romfs: install
	cp -aprfv ./filesystem/sbin/* $(ROMFSDIR)/sbin
	rm -rf ./filesystem

10) поправил общий для юзерспейса мэйк на предмет сборки ipset, добавив в него

dir_$(CONFIG_USER_IPSET)		    += ipset

11) внаглую скопировал из /user/iptables/extentions/disabled  libxt_SET.* и libxt_set.* в /user/iptables/extentions, потому что вот этот код в DoConfigure iptables работать не захотел

if [ "$CONFIG_USER_IPSET" = "y" ]; then
    cp -f $(APROOTDIR)/extensions/disabled/libxt_set.* $(APROOTDIR)/extensions
    cp -f $(APROOTDIR)/extensions/disabled/libxt_SET.* $(APROOTDIR)/extensions
else
    rm -f $(APROOTDIR)/extensions/libxt_set.*
    rm -f $(APROOTDIR)/extensions/libxt_SET.*
fi

12) может ещё чего правил, уже не вспомню, вспомню - напишу...

Что имеем в итоге: сборка проходит без ошибок, но без сборки модулей ядра для ipset. Найти где собака зарыта пока не удалось.

Если у кого будет время и желание помочь с этим затыком, буду премного благодарен.

 

Дык я не вижу во всех манипуляциях включения ipset в ядре. Чего бы им собираться если оно по дефолту выключено т.к. неизспользуется?

А вообще в чём тайный смысл в ipset чего делать-то собрались с ним? А то может есть способ проще/лучше и без всяких ipset`ов.

Дык вроде и не требуется ничего в ядре включать, кроме самого iptables. По крайней мере так и у Андрея было (специально сравнивал ядерные конфиги).

Да ничего особенного не собирался с ним делать. По мелочам - телеметрию винды блочить (есть уже готовые варианты, зачем чего-то выдумывать), кое-какие социалки надо "потушить", а адреса их ловить вручную не хочется - муторно.

 

Странно что опции сборки : CONFOPTS="$CONFOPTS --with-kmod=yes --with-kbuild=$LINUXDIR ", передаваемые через DoConfigure не хотят отрабатывать, хотя по дефолту и так должны модули ядра собираться (судя по описанию).

PS. У меня одного форум "штырит" - аватарки на пол экрана? или это чего-то с движком эксперименты ставите?

  1. С чего не требуется? ipset это отдельная подсистема ядра включаемая CONFIG_IPSET.
  2. Ну да проще аж отдельную подсистему ядра впилить и придумать куда её приткнуть, зачем что-то выдумывать =)))
  3. По dns никак? Там в dnsmasq добавили для ads и подобного аж отдельную фигушку в последней версии см их ченджлог

Что там такого с телеметрией винды и как связано неловление вручную с ipset я ХЗ. Подробнее чего там этим самым ipset делать-то.

С телеметрией винды это вообще прекрасно. Скоро чую каждому юзверю винды бусы повесят на шею из чего-нить вонючего в принудительном порядке, а юзверь будет волшебный дезодорант искать что бы запах перебить.

Может ну его этих MS ? =)))))

P.S. Блин, форум обновился, аватары разорвало в клочья. Пойду багрепорт писать. Пора мен тоже побыть юзверем. =)

Цитата: RoxsAndy от 18/11/2018, 20:35

Странно что опции сборки : CONFOPTS="$CONFOPTS --with-kmod=yes --with-kbuild=$LINUXDIR ", передаваемые через DoConfigure не хотят отрабатывать, хотя по дефолту и так должны модули ядра собираться (судя по описанию).

В ядре уже интегрирована подсистема ipset. Я сильно сомневаюсь что модули собранные из дерева исходников ipset скачанного вами с их сайта будут собраны и будут работать.

Да и как бы правильно таки интегрировать все модули в ядро (собсно как и поступаю) и оттуда их в общем окружении ядерной системы сборки их и собирать. Учитывая, что API ядра со временем у нас меняется то костылики которые подгоняют сборку под версию ядра во внешних пакетах могут вообще дел натворить.

 

Пробовал я его ну его этих MS - не получается пока телефоны, dvb-ресиверы и т.п. шнягу штопать под линуксом. Там ещё больший изврат  - wine ставить или опять виртуалку с MS, а это ещё больше глюков, чем под самой MS. Ну не работают пока хорошие программаторы под OpenSource....

У телеметрии винды, как я понял, есть некоторые адреса, которые сидят на рандомных IP-шниках. Их проще по имени отрезолвить и прибить, чем каждый раз вычислять., вроде так, если правильно разобрался. Тоже касается и телеграма и некоторых других социалок.

По dnsmasq доку гляну, был не в курсе их нововведений.

Ну не работают пока хорошие программаторы под OpenSource....

Почувствовал себя ущербным вместо со своим программатором. Пойду выкину и сам о стену убьюсь. =)))))))

телеметрии винды, как я понял, есть некоторые адреса, которые сидят на рандомных IP-шниках. Их проще по имени отрезолвить и прибить, чем каждый раз вычислять., вроде так, если правильно разобрался. Тоже касается и телеграма и некоторых других социалок.

Ну вот и порубить резолв этих адресов прям в dnsmasq. На кой фиг это в ipset тащить.

Да и никто не мешает сделать например вот так:

[SFOMSK@/]# ipget google.com
64.233.161.102
64.233.161.100
64.233.161.101
64.233.161.139
64.233.161.113
64.233.161.138

Ну т.е. прям в скрипте в iptables.d получать список ip и дотыкавать в FORWARD эти адреса. Парситься оно в for на ash просто в лоб. Не вижу смысла в ipset тут вообще.

можно даже по cron рестартовать почаще перестройку нетфильтра что бы актуализировать если что.

Как он тут должен помочь не ясно.

Там же адресов не миллиарды. А на паре дестяков тысяч разницы не будет фильтровать там через ipset или через штатный netfilter.

Судя по https://habr.com/post/267507/ там тупо домен telemetry.microsoft.com

[SFOMSK@/]# ipget telemetry.microsoft.com
65.52.100.9

Причём судя по всему оно статично и никогда не меняется. Дык что вообще мешает его прям из рожи в forward фильтрануть? =)

Цитата: sfstudio от 18/11/2018, 20:58

Почувствовал себя ущербным вместо со своим программатором. Пойду выкину и сам о стену убьюсь. =)))))))

Там же адресов не миллиарды. А на паре дестяков тысяч разницы не будет фильтровать там через ipset или через штатный netfilter.

Если не секрет - каким прогером пользуетесь, особенно для NAND-флэшей интересует, может всё же сползу на linux, если поддержка вменяемая.

Адресов не миллиарды, но вручную отлавливать неохота ))),  а со скриптами, в особенности с iptables надо отлаживать тщательно (а то можно таких дров наворотить), а у меня там крыша едет, потому как до сих пор нет чёткого понимания какой трафик в какой таблице фильтровать и интернет на этот вопрос тоже не имеет однозначного ответа - кто во что горазд. )))

А судя по https://pikabu.ru/story/otklyuchenie_telemetrii_windows_7_8_81_10_4324350 и анализу поведения например

[SFOMSK@/]# ipget statsfe2.update.microsoft.com.akadns.net
52.183.118.171
13.78.184.44
[SFOMSK@/]# ipget statsfe2.update.microsoft.com.akadns.net
52.183.118.171
52.183.47.176

Фильтровать их как раз следует на уровне DNS. В /dev/null резолв оных и пусть себе живут дальше.

Хотя всё это полная лабуда и если MS захочется получить с вас телеметрию, ей ничего не будет стоить сделать это 1005000 возможными способами через любые сервисы.

Т.е. я почти уверен, что вот все эти блокировки это лишь блокировка видимой части. Винде есть чем и куда стучать и делать это можно в потоке данных например сервиса обновлений или ещё где.

Так что можете вообще не напрягаться. Единственный способ блокировать проприретарный зонд - не юзать оный. Других нет. Остальное это скорее самоуспокоение и врятли по факту даёт какой-то эффект вообще. Т.е. МС вам не скажет что ваши телодвижения привели к искомому вами результату, и почти факт, что данные телеметрии в обязательном порядке ходят в т.ч. через сервис обновления например. Вот 99% что телеметрия в потоке обновлятора имеется. Было бы тупо если бы её бы там не было.

 

Согласен с последним высказыванием.

Но вот список с wiki Padavan:

почикано поскипано

Как видите довольно внушительный, потом удалю эту портянку.

Я, в принципе, понял почему не собираются модули ядра ipset, потому что при сборке юзерспейса в скриптах нет команды make modules. Вот теперь думаю как это сделать исключительно для ipset.

А кстати, как это сделанно для iptables, надо глянуть. Или они все в ядерном окружении собираются?

Да уж внушительный. =) Грю деятки тыся записей это фигня полная. Да и там проще подсетями погрохать. Опять таки как видите они везде меняются и не факт что хоть где-то есть полный. Т.е. такая блокировка не даёт вообще никаких гарантий и скорее всего ничего не блокирует по сути.

Так что смиритесь и живите спокойной. Нет решения этой проблеме кроме хака самой системы, т.е. сломать ей вообще логику получения телеметрии нафиг и заставить слать лабуду.

Выяснять хосты и по какой логике эти хосты вычисляются, добавляются и т.д. (уверен там какие-нить push updates бегают постоянно) проще сдохнуть. Так что увы и ах, всё это полная лабуда и таким образом не победить.

 Вот теперь думаю как это сделать исключительно для ipset.

В корневой makeфайл ipset добавить тупо modules к цели all к примеру.

Хотя что мешает юзать ядерные (уже интергрированные в ядро модули) или интегрировать в ядро свежие (они компактно живут в linux-3.4.x/net/netfilter/ipset ну и инклуды посмотреть какие подновить прям в файлах). Это будет как минимум правильнее.

Хотя я так нужны в оном и не увидел.

А про программатор всё же можно узнать? Каким пользуетесь и может он NAND-ы штопать? =))

Минипро. Нанды? А ХЗ. Нужды не было даже не смотрел. Сейчас девайсы на которых нанд стоит обычно сами прекрасно оные шить умеют даже если stage2 boot мёртв.

Ну кроме разве что роутерных SOC. А на роутеры я вот как-то точно даже не думаю нанд пихать. Лучше SPI + SD Card slot воткнуть если уж места дохера надо. Основная система должна быть в RO только это гарантирует что флэш под ней будет здоровым весь срок эксплуатации устройства. Потому нафиг нафиг.

Цитата: sfstudio от 18/11/2018, 21:2
Хотя что мешает юзать ядерные (уже интергрированные в ядро модули) или интегрировать в ядро свежие (они компактно живут в linux-3.4.x/net/netfilter/ipset ну и инклуды посмотреть какие подновить прям в файлах). Это будет как минимум правильнее.
Это уже будет второй этап, сначала бы по простому запустить, а там уже улучшать будем, если сложится. А может  действительно обойдусь dnsmasq-ом и ручным забитием адресов в файл, который будет автоматом подтягиваться по крону или ещё как.

Нанды чуть ли не пачками начали в TV дохнуть (а мёртвый телек прошить с флэхи в 99% случаев не удаётся) и нормальных прогеров под них ещё до сих пор нет, а те что есть работают через опу (не видел пока еще ни одного прогера, который может битые сектора на нанде обходить при записи копии с другого флэша).

Хм-м-м, не знал что китайцы для минипрошки софт под линух запилили. Или это не они?

Это уже будет второй этап, сначала бы по простому запустить, а там уже улучшать будем, если сложится.
Вот какраз в данном случае проще начинать с интеграции модуля в ядро (точнее там всё интегрировано с обновления) или просто попробовать юзать со штатными модулями ядра.
А может  действительно обойдусь dnsmasq-ом и ручным забитием адресов в файл, который будет автоматом подтягиваться по крону или ещё как.

Если делать на уровне dns сервера то ничего никуда  дополнительно забивать не надо. Нужен только актуальный список доменых имён.

Но я бы вообще бы забил бы на эту самую телеметрию ибо без шансов это полноценно заблочить, разве что DPI обучить по содержимому пакетов это дело фильтровать. Но на уровне роутера это будет жопа.

И даже это не даст гарантий.

Так что можно смело переходить к решению других задач и думать как их проще реализовать. А там вот хоть застрелись только DNS ибо https и прочие прелести, а по наборам адресов ещё и если резолв прям в ядре делать это будет вылет в трубу.

м-м-м, не знал что китайцы для минипрошки софт под линух запилили. Или это не они?

Да ХЗ они не они. На гитхабе проект. Сейчас не дома не гляну с какой именно ветки юзаю. Но как-то SPI`и шью регулярно и проблем не испытываю. Кто там его пилил как-то не интересно было. =)

не видел пока еще ни одного прогера, который может битые сектора на нанде обходить при записи копии с другого флэша

Дык наверное потому что это не его задача. Даже через jtag нанд писать будет тоже самое.

Ладно это уже совсем оффтоп.

Согласен, закругляемся. Можно закрывать ветку, решение нарисовалось, будем пробовать.

Ну по результатм расскажите чего закрывать. Мож пригодится кому.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: