Копіювання пакетів з інтерфейсу в інший


9

У мене є система Linux (нехай це буде A) з двома Ethernet-картами, а саме eth0 і eth1, які приєднані до двох абсолютно не пов'язаних між собою мереж.

В основному eth0 використовується для нормального трафіку додатків, а eth1 використовується лише для налагодження. Налагодження означає, що eth1 пов'язаний за допомогою перехресного кабелю до іншого вікна Linux (нехай це буде B), який запускає Wireshark. Я хочу, щоб Wireshark мав змогу обробляти пакети програм, подорожуючи на етикетці A0.

В основному мені потрібно скопіювати пакети подорожей з інтерфейсу eth0 на інтерфейс eth1, щоб Wireshark у коробці B міг їх нюхати (чомусь у мене немає фізичного доступу до LAN eth0). Я також міг би вказати, які пакети копіювати з eth0 в eth1 за деяким правилом (до речі, лише на полях TCP / IP).

Також зауважте, що A0 eth0 не потрібно переводити в розбещений режим, оскільки я хочу лише скопіювати підмножину пакетів, у яких A є місцем призначення

Чи є спосіб досягти цього лише за допомогою iptables? Або мені потрібно написати заявку, щоб зробити цю роботу? Що мені робити, щоб "скопіювати" пакети?

Відповіді:



4

Можна використовувати дзеркальну дію tc. Наприклад: для вхідного трафіку:

tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: \
   protocol all prio 2 u32 \
   match u32 0 0 flowid 1:1 \
   action mirred egress mirror dev eth1

Для вихідного трафіку:

tc qdisc replace dev eth0 parent root handle 10: prio
tc filter add dev eth0 parent 10: \
   protocol all prio 2 u32 \
   match u32 0 0 flowid 10:1 \
   action mirred egress mirror dev eth1

3

Шукайте в мережі tcpbridge, саме це і робить робота. З його допомогою можна спілкуватися і з віртуальними машинами.


1

Щось на зразок rinetd може спрацювати ( я вважаю, що переспрямовувач / сервер тільки для TCP , тому немає ARP, 2 рівня тощо), але чесно кажучи, отримуючи керовані комутатори, які мають можливості дзеркального відображення в порту, або якщо це поле використовується виключно для проводів, Ви можете додати до нього ще один NIC, з'єднати два інтерфейси, поставити його перед eth0 машини A і мати спеціальну машину нюхання.


1

Пристрій, який копіює Ethernet-кадри з одного інтерфейсу в інший, є містком. Ви можете налаштувати вашу систему Linux, щоб вона мостувала. Деякі документи можна знайти тут:

Ви можете застосувати правила фільтрації до мостового трафіку за допомогою ebtables , що є аналогом iptablesтрафіку рівня 2.


0

У моїй установці трафік багатоадресної TX був позначений iptables, але маршрутизація політики за допомогою нових таблиць маршрутизації ніколи не працювала. Хоча він працював для одноадресних TX-пакетів (перенаправлення вихідних пакетів з eth0 на eth5). Використовуючи tc, я міг би отримати трафік eth0 mcast на eth5. Src mac та src ip-адреса змінені t-адреса eth5, тому не виникатиме проблем із вивченням комутаторів. Потрібно включити всю підтримку ядра для планування пакетів ядер CONFIG_NET_SCHED

Нижче РОБОТИ для одноадресної та багатоадресної передачі трафіку з eth0 на eth5

Netfilter можна використовувати для взаємодії безпосередньо зі структурою, що представляє пакет в ядрі. Ця структура, sk_buff, містить поле під назвою "__u32 nfmark", яке ми збираємось змінити. Потім TC прочитає це значення для вибору класу призначення пакету.

IP_ADDR_ETH0 = ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n' iptables -t mangle -A OUTPUT -s $ {IP_ADDR_ETH0} -p udp --chch multiport --dports 329.330 -o eth0 -j MARK - set-mark 2

Будемо створювати дерево, яке представляє нашу політику планування, і використовує PRIO qdisc (планувальник пакетів) (можна спробувати інші доступні). qdiscs, що приєднується до кореня пристрою

tc qdisc Додати dev eth0 root ручка 15: prio

Тепер з одного боку встановіть політику формування трафіку, а з іншого - маркування пакетів. Щоб з'єднати ці два, нам потрібен фільтр.

зверніться до man-tc-zrled (8): Дзеркальна дія дозволяє дзеркально відображати (копіювати) або перенаправляти (красти) отриманий пакет. Дзеркальне відображення - це те, що іноді називають аналізатором комутаційних портів (SPAN) і зазвичай використовується для аналізу та / або налагодження потоків.

reference man tc-fw (8): fw - фільтр управління трафіком fwmark, фільтр fw дозволяє класифікувати пакети на основі попередньо встановленого параметра fwmark за допомогою iptables. Якщо він ідентичний "ручці" фільтра, фільтр відповідає. iptables дозволяє позначати окремі пакети цільовою позначкою або цілі з'єднання за допомогою CONNMARK.

MAC_ADDR_ETH1 = cat /sys/class/net/eth1/address IP_ADDR_ETH1 = ifconfig eth1 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n' фільтр tc додати dev eth0 батьків 15: 0 протокол ip prio 1 ручка 0x2 fw дії pedit ex munge eth src set $ {MAC_ADDR_ETH1} труба \ дія pedit ex munge ip src set $ {IP_ADDR_ETH1} труба \ дія перемикання перемикається dev eth1

показати вище встановлені правила: tc qdisc show dev eth0 tc фільтр show dev eth0

видалити / скасувати вище встановлених правил: tc qdisc del dev eth0 root

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.