Назад | Перейти на главную страницу

Перенаправление IP - несколько подсетей, несколько портов Ethernet

Здесь есть множество примеров того, как пересылать IP-трафик на Linux-машине, и несколько примеров того, как пересылать трафик с одного интерфейса на другой. Однако большинство последних примеров связано с подключением одной машины к Интернету - у меня есть FPGA, подключенная к машине с Windows, с коробкой Redhat в качестве посредника.

FPGA выдает данные в eth 0 блока redhat, которые затем я хочу переслать машине Windows на eth 1. И FPGA, и окно Windows находятся в разных подсетях, а машина redhat используется, потому что fpga имеет линия 40G выходит из него, а у машины Windows нет карты 40G (скорости передачи данных для этого конкретного случая достаточно низки, чтобы линия 40G не была близка к необходимой - она ​​не должна переполнять линию выхода 1G на eth1). Я пробовал это (безрезультатно):

sudo iptables -t nat -A POSTROUTING -d <windows ip> --out-interface eth1 -j MASQUERADE  
sudo iptables -A FORWARD -d <fpga's ip> --in-interface eth0 -j ACCEPT

Я уже изменил sysctl, чтобы разрешить пересылку через ipv4.

Если я открою шлюзы и скажу машине redhat отправить все, что получает на eth0, на eth1, он отправит какой-то mDNS-запрос на eth1 и ничего не переадресовывает ... Я использую wirehark для просмотра трафика на коробке Redhat.

Я не любитель нетворкинга, поэтому я буду благодарен за объяснение того, что я делаю / не делаю.

Спасибо.

РЕДАКТИРОВАТЬ: Может быть, мне нужно прояснить один момент: IP-адрес назначения пакетов FPGA не является машиной Windows; это коробка красной шляпы. Я хочу, чтобы redhat отправлял копию пакета в Windows.

ОБНОВИТЬ:

После небольшого осмотра; Я нашел ответ: MAC-адрес FPGA и MAC-адрес карты redhat 40G не синхронизировались должным образом. Исправив это, я решил мою проблему.

Первое: вам нужен NAT? Пока можно предположить, что он вам нужен, иначе вы можете пропустить первый iptables введенную вами команду и настроить статический маршрут (или, возможно, настроить маршрут по умолчанию для Windows через поле RedHat). В остальном первое правило верно.

По второй команде: вы добавили правило «принимать» пересылку входящего трафика от eth0 на IP-адрес FPGA, что я считаю неправильным, потому что трафик из ПЛИС, поэтому команда выглядит примерно так:

$ sudo iptables -A FORWARD -s <FPGA's ip> -i eth0 -j ACCEPT

Затем вам нужно правило, разрешающее потоку трафика в обратном направлении:

$ sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

Также вы должны увидеть, добавляется ли (-A) правило правильное (например, если есть другие правила, которые могут помешать). Вы можете увидеть текущую конфигурацию с помощью iptables -vnL FORWARD. Помните, что правила оцениваются от первого до последнего: выигрывает первый матч.

PS: Я предлагаю вам добавить правило, разрешающее пинг ICMP для отладки проблем сети / маршрутизации:

$ sudo iptables -A FORWARD -p icmp --icmp-type 8 -j ACCEPT
$ sudo iptables -A FORWARD -p icmp --icmp-type 0 -j ACCEPT