vbalykin Posted March 14, 2015 Posted March 14, 2015 Пытаюсь сделать зеркалирование трафика с помощью xtables-addons. На СеntOS 6 данная процедура прошла без проблем. А вот на CentOS 5.5 возникли проблемы. Что имеем: # cat /etc/issue CentOS release 5.5 (Final) Kernel \r on an \m # uname -a Linux localhost.localdomain 2.6.18-194.el5PAE #1 SMP Fri Apr 2 15:37:44 EDT 2010 i686 i686 i386 GNU/Linux Подготовка к сборке. Все необходимое для сборки установил, дополнительно доставил пакет perl-Text-CSV_XS-0.80-1.el5.rf.i386.rpm из rpm-forge. Почему-то в CentOS 5.5 отсутствует файл /usr/include/linux/netfilter/xtables.h, поэтому сделал симлинк на /usr/include/linux/netfilter/x_tables.h Дополнительно сделал симлинк 2.6.18-194.el5-PAE-i686 на /usr/src/kernels/2.6.18-194.el5-i686. Версии xtables-addons-1.47.1 и xtables-addons-1.20 при configure сразу ругаются на ... checking for linux/netfilter/x_tables.h... yes WARNING: This distribution's shipped kernel is not supported. make: *** /lib/modules/2.6.18-194.el5PAE/build: No such file or directory. Stop. Found kernel version ...0 in /lib/modules/2.6.18-194.el5PAE/build ./configure: line 11710: test: : integer expression expected ./configure: line 11712: test: : integer expression expected Поэтому пробую более древние версии, а именно xtables-addons-1.10 и xtables-addons-1.5.7, которые вроде бы должны работать с ядром 2.6.18. Файл mconfig обрезал до минимально возможного состояния: # -*- Makefile -*- # build_CHAOS= build_DELUDE= build_DHCPADDR= build_ECHO= build_IPMARK= build_LOGMARK= build_SYSRQ= build_TARPIT= build_TEE=m build_condition= build_fuzzy= build_geoip= build_ipp2p= build_ipset= build_portscan= build_quota2= configure отрабатывает без видимых проблем: #./configure --with-xtables=/usr/include/linux/netfilter ... checking for g++ option to produce PIC... -fPIC checking if g++ PIC flag -fPIC works... yes checking if g++ static flag -static works... yes checking if g++ supports -c -o file.o... yes checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate appending configuration tag "F77" to libtool checking xtables.h presence... /usr/include/linux/netfilter/xtables.h configure: creating ./config.status config.status: creating Makefile config.status: creating extensions/GNUmakefile config.status: creating extensions/ipset/GNUmakefile config.status: WARNING: extensions/ipset/GNUmakefile.in seems to ignore the --datarootdir setting config.status: creating config.h config.status: config.h is unchanged config.status: executing depfiles commands А вот при сборке получаем ошибку: # make make all-recursive make[1]: Entering directory `/root/test/xtables-addons-1.5.7' Making all in extensions make[2]: Entering directory `/root/test/xtables-addons-1.5.7/extensions' make -C /lib/modules/2.6.18-194.el5PAE/build M=/root/test/xtables-addons-1.5.7/extensions XA_TOPSRCDIR=/root/test/xtables-addons-1.5.7 modules; make[3]: Entering directory `/usr/src/kernels/2.6.18-194.el5-i686' CC [M] /root/test/xtables-addons-1.5.7/extensions/compat_xtables.o In file included from /root/test/xtables-addons-1.5.7/extensions/compat_xtables.c:20: /root/test/xtables-addons-1.5.7/extensions/compat_skbuff.h:26: ошибка: redefinition of ‘skb_reset_network_header’ include/linux/skbuff.h:1122: ошибка: previous definition of ‘skb_reset_network_header’ was here /root/test/xtables-addons-1.5.7/extensions/compat_skbuff.h:30: ошибка: redefinition of ‘tcp_hdr’ include/linux/tcp.h:169: ошибка: previous definition of ‘tcp_hdr’ was here /root/test/xtables-addons-1.5.7/extensions/compat_skbuff.h:34: ошибка: redefinition of ‘udp_hdr’ include/linux/udp.h:33: ошибка: previous definition of ‘udp_hdr’ was here In file included from /root/test/xtables-addons-1.5.7/extensions/compat_xtables.c:21: /root/test/xtables-addons-1.5.7/extensions/compat_xtnu.h:9: ошибка: redefinition of typedef ‘bool’ include/linux/types.h:36: ошибка: previous declaration of ‘bool’ was here /root/test/xtables-addons-1.5.7/extensions/compat_xtnu.h:10: ошибка: redeclaration of enumerator ‘false’ include/linux/stddef.h:16: ошибка: previous definition of ‘false’ was here /root/test/xtables-addons-1.5.7/extensions/compat_xtnu.h:10: ошибка: redeclaration of enumerator ‘true’ include/linux/stddef.h:18: ошибка: previous definition of ‘true’ was here /root/test/xtables-addons-1.5.7/extensions/compat_xtables.c: In function ‘xtnu_ip_route_me_harder’: /root/test/xtables-addons-1.5.7/extensions/compat_xtables.c:302: ошибка: слишком много аргументов в вызове функции ‘ip_route_me_harder’ /root/test/xtables-addons-1.5.7/extensions/compat_xtables.c: На верхнем уровне: /root/test/xtables-addons-1.5.7/extensions/compat_xtables.c:387: ошибка: expected ‘)’ before ‘*’ token /root/test/xtables-addons-1.5.7/extensions/compat_xtables.c:394: ошибка: expected ‘)’ before ‘*’ token /root/test/xtables-addons-1.5.7/extensions/compat_xtables.c:398: ошибка: ‘xtnu_csum_replace2’ undeclared here (not in a function) /root/test/xtables-addons-1.5.7/extensions/compat_xtables.c:398: предупреждение: в декларации ‘xtnu_csum_replace2’ по умолчанию установлен тип ‘int’ make[4]: *** [/root/test/xtables-addons-1.5.7/extensions/compat_xtables.o] Ошибка 1 make[3]: *** [_module_/root/test/xtables-addons-1.5.7/extensions] Ошибка 2 make[3]: Leaving directory `/usr/src/kernels/2.6.18-194.el5-i686' make[2]: *** [modules] Ошибка 2 make[2]: Leaving directory `/root/test/xtables-addons-1.5.7/extensions' make[1]: *** [all-recursive] Ошибка 1 make[1]: Leaving directory `/root/test/xtables-addons-1.5.7' make: *** [all] Ошибка 2 Гуглением нашёл только одну тему с данной проблемой, в которой рекомендовали бросить проблемное ядро от RedHat и перебраться на "ванильное" ядро, но данный "совет" в моём случае не подходит. С чем может быть связана данная ошибка? Кто-нибудь может поделиться опытом сборки модуля TEE для xtables-addons на CentOS 5? Вставить ник Quote
pppoetest Posted March 14, 2015 Posted March 14, 2015 Оно же пишет, что у тебя несколько раз объявлены структуры, или что там. Вставить ник Quote
DVM-Avgoor Posted March 14, 2015 Posted March 14, 2015 А если поставить ядро 2.2.17 все будет еще круче. Ядру 2.6.18 скоро 10 лет стукнет, если хочется собрать на нем что-то относительно свежее, нужно переписать интерфейсы ядра в старом, которые появились/изменились в новых. Разве это не понятно? :) Вставить ник Quote
vbalykin Posted March 14, 2015 Author Posted March 14, 2015 По наводке местных знатоков и совету товарища из вот этой темы всё-таки получилось поправить исходники и собрать нужные модули: # make make all-recursive make[1]: Entering directory `/root/test/xtables-addons-1.15' Making all in extensions make[2]: Entering directory `/root/test/xtables-addons-1.15/extensions' GEN modules make[3]: Entering directory `/usr/src/kernels/2.6.18-194.el5-i686' CC [M] /root/test/xtables-addons-1.15/extensions/compat_xtables.o CC [M] /root/test/xtables-addons-1.15/extensions/xt_TEE.o Building modules, stage 2. MODPOST CC /root/test/xtables-addons-1.15/extensions/compat_xtables.mod.o LD [M] /root/test/xtables-addons-1.15/extensions/compat_xtables.ko CC /root/test/xtables-addons-1.15/extensions/xt_TEE.mod.o LD [M] /root/test/xtables-addons-1.15/extensions/xt_TEE.ko make[3]: Leaving directory `/usr/src/kernels/2.6.18-194.el5-i686' CC libxt_TEE.oo CCLD libxt_TEE.so make[2]: Leaving directory `/root/test/xtables-addons-1.15/extensions' make[2]: Entering directory `/root/test/xtables-addons-1.15' sed -e '/@MATCHES@/ r extensions/matches.man' -e '/@TARGET@/ r extensions/targets.man' xtables-addons.8.in >xtables-addons.8; make[2]: Leaving directory `/root/test/xtables-addons-1.15' make[1]: Leaving directory `/root/test/xtables-addons-1.15' Но при попытке их загрузить получаю: # modprobe xt_TEE FATAL: Error inserting xt_TEE (/lib/modules/2.6.18-194.el5PAE/extra/xt_TEE.ko): Unknown symbol in module, or unknown parameter (see dmesg) Отыскал репозиторий OpenFusion, где имеются собранные модули для CentOS 5 (пакеты kernel-module-xtables-addons-2.6.18-128.1.6.el5-1.15-1.of.el5.i386.rpm, iptables-1.4.3.2-2.of.el5.i386.rpm, iptables-devel-1.4.3.2-2.of.el5.i386.rpm, iptables-ipv6-1.4.3.2-2.of.el5.i386.rpm), то есть сборка в принципе возможна. Но там они для другой версии ядра и при загрузке на моём ядре получаю точно такую же ошибку Unknown symbol in module, or unknown parameter. SRC.RPM файлов к пакету kernel-module-xtables-addons-2.6.18-128.1.6.el5-1.15-1.of.el5.i386.rpm, чтобы пересобрать его, отыскать не удалось. Буду рад любым советам. Вставить ник Quote
pppoetest Posted March 14, 2015 Posted March 14, 2015 Не мучать ж... и обновить ядро. Вставить ник Quote
^rage^ Posted March 15, 2015 Posted March 15, 2015 какой смысл пользоваться копролитами? 2.6.18 и bkl, и куча других проблем. зачем? Вставить ник Quote
vbalykin Posted March 16, 2015 Author Posted March 16, 2015 Проблема решена. Алгоритм такой: 1. Проверяем сборочную среду: если ядро PAE, то нужно ставить kernel-PAE-devel, иначе после сборки будет ругань Unknown symbol in module, or unknown parameter. 2. Обновляем iptables пакетами из OpenFusion: # rpm -Uvh iptables-1.4.3.2-2.of.el5.i386.rpm iptables-ipv6-1.4.3.2-2.of.el5.i386.rpm iptables-devel-1.4.3.2-2.of.el5.i386.rpm 3. Качаем xtables-addons-1.15-1.of.src.rpm из http://www.openfusion.com.au/labs/srpms/ и устанавливаем. # rpm -ivh xtables-addons-1.15-1.of.src.rpm 4. Распаковываем исходные тексты программы с наложением патчей (фаза %prep): # cd /usr/src/redhat/SPECS # rpmbuild -bp xtables-addons.spec При этом в каталоге /usr/src/redhat/BUILD/xtables-addons-1.15 находятся 2 каталога: оригинальный (extensions.dist) и патченный (extensions). 5. Комментируем объявление функции функции csum_unfold в файле compat_xtnu.h патченного каталога extensions: #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 19) /* static inline __wsum csum_unfold(__sum16 n) { return (__force __wsum)n; } */ #endif 6. Готовим новый diff-файл файл: # cd /usr/src/redhat/BUILD/xtables-addons-1.15 # diff -Npru extensions.dist extensions > /usr/src/redhat/SOURCES/new.patch 7. Правим spec-файл xtables-addons.spec, изменив в нём номер релиза, версию ядра и имя патча: #%define kern_version 2.6.18-128.1.6.el5 %define kern_version 2.6.18-194.el5PAE #Release: 1%{org_tag}%{dist} Release: 1new #Patch0: %{name}-1.15-el5-tweakage.patch Patch0: new.patch 8. Можно производить сборку: # rpmbuild -bb --target=i686 xtables-addons.spec Модули, собранные для одного из ядер серии PAE подходят для ЛЮБЫХ ядер PAE из CentOS 5. Вставить ник Quote
kayot Posted March 16, 2015 Posted March 16, 2015 ..а в свежих ядрах xtables и все таргеты для iptables(тот же xt_TEE) идут уже изначально. Категорически непонятны ваши беды и избранный для их решения тернистый путь. Вставить ник Quote
^rage^ Posted March 16, 2015 Posted March 16, 2015 ..а в свежих ядрах xtables и все таргеты для iptables(тот же xt_TEE) идут уже изначально. Категорически непонятны ваши беды и избранный для их решения тернистый путь. отдельный момент - 32битные ядра в современном мире. Вставить ник Quote
morfair Posted December 22, 2015 Posted December 22, 2015 (edited) vbalykin А как вы сделали зеркалирование трафика в CentOS 6, если там 2.6.32-573.12.1.el6.x86_64 с iptables v1.4.7 и отсутствует xt_TEE? Edited December 22, 2015 by morfair Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.