Jump to content

Зеркалирование трафика с помощью xtables-addons на CentOS 5.5 Ошибка при сборке xtables-addons

Пытаюсь сделать зеркалирование трафика с помощью 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?

Share this post


Link to post
Share on other sites

А если поставить ядро 2.2.17 все будет еще круче. Ядру 2.6.18 скоро 10 лет стукнет, если хочется собрать на нем что-то относительно свежее, нужно переписать интерфейсы ядра в старом, которые появились/изменились в новых. Разве это не понятно? :)

Share this post


Link to post
Share on other sites

По наводке местных знатоков и совету товарища из вот этой темы всё-таки получилось поправить исходники и собрать нужные модули:

# 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, чтобы пересобрать его, отыскать не удалось.

 

Буду рад любым советам.

Share this post


Link to post
Share on other sites

Проблема решена.

 

Алгоритм такой:

 

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.

Share this post


Link to post
Share on other sites

..а в свежих ядрах xtables и все таргеты для iptables(тот же xt_TEE) идут уже изначально.

Категорически непонятны ваши беды и избранный для их решения тернистый путь.

Share this post


Link to post
Share on other sites

..а в свежих ядрах xtables и все таргеты для iptables(тот же xt_TEE) идут уже изначально.

Категорически непонятны ваши беды и избранный для их решения тернистый путь.

отдельный момент - 32битные ядра в современном мире.

Share this post


Link to post
Share on other sites

vbalykin

А как вы сделали зеркалирование трафика в CentOS 6, если там 2.6.32-573.12.1.el6.x86_64 с iptables v1.4.7 и отсутствует xt_TEE?

Edited by morfair

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.