LINUX.ORG.RU
ФорумAdmin

Настройка маршрутизации с использованием одной сетевой карты

 


0

1

Добрый день. Мне нужно настроить маршруты сетевых пакетов, так чтобы они не проходили через интерфейс «lo»

У меня имеется pci сетевая карта с двумя портами spf+ , и эти порты подключены между собой через провод spf. Линк есть, устройство работает.

первый порт сетевой карты: enp2s0 192.168.1.100

второй порт сетевой карты: enp2s0d1 192.168.1.101

Мне нужно, чтоб когда я отправляю данные с enp2s0 на enp2s0d1. Отправленные пакеты, попали сначала на enp2s0, далее по проводу прошли до enp2s0d1 и далее уже обрабатывались enp2s0d1. Сейчас к сожалению, при отправке данных с 192.168.1.100 на 192.168.1.101, «сетевая карта» не задействована, а данные проходят через lo. Думаю, проблема решается настройкой маршрутизации. Но я не знаю, как ее правильно настроить.

netns будет проще всего. Ядро не тупое, и просто так не будет гонять данные по проводу, когда источник и приёмник находятся на одном хосте.

anonymous
()

Нескромный вопрос, а это зачем? Чую XY проблему.

anc ★★★★★
()

То, что ядро не тупое и не будет гонять пакеты, как мне нужно. Это всё понятно. Задача сделать так, чтоб оно, именно гоняла пакеты, как я указал. (с одного порта сетевой карты, на другой порт по проводу).

А зачем это нужно? Причин может быть очень много. Мне не хочется эту тему превращать в обсуждение «а зачем это», вместо простого решения проблемы. Вопрос: как настроить маршрутизацию, чтоб справиться с данной задачей?

Anton3170
() автор топика

Когда вы вешаете какой-то IP на любой из интерфейсов системы, в таблице маршрутизации local появляется запись «local x.x.x.x ...», которая означает, что пакеты на данный адрес маршрутизируются через lo интерфейс. Порядок просмотра таблиц маршрутизации определяется правилами маршрутизации, по умолчанию они выглядят так:

ip rule list

0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

Для достижения того, что вы хотите, вам как минимум нужно чтоб маршрутизация данного вида пакетов не проходила через таблицу local. Можно попробовать сделать так:
# вставляем свои правила перед таблицей local
ip rule add pref 10 lookup local
ip rule del pref 0
ip rule add pref 5 from 192.168.1.100 to 192.168.1.101 lookup 5
ip rule add pref 6 from 192.168.1.101 to 192.168.1.100 lookup 6

# добавляем нужные маршруты
ip route add default dev enp2s0 via 192.168.1.101 table 5
ip route add default dev enp2s0d1 via 192.168.1.100 table 6

# возможно выключить rp_filter
sysctl net.ipv4.conf.all.rp_filter=0

Не уверен, что заработает, но попробовать можно (интересно было бы узнать результат).

Если не выйдет, можно попробовать, как советовали, вариант с другим сетевым namespace:
ip netns add d1
ip link set enp2s0d1 netns d1
ip netns exec d1 bash # сделать/проверить настройки интерфейса
.....

spirit ★★★★★
()
Ответ на: комментарий от Anton3170

вместо простого решения проблемы

Часто так бывает, что решают совсем не ту проблему.

anonymous
()
Ответ на: комментарий от Anton3170

А зачем это нужно? Причин может быть очень много Когда спрашивают «а зачем нужно», подразумевают, что возможно у вашей проблемы есть другое решение, не такое топорное, как вы сами полагаете.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.