Рейтинг:0

Маршрутизация между двумя сетевыми картами

флаг ua
Adi

Я пытаюсь направить трафик между разными сетями и следую руководству, которое нашел здесь: https://devconnected.com/how-to-add-route-on-linux/

Вот диаграмма, которая, я надеюсь, адекватно изображает устройство, с которым я работаю:

Виндовс 10 Убунту Линукс
172.31.0.X <----------> 172.31.0.33 (eno1)
                        10.0.40.1 (enp2s0f0) <----------> 10.0.40.10

У меня установлен постоянный маршрут на ПК с Windows для маршрутизации любого трафика для 10.0.40.0/24 через 172.31.0.33.

Выход на печать маршрута

Машина Ubuntu настроена на маршрутизацию трафика, предназначенного для 10.0.40.0/24, через 10.0.40.1.

IP-выход

Пинг 10.0.40.10 с машины Ubuntu работает как положено.

Если я пропингую 10.0.40.10 с ПК с Windows, я увижу, что сообщения ICMP поступают на интерфейс 172.31.0.33 на машине с Ubuntu с помощью tcpdump. Я не вижу трафика на интерфейсе 10.0.40.1 на этой машине. Похоже, что машина с Ubuntu не маршрутизирует трафик, как я ожидал. Может ли кто-нибудь пролить свет на то, что я пропустил?

Добавление вывода:

iptables -S

для машины Ubuntu:

судо iptables -S
# Предупреждение: таблицы iptables-legacy присутствуют, используйте iptables-legacy, чтобы увидеть их
-P ВВОД ПРИНЯТЬ
-P ВПЕРЕД ПРИНЯТЬ
-P ВЫВОД ПРИНЯТЬ
-A ВПЕРЕД -i eno1 -j ПРИНЯТЬ
-A ВПЕРЕД -i enp2s0f0 -j ПРИНЯТЬ
adi@LabBuildServer:~$ sudo iptables-legacy -S
[sudo] пароль для adi:
-P ВВОД ПРИНЯТЬ
-P ПАДЕНИЕ ВПЕРЕД
-P ВЫВОД ПРИНЯТЬ
-N ДОКЕР
-N DOCKER-ИЗОЛЯЦИЯ-ЭТАП-1
-N DOCKER-ИЗОЛЯЦИЯ-СТАДИЯ-2
-N DOCKER-ПОЛЬЗОВАТЕЛЬ
-A FORWARD -j DOCKER-USER
-A ВПЕРЕД -j DOCKER-ИЗОЛЯЦИЯ-ЭТАП-1
-A FORWARD -o docker0 -m conntrack --ctstate СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
-A ВПЕРЕД -o docker0 -j DOCKER
-A ВПЕРЕД -i docker0 ! -o docker0 -j ПРИНЯТЬ
-A ВПЕРЕД -i docker0 -o docker0 -j ПРИНЯТЬ
-A FORWARD -o br-e925d11be2da -m conntrack --ctstate СВЯЗАННЫЙ, УСТАНОВЛЕННЫЙ -j ПРИСОЕДИНЯЙТЕСЬ К PT
-A ВПЕРЕД -o br-e925d11be2da -j ДОКЕР
-A ВПЕРЕД -i br-e925d11be2da ! -o br-e925d11be2da -j ПРИНЯТЬ
-A ВПЕРЕД -i br-e925d11be2da -o br-e925d11be2da -j ПРИНЯТЬ
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i br-e925d11be2da ! -o br-e925d11be2da -j DOCKER-IS OLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j ВОЗВРАТ
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o br-e925d11be2da -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j ВОЗВРАТ
-A DOCKER-USER -j ВОЗВРАТ

Вывод:

IP-маршрут

на хосте Linux:

IP-маршрут
по умолчанию через 10.0.40.1 dev br-POE proto static
10.0.40.0/24 dev br-POE прото-область ядра ссылка src 10.0.40.10

Машина Убунту:

adi@LabBuildServer:~$ sudo iptables -t nat -L
[sudo] пароль для adi:
# Предупреждение: таблицы iptables-legacy присутствуют, используйте iptables-legacy, чтобы увидеть их
Цепь PREROUTING (политика ПРИНЯТЬ)
целевая защита выбор источника назначения

Сеть INPUT (политика ACCEPT)
целевая защита выбор источника назначения

Сеть POSTROUTING (правило ACCEPT)
целевая защита выбор источника назначения
МАСКАРАДируйте все -- где угодно и где угодно
МАСКАРАДируйте все -- где угодно и где угодно

