# [SOLVED]Gentoo-3.7.10 + iptables-1.4.16 + IMQ

## dafqq

Witam,

Moja ostatnia przygoda z gentoo była na jajku 2.6, niestety nie umiem sobie poradzic z instalacja iptables +IMQ, sam patch na jadro i rekonfiguracja  przechodzi pomyslnie. Natomiast nie wiem jak sobie poradzic z iptables, dodaje sie flage "extensions" do USE i emerge? czy paczka z netfilter i recznie patchowac?

Z gory dzieki za pomoc;)Last edited by dafqq on Fri Apr 26, 2013 8:55 am; edited 1 time in total

----------

## dylon

Trzeba osobno łatać iptables.

Możesz wykorzystać do tego automat portage (od jakiegoś czasu potrafi nakładać "zewnętrzne" patche) albo patchować ręcznie.

Aby wykorzystać portage, zrób sobie taką strukturę: /etc/portage/patches/net-firewall/iptables/ i do tego katalogu wrzuć patche jakie chcesz dodać. Emerge potem je ładnie (albo i nie  :Razz:  ) nałoży.

----------

## dafqq

ok ,thx:)

A spotkał sie ktos z czyms takim?

Po instalacji laty na kernel, rekompilacjii reboocie

daje:  *Quote:*   

> modprobe imq

 

otrzymuje:  *Quote:*   

> modprobe: ERROR: could not insert 'imq': Invalid argument

 

??

----------

## dylon

 *dafqq wrote:*   

> ok ,thx:)
> 
> otrzymuje:  *Quote:*   modprobe: ERROR: could not insert 'imq': Invalid argument 
> 
> ??

 

Strzelam, że brakuje Ci określenia ilości urządzeń IMQ. Albo definiujesz dynamicznie przy ładowaniu modułu przez "numdevs", albo określasz ich ilość w configu kernela.

Ale dokładnie genezę błędu pewnie Ci "strace" podpowie  :Smile: 

----------

## dafqq

Hej,

W kenelu zaznaczylem ilosc interfejsow oraz BA dla mojej sieci, oraz IMQ jako M

Recznie tez nie potrafie zaladowac

 *Quote:*   

> modprobe imq numdevs=2
> 
> modprobe: ERROR: could not insert 'imq': Invalid argument

 

----------

## dylon

Wykonaj 

```
strace modprobe imq
```

 to może dowiesz się czegoś więcej.

A tak w ogóle, to czy na pewno patch na kernel dobrze Ci się nałożył?

----------

## dafqq

Wlasnie nie potrafie tego zrozumiec nigdy z tym nie miałem problemów, nakładanie patcha jest dziecinnie proste i samo patchowanie przebiegło bezbłędnie...

```
strace modprobe imq

execve("/sbin/modprobe", ["modprobe", "imq"], [/* 24 vars */]) = 0

brk(0)                                  = 0x93c1000

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77d6000

access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)

open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3

fstat64(3, {st_mode=S_IFREG|0644, st_size=15848, ...}) = 0

mmap2(NULL, 15848, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb77d2000

close(3)                                = 0

open("/lib/libkmod.so.2", O_RDONLY|O_CLOEXEC) = 3

read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320(\0\0004\0\0\0"..., 512) = 512

fstat64(3, {st_mode=S_IFREG|0755, st_size=91792, ...}) = 0

mmap2(NULL, 94600, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb77ba000

mmap2(0xb77d0000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15) = 0xb77d0000

close(3)                                = 0

open("/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3

read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240\312\1\0004\0\0\0"..., 512) = 512

fstat64(3, {st_mode=S_IFREG|0755, st_size=1705312, ...}) = 0

mmap2(NULL, 1714940, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7617000

mmap2(0xb77b4000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19d) = 0xb77b4000

mmap2(0xb77b7000, 11004, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb77b7000

close(3)                                = 0

open("/lib/libz.so.1", O_RDONLY|O_CLOEXEC) = 3

read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\360\35\0\0004\0\0\0"..., 512) = 512

fstat64(3, {st_mode=S_IFREG|0755, st_size=87556, ...}) = 0

mmap2(NULL, 90364, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7600000

mmap2(0xb7615000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14) = 0xb7615000

close(3)                                = 0

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb75ff000

set_thread_area({entry_number:-1 -> 6, base_addr:0xb75ffa80, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0

mprotect(0xb77b4000, 8192, PROT_READ)   = 0

mprotect(0xb7615000, 4096, PROT_READ)   = 0

mprotect(0xb77d0000, 4096, PROT_READ)   = 0

mprotect(0x805a000, 4096, PROT_READ)    = 0

mprotect(0xb77f8000, 4096, PROT_READ)   = 0

munmap(0xb77d2000, 15848)               = 0

brk(0)                                  = 0x93c1000

brk(0x93e2000)                          = 0x93e2000

uname({sys="Linux", node="olimp", ...}) = 0

stat64("/etc/modprobe.d", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0

openat(AT_FDCWD, "/etc/modprobe.d", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3

fcntl64(3, F_GETFD)                     = 0x1 (flags FD_CLOEXEC)

getdents64(3, /* 4 entries */, 32768)   = 112

fstatat64(3, "i386.conf", {st_mode=S_IFREG|0644, st_size=122, ...}, 0) = 0

fstatat64(3, "aliases.conf", {st_mode=S_IFREG|0644, st_size=1216, ...}, 0) = 0

getdents64(3, /* 0 entries */, 32768)   = 0

close(3)                                = 0

stat64("/run/modprobe.d", 0xbf8266d4)   = -1 ENOENT (No such file or directory)

stat64("/lib/modprobe.d", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0

openat(AT_FDCWD, "/lib/modprobe.d", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3

getdents64(3, /* 3 entries */, 32768)   = 96

fstatat64(3, "usb-load-ehci-first.conf", {st_mode=S_IFREG|0644, st_size=62, ...}, 0) = 0

getdents64(3, /* 0 entries */, 32768)   = 0

close(3)                                = 0

open("/etc/modprobe.d/aliases.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3

fcntl64(3, F_GETFL)                     = 0x8000 (flags O_RDONLY|O_LARGEFILE)

fstat64(3, {st_mode=S_IFREG|0644, st_size=1216, ...}) = 0

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77d5000

_llseek(3, 0, [0], SEEK_CUR)            = 0

read(3, "# Aliases to tell insmod/modprob"..., 4096) = 1216

read(3, "", 4096)                       = 0

close(3)                                = 0

munmap(0xb77d5000, 4096)                = 0

open("/etc/modprobe.d/i386.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3

fcntl64(3, F_GETFL)                     = 0x8000 (flags O_RDONLY|O_LARGEFILE)

fstat64(3, {st_mode=S_IFREG|0644, st_size=122, ...}) = 0

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77d5000

_llseek(3, 0, [0], SEEK_CUR)            = 0

read(3, "alias parport_lowlevel parport_p"..., 4096) = 122

read(3, "", 4096)                       = 0

close(3)                                = 0

munmap(0xb77d5000, 4096)                = 0

open("/lib/modprobe.d/usb-load-ehci-first.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3

fcntl64(3, F_GETFL)                     = 0x8000 (flags O_RDONLY|O_LARGEFILE)

fstat64(3, {st_mode=S_IFREG|0644, st_size=62, ...}) = 0

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77d5000

_llseek(3, 0, [0], SEEK_CUR)            = 0

read(3, "softdep uhci_hcd pre: ehci_hcd\ns"..., 4096) = 62

read(3, "", 4096)                       = 0

close(3)                                = 0

munmap(0xb77d5000, 4096)                = 0

open("/proc/cmdline", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3

read(3, "root=/dev/sda3\n", 4095)       = 15

read(3, "", 4080)                       = 0

close(3)                                = 0

open("/lib/modules/3.7.10-gentoo/modules.dep.bin", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3

fstat64(3, {st_mode=S_IFREG|0644, st_size=10288, ...}) = 0

mmap2(NULL, 10288, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb77d3000

close(3)                                = 0

open("/lib/modules/3.7.10-gentoo/modules.alias.bin", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3

fstat64(3, {st_mode=S_IFREG|0644, st_size=7930, ...}) = 0

mmap2(NULL, 7930, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb75fd000

close(3)                                = 0

open("/lib/modules/3.7.10-gentoo/modules.symbols.bin", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3

fstat64(3, {st_mode=S_IFREG|0644, st_size=4454, ...}) = 0

mmap2(NULL, 4454, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb75fb000

close(3)                                = 0

open("/lib/modules/3.7.10-gentoo/modules.builtin.bin", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3

fstat64(3, {st_mode=S_IFREG|0644, st_size=7968, ...}) = 0

mmap2(NULL, 7968, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb75f9000

close(3)                                = 0

open("/sys/module/imq/initstate", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)

stat64("/sys/module/imq", 0xbf8266a0)   = -1 ENOENT (No such file or directory)

open("/sys/module/imq/initstate", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)

stat64("/sys/module/imq", 0xbf8266a0)   = -1 ENOENT (No such file or directory)

open("/lib/modules/3.7.10-gentoo/kernel/drivers/net/imq.ko", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3

read(3, "\177E", 2)                     = 2

_llseek(3, 0, [0], SEEK_SET)            = 0

fstat64(3, {st_mode=S_IFREG|0644, st_size=12631, ...}) = 0

mmap2(NULL, 12631, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb75f5000

init_module(0xb75f5000, 12631, "")      = -1 ENOEXEC (Exec format error)

munmap(0xb75f5000, 12631)               = 0

close(3)                                = 0

write(2, "modprobe: ERROR: could not inser"..., 59modprobe: ERROR: could not insert 'imq': Exec format error

) = 59

munmap(0xb77d3000, 10288)               = 0

munmap(0xb75fd000, 7930)                = 0

munmap(0xb75fb000, 4454)                = 0

munmap(0xb75f9000, 7968)                = 0

exit_group(1)                           = ?

+++ exited with 1 +++
```

