У меня есть система 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? Или мне нужно написать приложение, чтобы сделать эту работу? Что я должен сделать, чтобы "скопировать" пакеты?
источник
Вы можете использовать tc mirred action. Например: для входящего трафика:
Для исходящего трафика:
источник
Поищите в сети tcpbridge, что и делает работа. Его также можно использовать для общения с виртуальными машинами.
источник
Может работать что-то вроде rinetd (перенаправитель / сервер только для TCP, я полагаю, что нет ARP, Layer 2 и т. Д.), Но, если честно, получить некоторые управляемые коммутаторы, которые имеют возможности зеркалирования портов или если этот ящик используется исключительно для wireshark, Вы можете добавить другой сетевой адаптер к нему, соединить два интерфейса, поместить его перед eth0 машины A и получить выделенный анализатор.
источник
Устройство, которое копирует кадры Ethernet из одного интерфейса в другой, является мостом. Вы можете настроить свою систему Linux для работы в качестве моста. Некоторая документация может быть найдена здесь:
Вы можете применить правила фильтрации к мостовому трафику, используя ebtables , который является аналогом
iptables
для трафика уровня 2.источник
В моей настройке многоадресный 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
источник