Как маршрутизировать ответы TCP / IP через другой интерфейс? - PullRequest
7 голосов
/ 25 мая 2011

У меня есть две машины, каждая с двумя действующими сетевыми интерфейсами, интерфейсом Ethernet eth0 и интерфейсом Tun / Tap gr0. Цель состоит в том, чтобы установить TCP-соединение на машине A с использованием интерфейса gr0, но затем получить ответы (ACK и т. Д.) От машины B через интерфейс Ethernet eth0. Таким образом, машина A отправляет SYN на gr0, а машина B получает SYN самостоятельно gr0, но затем отправляет свой SYN / ACK обратно через eth0. Устройство tun / tap является беспроводным каналом GNU Radio, и мы просто хотим, чтобы ответы поступали через Ethernet.

Какой самый простой способ сделать это? Мне нужно больше исследовать TCP / IP, но я изначально думал, что исходящие пакеты с подменой источника скажут получателю ответить на поддельный адрес (который должен быть направлен на eth0). Это будет включать маршрутизацию IP-адресов от интерфейсов tun / tap через gr0 и оставление другого трафика на eth0.

Мы используем Linux, и было бы предпочтительным решение на Python.

Спасибо за внимание!

Ответы [ 2 ]

5 голосов
/ 25 мая 2011

Вы можете добавить дополнительный адрес к интерфейсу lo в каждой системе и использовать эти новые адреса в качестве конечных точек соединения TCP.Затем вы можете использовать статические маршруты, чтобы указать, какой путь каждая машина использует для получения адреса lo другой машины.

Например:

Machine A:
  ip addr add 1.1.1.1/32 dev lo
  ip route add 2.2.2.2/32 dev eth0 via <eth0 default gateway>

Machine B:
  ip addr add 2.2.2.2/32 dev lo
  ip route add 1.1.1.1/32 dev gr0

Затем привязать к 1.1.1.1 на машинеА и подключиться к 2.2.2.2.

2 голосов
/ 26 мая 2011

Вас может заинтересовать включение регистрации марсианских пакетов net.ipv4.conf.all.log_martians и отключение фильтрации обратного пути net.ipv4.conf.<interface>.rp_filter на задействованных интерфейсах.

Доступ к этим переменным sysctl возможен с помощью утилиты sysctl и / или/proc файловая система.

...