Naprawdę dalej nic mi to nie mówi, bardziej mnie martwi to że nie mogę nigdzie znaleźć rozwiązania, nie widze że ktoś sie borykał z takim problemem... Od samego początku mam problem z systemem, nie wspominając już o tym że testowałem też to na 3.4.34 ten sam błąd. Pobrałem nawet nowe iso instalowałem starszy stage, portage i lece zgodnie z manualem http://www.gentoo.org/doc/en/gentoo-x86-quickinstall.xml niby system wstaje ale od razu problem z zapętlającymi się pakietami. Gdy już sobie z tym poradziłem to nawet iptables nie chce sie podnieść https://forums.gentoo.org/viewtopic-t-957474.html He he walcze ponad tydzien jakies 10 - 15 instalacji za mną a efektów nie widać

----------

## Jacekalex

A  nie wystarczy Ci obecny w kernelu IFB?

Robi to samo, co IMQ, nie ma tyko przekierowania w iptables, całość przekierowania robi się w iproute.

Pytam, bo IMQ często nie nadąża za zmianami w kernelu.  :Crying or Very sad: 

Pozdrawiam

 :Cool: 

----------

## dafqq

No właśnie jest mi niezbędne imq, tym bardziej że na www.linuximq.net jest patch do obecnego jajka, a tym bardziej  mam podobny problem z iptables wydaje mi sie ze moze to byc poloczone i jest gdzies blad w systemie ktory odpowiada za problem z iptables i imq

----------

## dylon

 *Jacekalex wrote:*   

> A  nie wystarczy Ci obecny w kernelu IFB?
> 
> Robi to samo, co IMQ, nie ma tyko przekierowania w iptables, całość przekierowania robi się w iproute.
> 
> 

 

