Отправка трафика себе по физической сети в Ubuntu

Отправка трафика себе по физической сети в Ubuntu

У меня есть двухпортовая сетевая карта Ethernet, и, предположим, я соединил оба порта в петлю и назначил следующие IP-адреса двум интерфейсам Ethernet:

  • eth2 -> 192.168.2.1
  • eth3 -> 192.168.3.1

Я хочу отправить трафик с одного из портов на другой по физической сети, например, ping 192.168.3.1с 192.168.2.1. Однако стек TCP/IP в ядре Linux распознает, что эти два адреса являются локальными, и вместо этого отправляет трафик на адаптер обратной связи, поэтому трафик никогда не попадает в физическую сеть.

Ближайшее к решению, которое у меня есть, это решение Анастасова.патч «отправить себе», который, к сожалению, был прекращен с ядра 3.6, поэтому он не будет работать на Ubuntu 13.10 (ядро 3.11) для меня. Я пытался переписать патч для 3.11, но я не могу найти их в дистрибутиве Ubuntu:

  • включить/linux/inetdevice.h
  • net/ipv4/devinet.c
  • net/ipv4/fib_frontend.c
  • net/ipv4/route.c
  • Документация/Сеть/ip-sysctl.txt

Есть ли способ заставить работать патч «отправить себе» или альтернативное решение?

решение1

Создайте сетевое пространство имен и переместите в него один из интерфейсов:

ip netns add test
ip link set eth1 netns test

Запустите оболочку в новом пространстве имен:

ip netns exec test bash

Затем продолжайте, как будто у вас две машины. Когда закончите, выйдите из оболочки и удалите пространство имен:

ip netns del test

решение2

Я еще этого не пробовал, но предполагаю, что есть несколько вариантов обхода проблемы:

виртуальные машины

Решите проблему IP-стека, отделив хотя бы одну из сетевых карт от IP-стека хоста: назначьте ее виртуальной машине. Для тестов производительности это может быть не очень желательно. Но если мощности ЦП достаточно, то, возможно, дополнительный программный слой не станет узким местом (но как узнать?).

разные целевые адреса

Я полагаю, вы хотите, чтобы пакет был передан на уровне 2 только для теста производительности NIC. Поэтому вы можете использовать IP-пакеты с другим IP-адресом (нелокальным, чтобы пакеты в любом случае отправлялись по сети). И тогда вы жульничаете: вы используете ip neighдля создания постоянной записи ARP, которая сопоставляет этот поддельный IP-адрес с MAC-адресом другой NIC.

Вы даже можете сделать IP-соединения таким образом. Но вам придется использовать iptableswith SNATи DNATтак, чтобы обе сетевые карты считали, что они общаются с одним из двух необходимых поддельных IP.

необработанный доступ

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

Связанный контент