У меня есть система 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? Или мне нужно написать приложение, чтобы это работало? Что мне делать, чтобы «скопировать» пакеты?
Если ваше ядро достаточно новое, вы можете использовать iptables --tee для пересылки кадров с eth0 на машину захвата.
Вы можете использовать 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
Поищите в сети tcpbridge, что и делает задание. Его также можно использовать для общения с виртуальными машинами.
Что-то вроде Rinetd мощь работа (редиректор / сервер по TCP только Я считаю, что нет ARP, уровня 2 и т. Д.), Но, честно говоря, получив несколько управляемых коммутаторов, которые имеют возможности зеркалирования портов, или если этот блок используется исключительно для wirehark, вы можете добавить к нему еще одну сетевую карту, соединить два интерфейса , поместите его перед 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 add 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 filter add dev eth0 parent 15: 0 протокол ip prio 1 handle 0x2 fw action pedit ex munge eth src set $ {MAC_ADDR_ETH1} pipe \ action pedit ex munge ip src set $ {IP_ADDR_ETH1} pipe \ action mirred egress redirect dev eth1
показать указанные выше правила: tc qdisc show dev eth0 tc filter show dev eth0
удалить / отключить установленные выше правила: tc qdisc del dev eth0 root