@bellerofonte

Как маршрутизировать траффик через промежуточный локальный интерфейс?

Есть линуксовая (ubuntu) железка вот с такой конфигурацией сетевых адаптеров:
---------------------------------------------------------------
|                                                             |
|  ---------------      ---------------      ---------------  |
|  |     eth0    |      |     eth1    |      |     eth2    |  |
|  | 192.168.1.2 |      | 192.168.5.1 |      | 192.168.5.2 |  |
|  |     (gw)    |      |             |      |             |  |
|  ---------------      ---------------      ---------------  |
|        ▒▒                     ▒▒                   ▒▒       |
---------▒▒---------------------▒▒-------------------▒▒--------
         ▒▒                     ▒▒                   ▒▒
       router                   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
     192.168.1.1

▒▒  - витая пара

*имена интерфейсов и ip-адреса изменены для простоты восприятия
eth0 и eth1 - встроенные интельные сетевухи, eth2 - PCI сетевуха с наворотами, для под которую пишется низкоуровневый код.
Для этого нужно, чтобы на определенные ip-адреса все пакеты отправлялись с интерфейса eth2 по маршруту
eth2 => [eth1 ~~~ eth0] => router => ISP
Такая схема подключения, если она реализуема, нужна для того, чтобы дампить wireshark-ом на eth1 все пакеты, к/от eth2, т.к. eth2 работает вне линуксового сетевого стека, и на нем дампить не получится.

Какими средствами организовать такую маршрутизацию?

Решение "в лоб" типа:
route add -net xxx.xxx.xxx.xxx/24 dev eth2
не работают.
Подключить eth2 напрямую в маршрутизатор и дампить на нем возможности нет.
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
@bellerofonte Автор вопроса
В итоге решил вопрос с помощью ip netns
Написал следующий скрипт:
#!/bin/sh

# установка и настройка изолированного сетевого пространства имен
ip netns add ns0
ip link set eth2 netns ns0
ip -n ns0 link set lo up
ip -n ns0 link set eth2 up
ip -n ns0 addr add 192.168.5.2/24 dev eth2
ip -n ns0 route add default via 192.168.5.1 dev eth2

# в дефолтном пространстве надо поднять NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.5.2/32 -j MASQUERADE

# и надо запустить отдельный SSH-сервер на новом пространстве
sudo ip netns exec ns0 /usr/sbin/sshd -o PidFile=/run/sshd-ns0.pid

Завернул этот скрипт в oneshot сервис и теперь systemd дергает его при запуске системы.
Можно подключаться ssh 192.168.5.2 и видеть ту же самую локальную машину, которая как бы находится в другой сети, весь трафик которой завернут через eth1 на eth0.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Вам нужно на роутере добавить маршрут до сети 192.168.5.0/24 через IP eth0.
На самом компе добавлять маршрут не нужно, т.к. он имеет IP адреса во всех задействованных сетях, то маршруты уже есть.
Пингами с роутера проверяете доступность IP eth1.
Т.к. eth2 работает мимо ОС, то схема должна работать.
Естественно на компе надо включить маршрутизацию пакетов и настроить/выключить фаервол.
Сниффером слушаете eth1.

Более "чистая" и точно рабочая схема была бы, если использовать второй ПК: eth2<=>второй ПК<=>router
На втором ПК можно настраивать сниффер и видеть весь трафик.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы