Копирование пакетов с интерфейса на другой

9

У меня есть система Linux (пусть это будет A) с двумя сетевыми картами, а именно eth0 и eth1, которые подключены к двум совершенно не связанным локальным сетям.

По сути, eth0 используется для обычного трафика приложений, а eth1 используется только для целей отладки. Отладка означает, что eth1 связан с помощью кросс-кабеля с другой коробкой Linux (пусть это будет B), которая запускает Wireshark. Я хочу, чтобы Wireshark мог обрабатывать пакеты приложений, путешествующие по eth0 А.

По сути, мне нужно скопировать путевые пакеты с интерфейса eth0 на интерфейс eth1, чтобы Wireshark на блоке B мог их прослушивать (по некоторым причинам у меня нет физического доступа к локальной сети eth0). Мне также может понадобиться указать, какие пакеты копировать из eth0 в eth1 согласно некоторому правилу (кстати, основываясь только на полях TCP / IP).

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

Есть ли способ добиться этого, используя только iptables? Или мне нужно написать приложение, чтобы сделать эту работу? Что я должен сделать, чтобы "скопировать" пакеты?

Эмилиано
источник

Ответы:

7

Если у вас достаточно свежее ядро, вы можете использовать iptables --tee для пересылки кадров с eth0 на машину захвата.

Джеральд Комбс
источник
Эта ссылка теперь защищена паролем.
Труба
4

Вы можете использовать tc mirred action. Например: для входящего трафика:

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
Undefine
источник
3

Поищите в сети tcpbridge, что и делает работа. Его также можно использовать для общения с виртуальными машинами.

Вальтер
источник
1

Может работать что-то вроде rinetd (перенаправитель / сервер только для TCP, я полагаю, что нет ARP, Layer 2 и т. Д.), Но, если честно, получить некоторые управляемые коммутаторы, которые имеют возможности зеркалирования портов или если этот ящик используется исключительно для wireshark, Вы можете добавить другой сетевой адаптер к нему, соединить два интерфейса, поместить его перед eth0 машины A и получить выделенный анализатор.

gravyface
источник
1

Устройство, которое копирует кадры Ethernet из одного интерфейса в другой, является мостом. Вы можете настроить свою систему Linux для работы в качестве моста. Некоторая документация может быть найдена здесь:

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

larsks
источник
0

В моей настройке многоадресный TX-трафик был отмечен iptables, но политика маршрутизации с использованием новых таблиц маршрутизации никогда не работала. Хотя он работал для одноадресных пакетов TX (перенаправляя исходящие пакеты с eth0 на eth5). Используя tc, я мог получить eth0 mcast-трафик к eth5. Src mac и src ip-адрес были изменены по сравнению с 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 --match multiport --dports 329,330 -o eth0 -j MARK - set-mark 2

Собираемся создать дерево, которое представляет нашу политику планирования и использует PRIO qdisc (планировщик пакетов) (можно попробовать другие доступные). qdiscs прикрепление в корне устройства

tc qdisc добавить dev eth0 корневой дескриптор 15: prio

Теперь на одной стороне есть политика формирования трафика, а на другой - маркировка пакетов. Чтобы соединить два, нам нужен фильтр.

refer man tc-mirred (8): действие mirred позволяет зеркалировать (копировать) или перенаправлять (красть) пакет, который он получает. Зеркалирование - это то, что иногда называют анализатором портов коммутатора (SPAN) и обычно используется для анализа и / или отладки потоков.

см. man tc-fw (8): fw - фильтр управления трафиком fwmark, фильтр fw позволяет классифицировать пакеты на основе ранее установленного fwmark по iptables. Если он идентичен «дескриптору» фильтра, фильтр совпадает. iptables позволяет помечать одиночные пакеты с целью MARK или целые соединения, используя 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} труба \ action pedit ex munge ip src set $ {IP_ADDR_ETH1} труба \ действие зеркальный выход красный dev eth1

показать выше установленные правила: tc qdisc показать dev eth0 tc filter показать dev eth0

удалить / сбросить установленные выше правила: tc qdisc del dev eth0 root

Ноэль Ав
источник