LINUX.ORG.RU
ФорумAdmin

Не пойму set-xmark.


0

0

Объясните пожалуйста.

Чем они отличаются

--set-mark --set-xmark

Первый маркирует пакет меткой, второй меткой с маской. Не могу понять смысл маски

iptables -t mangle -A POSTROUTING -s 172.16.7.117 -j MARK --set-mark 167117

а что --set-xmark дает?

Если верить man странице, то одно делает OR, а другая XOR. Маску можно указывать и для --set-mark и для --set-xmark.

И то и другое и маска имеет смысл при сложной маркировке пакетов, когда пакет сначала маркируется одним значением, а потом уточняется другим. За счёт маски можно в одном правиле выставить старшие разряды маркера, а в другом правиле выставить младшие разряды.

mky ★★★★★ ()
Ответ на: комментарий от palladium

прогуливал в школе информатику?

anonymous ()
Ответ на: комментарий от palladium

А можно пример? Как происходит уточнение? Именно это не пойму.

Уточнение происходит примерно так:

newmark = (ct->mark & ~info->ctmask) ^ info->ctmark;
if (ct->mark != newmark) {
    ct->mark = newmark;
    nf_conntrack_event_cache(IPCT_MARK, ct);
}
где ctmark — маркировка, ctmask — маска.

Единственное отличие mark от xmark — в случае с mark при установке значения ctmask оно OR'ится с ctmark, что в конечном счете обеспечивает установку заново для всех ненулевых битов ct->mark (а не XOR со старыми).

Чтобы понять, что я только что сказал, действительно необходимого знание базового курса информатики (в частности, булева логика и двоичная система счисления). Но более простого объяснения придумать не могу.

nnz ★★★★ ()
Ответ на: комментарий от palladium

Если вы прочитали про логические операции и понимаете, почему

4 OR 2 = 6 4 OR 4 = 4

то допустим такой пример. Пусть у нас младшие 8 бит характеризуют пакет по типу, а страшие --- по принадлежности к ip-адресам:

iptables -t mangle -A -s 10.1.1.0/24 -j MARK --set-mark 0x100 ... iptables -t mangle -A -p icmp -j MARK --set-mark 0x01/0xff iptables -t mangle -A -p tcp --syn -j MARK --set-mark 0x02/0xff

В результате этих правил у нас могут возникать пакеты с метками 0, 1, 2, 256, 257, 258. Причём потом эти метки (в других правилах) можно опять проверять с использованием маски.

Вышеприведённый пример взят из головы. Если вы не представляете как можно применить маски при маркировке пакетов, значит они вам и не нужны.

mky ★★★★★ ()
Ответ на: комментарий от mky

Опять забыл форматирование :(
4 OR 2 = 6
4 OR 4 = 4

iptables -t mangle -A -s 10.1.1.0/24 -j MARK --set-mark 0x100
...
iptables -t mangle -A -p icmp -j MARK --set-mark 0x01/0xff
iptables -t mangle -A -p tcp --syn -j MARK --set-mark 0x02/0xff

mky ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.