Linux за българи: Форуми

Linux секция за напреднали => Хардуерни и софтуерни проблеми => Темата е започната от: cna в Feb 05, 2008, 00:22



Титла: Debian i flat tc
Публикувано от: cna в Feb 05, 2008, 00:22
Здравейте,
искам да ползвам FlatTC+IPMARK на машина с Debian etch, kernel - 2.6.24 - пачнат с IPSET и IPMARK, IPTABLES - 1.4.0 (с 1.3.6 получавах същия резултат). Модулите се зареждат и всичко се очаква да работи добре, но не е така. При изпълнение на ./fw.add_net получавам следното:

Примерен код

TpakTop:~/flatc# ./fw.add_net 172.16.147. 1
iptables v1.4.0: Unknown arg `--addr=dst'
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.4.0: Unknown arg `--addr=src'
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.4.0: Unknown arg `--addr=dst'
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.4.0: Unknown arg `--addr=src'
Try `iptables -h' or 'iptables --help' for more information.


Taka и немога да разбера къде е грешката.

LSMOD:

Примерен код

ip_set_ipmap            4224  1
cls_fw                  5632  2
sch_htb                16000  2
xt_mark                 1920  2
ipt_set                 2560  4
ip_set_nethash          8324  1
xt_connlimit            4744  0
nf_conntrack           58532  1 xt_connlimit
iptable_raw             2432  0
iptable_mangle          2816  1
iptable_filter          3072  1
xt_MARK                 2304  1
ipt_IPMARK              2048  0
ip_tables              12488  3 iptable_raw,iptable_mangle,iptable_filter
x_tables               13828  6 xt_mark,ipt_set,xt_connlimit,xt_MARK,ipt_IPMARK,ip_tables
ip_set                 17692  5 ip_set_ipmap,ipt_set,ip_set_nethash
ipv6                  222884  12


iptables -t mangle -nL

Примерен код

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
MARK       all  --  0.0.0.0/0            0.0.0.0/0           MARK set 0x1
TRAF_OUT   all  --  0.0.0.0/0            0.0.0.0/0
TRAF_IN    all  --  0.0.0.0/0            0.0.0.0/0
BG_IN      all  --  0.0.0.0/0            0.0.0.0/0
BG_OUT     all  --  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain BG_IN (2 references)
target     prot opt source               destination

Chain BG_OUT (2 references)
target     prot opt source               destination

Chain INT_IN (1 references)
target     prot opt source               destination

Chain INT_OUT (1 references)
target     prot opt source               destination

Chain TRAF_IN (1 references)
target     prot opt source               destination
BG_IN      all  --  0.0.0.0/0            0.0.0.0/0           set BG_NETS src
INT_IN     all  --  0.0.0.0/0            0.0.0.0/0           MARK match 0x1

Chain TRAF_OUT (1 references)
target     prot opt source               destination
BG_OUT     all  --  0.0.0.0/0            0.0.0.0/0           set BG_NETS dst
INT_OUT    all  --  0.0.0.0/0            0.0.0.0/0           MARK match 0x1


Титла: Debian i flat tc
Публикувано от: Gaara в Feb 05, 2008, 01:29
А пачнал ли си с ipclassify... според мен там ти гърми iptables. Аз лично не можах да покарам IPCLASSIFY на ядро, по-голямо от 2.6.21....... дано ти да успееш.

Успех


Титла: Debian i flat tc
Публикувано от: cna в Feb 05, 2008, 09:37
Гаара,
Flat TC+ IPCALSSIFY и Flat TC + IPMARK са различни пакети.

Виж Тук!

Кода от който получавам грешката е този:

Примерен код

$or_mask = sprintf("%X", $id + 0x10100);
`$ipt -A BG_IN -t mangle -d $subnet -j IPMARK --addr=dst --and-mask=0xff --or-mask=0x$or_mask`;
$or_mask = sprintf("%X", $id + 0x10200);
`$ipt -A BG_OUT -t mangle -s $subnet -j IPMARK --addr=src --and-mask=0xff --or-mask=0x$or_mask`;
$or_mask = sprintf("%X", $id + 0x10300);
`$ipt -A INT_IN -t mangle -d $subnet -j IPMARK --addr=dst --and-mask=0xff --or-mask=0x$or_mask`;
$or_mask = sprintf("%X", $id + 0x10400);
`$ipt -A INT_OUT -t mangle -s $subnet -j IPMARK --addr=src --and-mask=0xff --or-mask=0x$or_mask`;


Никъде в него не се намесва IPCLASSIFY.





Титла: Debian i flat tc
Публикувано от: Gaara в Feb 05, 2008, 09:55
Я пробвай да видиш дали ще ти изплюе същата грешка като изпълниш само:
Примерен код

iptables -t mangle -A FORWARD -d 192.168.0.0/24 -j IPMARK --addr=dst --and-mask=0xff --or-mask=0x10100


Aко пак нацелиш греда, то IPMARK модула не ти работи.


Титла: Debian i flat tc
Публикувано от: cna в Feb 05, 2008, 10:10
Ефекта беше същия!

Дано да тръгне с IPCLSSIFY, че тестовата ми машина компилира ядро за 6-8 часа...

лек ден


Титла: Debian i flat tc
Публикувано от: teleport в Feb 05, 2008, 10:13
Не си компилирал библиотеката за iptables, имаш само модула за ядрото. Грешката наистина е подвеждаща.
 
# ls -ls /lib/iptables/ | grep -i IPMARK
 8 -rwxr-xr-x 1 root root  6693 Nov 12 14:53 libipt_IPMARK.so

Трябва да видиш:

# iptables -A FORWARD -j IPMARK --help
...
IPMARK target v1.3.5 options:
  --addr src/dst         use source or destination ip address
  --and-mask value       logical AND ip address with this value becomes MARK
  --or-mask value        logical OR ip address with this value becomes MARK

Когато ти липсва libipt_IPMARK.so iptables приема -j IPMARK за име на таблица и изгърмява с грешка --addr преди да провери за наличието на таблицата "IPMARK".


Титла: Debian i flat tc
Публикувано от: cna в Feb 05, 2008, 12:51
Тук вече ще трябва да попитам как да компилирам библиотеката  ibipt_IPMARK.so в IPTABLES, че до сега не съм ползвал толкова Debian.

Или трябва да преинсталирам iptables от сорс който ползшах за пачването?





Титла: Debian i flat tc
Публикувано от: teleport в Feb 05, 2008, 13:53
Аз работя принципно под CentOS и ползвам src.rpm-мите, но последователноста сигурно е подобна.

Инсталираш сорса на ядрото и на iptables. При пускане на patch-o-matic той те пита къде са kernel и iptables сорсовете и ги patch-ва. Компилираш кернела ( аз компилирам само модула, защото си ползвам оригиналните сорсове ). Инсталираш модула. До тука си го направил.

Отиваш в директорията със сорса на iptables.

make clean; make KERNELDIR=<сорса на кернела>

В резултат трябва да получиш  ./extensions/libipt_IPMARK.so , копираш го в /lib/iptables и проверяваш дали работи с 'iptables -A FORWARD -j IPMARK --help'.

В случай че не е компилиран: iptables проверява за наличието на '$KERNEL_DIR/include/linux/netfilter_ipv4/ipt_IPMARK.h' за да реши дали да го компилира или не. Отваряш с редактор ./extensions/.IPMARK-test  и реда:

[ -f $KERNEL_DIR/include/linux/netfilter_ipv4/ipt_IPMARK.h ] && echo IPMARK

го заменяш с:

echo IPMARK

Пак 'make clean; make KERNELDIR=.....' и пак горната процедура.





Титла: Debian i flat tc
Публикувано от: cna в Feb 05, 2008, 15:51
Благодаря на всички, нещата сработиха!