Цепочка OUTPUT (политика ACCEPT)
целевая защита выбор источника назначения
флаг in
Для `/proc/sys/net/ipv4/ip_forward` установлено значение `1`? Я знаю, базовые вещи, но я сбился со счета, сколько раз я усложнял себе жизнь, забывая об этом.
Adi avatar
флаг ua
Adi
Привет @Lacek. Да, он установлен на 1. Всегда стоит проверить! Спасибо.
4snok avatar
флаг es
есть ли у вас какие-либо правила в цепочке пересылки iptables на машине с Ubuntu? Знает ли Linux-машина сеть 172.31.0.x?
Adi avatar
флаг ua
Adi
Привет @4snok, я не добавлял никаких правил iptables. Следуя руководству, которое я связал, нет упоминания об этом, чтобы заставить пинг работать. Это то, что мне нужно?
A.B avatar
флаг cl
A.B
Почему бы вам не задать вопрос здесь, в serverfault, что вы сделали (текстом, а не скриншотами)? Мы действительно не хотим переходить в другое место к учебнику, чтобы попытаться увидеть, что вы на самом деле сделали или не сделали.
4snok avatar
флаг es
пожалуйста, добавьте к вопросам вывод `iptables -S` с хоста Ubuntu и `ip route` с хоста Linux
Adi avatar
флаг ua
Adi
Привет @4snok, я добавил результаты по запросу. Это тебе о чем-нибудь говорит?
4snok avatar
флаг es
не совсем :(, не могли бы вы проверить, есть ли какие-либо правила fw с `iptables-legacy -S`, как предлагает iptables?
4snok avatar
флаг es
попробуйте пропинговать Linux из Ubuntu 172.31. интерфейс, `ping -S 172.31.0.33 10.0.40.10` убедитесь, что он работает. Также я обнаружил, что таблица маршрутизации на машине Windows довольно запутана, например. в вашем постоянном маршруте вы указываете gw `172.31.0.33`, но согласно таблице маршрутизации 172.31.0.33 доступен через 10.255.255.0, нет правила on-link
djdomi avatar
флаг za
В основном используется нат?
Adi avatar
флаг ua
Adi
Вы имели в виду `ping -S` или `ping -I`? `ping -I 172.31.0.33 10.0.40.10` работает как положено.
Рейтинг:1
флаг kz

Решение тут же:

-P ПАДЕНИЕ ВПЕРЕД

В вашей iptables-legacy набор правил, политика по умолчанию для пересылки пакетов установлена ​​на DROP, и в этом наборе правил нет правила, позволяющего пересылать пакеты из эно1 к enp2s0f0, только переадресация с/на мостовой интерфейс...

Всегда очень плохая идея смешивать разные iptables, вы должны решить сами, хотите ли вы использовать iptables или же iptables-legacy - каждый сетевой пакет будет проходить через оба набора правил, вызывая довольно много путаницы.

Обновить:
Мой ответ не должен означать, что вы должны установить политику по умолчанию как принять, я просто указывал на причину. Конечно, вы можете добавить правила, позволяющие перенаправлять трафик только на эти конкретные IP-адреса, например, так:

-A ВПЕРЕД -i eno1 -s 172.31.0.0/24 -o enp2s0f0 -d 10.0.40.0/24 -j ПРИНЯТЬ
-A FORWARD -i enp2s0f0 -s 10.0.40.0/24 -o eno1 -d 172.31.0.0/24 -j ПРИНЯТЬ
Adi avatar
флаг ua
Adi
Спасибо. Да, это выглядит очевидным, когда вы знаете, где искать! Вместо того, чтобы просто изменить это на `-P FORWARD ACCEPT', можно ли оставить это как DROP, а затем добавить конкретное правило только для пересылки трафика с 172.31.0.0/24 на 10.0.40.0/24?
Martin avatar
флаг kz
Конечно, это возможно! Я добавил пример того, как могут выглядеть правила, к ответу...
A.B avatar
флаг cl
A.B
Не забывайте, что это все из-за того, что Docker взаимодействует с сетевыми настройками: https://docs.docker.com/network/iptables/. При устранении неполадок, которые не зависят от Docker, в системе, где работает Docker, первое, что нужно сделать, — отключить Docker и перезагрузить компьютер, а затем повторить попытку. Остановка Docker (а не перезагрузка) не удалит все (например: загруженный модуль `br_netfilter` может сделать любую другую настройку, которая будет использовать свой собственный мост, чтобы выйти из строя без видимой причины).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.