Jakoś nigdy nie miałem przekonania do IFB mimo kilku prób - zawsze mi coś w qos-ie i zarządzaniu pasmem nie grało (nawet udało mi się zaliczyć kilka zwisów przez ifb... ( )

IMQ jest fajne i intuicyjne i łatwo przez iptables zarządza się ruchem jaki ma do niego wpadać. Trzeba tylko pamiętać żeby lokalnego ruchu do niego nie puszczać. (chociaż nawet nie wiem czy ten babol poprawili  :Smile:  )

 *dafqq wrote:*   

> No właśnie jest mi niezbędne imq, tym bardziej że na www.linuximq.net jest patch do obecnego jajka, a tym bardziej mam podobny problem z iptables wydaje mi sie ze moze to byc poloczone i jest gdzies blad w systemie ktory odpowiada za problem z iptables i imq

 

Ostatnio nakładałem imq na kernel 3.5.7 (gentoo-sources), iptables 1.4.17 i poszło bez problemu. Ale pamiętam, że na najnowszym (wtedy 3.7.1) kernelu miałem jakieś problemy - niby moduł się ładował ale ruch na to imq nie szedł.

Może pójdź testowo tą drogą: weź starszy kernel i nałóż łaty. nie zapomnij o starszej łacie na iptables. Po pierwsze, może zadziała, a po drugie, może znajdziesz np. błąd przy nakładaniu patcha i to Ci coś rozjaśni.

Ja mam w configu kernel:

```
CONFIG_NETFILTER_XT_TARGET_IMQ=m

CONFIG_IMQ=y

# CONFIG_IMQ_BEHAVIOR_AA is not set

CONFIG_IMQ_BEHAVIOR_AB=y

# CONFIG_IMQ_BEHAVIOR_BA is not set

# CONFIG_IMQ_BEHAVIOR_BB is not set

CONFIG_IMQ_NUM_DEVS=16
```

----------

## Jacekalex

 *Quote:*   

> Jakoś nigdy nie miałem przekonania do IFB mimo kilku prób - zawsze mi coś w qos-ie i zarządzaniu pasmem nie grało (nawet udało mi się zaliczyć kilka zwisów przez ifb... ( ) 

 

```
ifb0: flags=195<UP,BROADCAST,RUNNING,NOARP>  mtu 1500

        inet6 fe80::f8eb:7ff:fe15:dc27  prefixlen 64  scopeid 0x20<link>

        ether fa:eb:07:15:dc:27  txqueuelen 32  (Ethernet)

        RX packets 1012834  bytes 1409494511 (1.3 GiB)

        RX errors 0  dropped 3  overruns 0  frame 0

        TX packets 1012831  bytes 1409494301 (1.3 GiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ifb1: flags=195<UP,BROADCAST,RUNNING,NOARP>  mtu 1500

        inet6 fe80::981b:1aff:fe10:6816  prefixlen 64  scopeid 0x20<link>

        ether 9a:1b:1a:10:68:16  txqueuelen 32  (Ethernet)

        RX packets 520802  bytes 32639601 (31.1 MiB)

        RX errors 0  dropped 3  overruns 0  frame 0

        TX packets 520799  bytes 32639391 (31.1 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

```

SOA#1

Na jajkach od 3.6 do obecnego 3.8.8, działa.

Robiłem wg tego:

http://wampir.mroczna-zaloga.org/archives/77-ifb-zamiast-imq.html

Pozdro

 :Cool: 

----------

## dylon

 *Jacekalex wrote:*   

> 
> 
> Robiłem wg tego:
> 
> http://wampir.mroczna-zaloga.org/archives/77-ifb-zamiast-imq.html
> ...

 

Nie żebym się czepał samego IFB, ale spróbuj używac hfsc w ruch x-set mbits to się trochę zdziwisz jak to nie potrafi sobie poradzić  :Smile: 

Na razie tandem IMQ+htb (z tablicami hashującymi) radzi sobie bardzo miło. Aczkolwiek jeszcze ze 100-200mbit i trzeba będzie pomyśleć o czymś dedykowanym  :Smile: 

----------

## dafqq

Problem po części się wyjaśnił...

Nie moge zaladować zadnego modulu:

modprobe 8021q

```
modprobe: ERROR: could not insert '8021q': Invalid argument
```

modprobe imq numdevs=2

```
modprobe: ERROR: could not insert 'imq': Invalid argument
```

W kernelu znalazłem tyle, wydaje mi się ze to co potrzebne zaznaczone.. 

```
# GCOV-based kernel profiling

#

# CONFIG_GCOV_KERNEL is not set

CONFIG_HAVE_GENERIC_DMA_COHERENT=y

CONFIG_SLABINFO=y

CONFIG_RT_MUTEXES=y

CONFIG_BASE_SMALL=0

CONFIG_MODULES=y

CONFIG_MODULE_FORCE_LOAD=y

CONFIG_MODULE_UNLOAD=y

CONFIG_MODULE_FORCE_UNLOAD=y

CONFIG_MODVERSIONS=y

CONFIG_MODULE_SRCVERSION_ALL=y
```

Calkiem możliwe że się mylę, ale skoro nie mogę załadować żadnego modułu to raczej wina configu jądra, macie jakieś pomysły?

----------

## dylon

 *dafqq wrote:*   

> 
> 
> Calkiem możliwe że się mylę, ale skoro nie mogę załadować żadnego modułu to raczej wina configu jądra, macie jakieś pomysły?

 

Może to dziwnie zabrzmi... ale czy czasem nie pomyliłeś architektury ściągając stage?  :Wink: 

----------

## dafqq

No strasznie dziwnie ale jednak nie pomylilem:)

----------

## Jacekalex

Pokaż wyniki:

```
modprobe imq numdevs=2 

dmesg | grep -i imq
```

Prawdopodobnie masz coś nagrabione w konfigu kernela, w dmesg powinno pisać, co go boli.

----------

## dafqq

Juz sobie poradziłem nie podmontowalem boota przed kopiowaniem kernela;/

----------

## dafqq

Jako że udało mi się załadować moduly imq itp... przechodze do problemu z iptables.

Jeśli spatchuje iptables metoda podana przez Dylona:

 *Quote:*   

> Możesz wykorzystać do tego automat portage (od jakiegoś czasu potrafi nakładać "zewnętrzne" patche) albo patchować ręcznie. 
> 
> Aby wykorzystać portage, zrób sobie taką strukturę: /etc/portage/patches/net-firewall/iptables/ i do tego katalogu wrzuć patche jakie chcesz dodać. Emerge potem je ładnie (albo i nie  ) nałoży.

 

Mimo ze przy kompilacji widac wyraznie ze uzywa tego patcha z katalogu portage

Otrzymuję:

```
iptables -A PREROUTING -t mangle -i eth0 -j IMQ --todev 0 

iptables v1.4.16.3: unknown option "--todev" 
```

Natomiast jeśli sciagne source z netfileter spatchuje iptables i potem ./configure make & make install wszystko działa.

Jest jakis sposob uruchomienia iptables z patchem metoda gentoo wykorzystując emerge?

----------

## Jacekalex

Zobacz lepiej, czy masz moduł:

```
iptables -j IMQ --help
```

----------

## dafqq

W przypadku recznego patchowanie jest ok:

```
iptables -j IMQ  --help | grep -iA2 IMQ

IMQ target options:

 --todev <N>           enqueue to imq<N>, defaults to 0
```

A tutaj z emerge:

```

>>> Emerging (1 of 1) net-firewall/iptables-1.4.16.2

 * iptables-1.4.16.2.tar.bz2 SHA256 SHA512 WHIRLPOOL size ;-) ...        [ ok ]

>>> Unpacking source...

>>> Unpacking iptables-1.4.16.2.tar.bz2 to /var/tmp/portage/net-firewall/iptables-1.4.16.2/work

>>> Source unpacked in /var/tmp/portage/net-firewall/iptables-1.4.16.2/work

>>> Preparing source in /var/tmiptables -j IMQ  --help | grep -iA2 IMQ

p/portage/net-firewall/iptables-1.4.16.2/work/iptables-1.4.16.2 ...

 * Applying iptables-1.4.16.2-static.patch ...                           [ ok ]

 * Applying user patches from /etc/portage/patches//net-firewall/iptables-1.4.16.2 ...

 *   iptables-1.4.13-IMQ-test1.patch ...                                 [ ok ]

 * Done with patching

```

Nastepnie:

# iptables -j IMQ  --help | grep -iA2 IMQ

#

I nie bangla

ten sam problem: https://forums.gentoo.org/viewtopic-p-7298216.html#7298216

----------

## Jacekalex

O ile pamiętam, w łatce trzeba było poprawić ścieżki, bo wypakowuje w złej lokalizacji pliki.

"O ile pamiętam", bo miałem podobny przypał z jakiś rok temu, i po prostu po wypakowaniu skopiowałem pliki tam, gdzie trzeba.

----------

