Intermediate Queueing
Z Wikipedii
IMQ (ang. Intermediate queueing) to "pośrednie urządzenie kolejkujące" używane w systemie operacyjnym Linux.
Jest to wirtualny interfejs wykorzystywany przy sterowaniu ruchem wchodzącym lub wychodzącym z routera, na przykład z pomocą pakietu iproute2. W odróżnieniu od rzeczywistych interfejsów, takich jak eth czy ppp, IMQ:
- nie ma adresu sprzętowego, a więc nie działają na nim protokoły ARP czy RARP
- nie posiada adresu IP
- cały ruch wchodzący do tego interfejsu jednocześnie go opuszcza.
IMQ umożliwia rozwiązanie 2 problemów:
- Sterowanie ruchem wchodzącym przez rzeczywisty interfejs. Jeśli chcemy ograniczyć ruch wchodzący przez rzeczywisty interfejs, to wystarczy za pomocą iptables cały ruch z niego skierować do imq i sterować ruchem na wyjściu imq, czyli faktycznie na wejściu interfejsu rzeczywistego.
- Sterowanie ruchem przechodzącym przez więcej niż jeden interfejs rzeczywisty.
Przykład wydruku komendy ifconfig, obrazujący różnice pomiędzy interfejsem rzeczywistym a wirtualnym:
eth0 Link encap:Ethernet HWaddr 00:E0:4C:75:01:E7 inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2383775 errors:0 dropped:0 overruns:0 frame:0 TX packets:2583178 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:586768599 (559.5 Mb) TX bytes:1718379338 (1638.7 Mb) Interrupt:10 Base address:0x1000 imq0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 UP RUNNING NOARP MTU:1500 Metric:1 RX packets:1852185 errors:0 dropped:0 overruns:0 frame:0 TX packets:1852185 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:30 RX bytes:1605531582 (1531.1 Mb) TX bytes:1605531582 (1531.1 Mb)
Koncepcję IMQ opracował i dokonał pierwszej implementacji Martin Devera, następnie prace nad IMQ przejął Patrick McHardy, który potem zrezygnował z jego rozwijania, lecz obecnie IMQ znów się rozwija. Aktualną implementację IMQ można znaleźć na stronie http://www.linuximq.net/