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

Оно же пишет, что у тебя несколько раз объявлены структуры, или что там.

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

какой смысл пользоваться копролитами? 2.6.18 и bkl, и куча других проблем. зачем?

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this