подключение к нескольким маршрутизаторам Ethernet с помощью одного адаптера

подключение к нескольким маршрутизаторам Ethernet с помощью одного адаптера

Возможный дубликат:
Как объединить два разных интернет-подключения

Я ищу наилучший подход к подключению к нескольким маршрутизаторам через один адаптер Ethernet и его побочные эффекты.
У меня есть один ПК с Linux и одним портом Ethernet, подключенный к коммутатору. Этот коммутатор подключен к нескольким маршрутизаторам с разными сетями (например, 192.168.1.1, 192.168.2.1, 192.168.3.1). Я хочу иметь возможность привязывать сокет к определенному «устройству», поэтому я буду использовать соответствующий маршрутизатор для этого подключения.
Я считаю, что этого можно добиться, создав виртуальный интерфейс Eth для каждого маршрутизатора и установив правильный IP/подсеть/шлюз для каждого из них.
Вопросы: правильно ли это? Как это сделать? Стоит ли мне подозревать странные побочные эффекты.
* Общая скорость сети от всех маршрутизаторов вместе не превысит даже 10 Мбит/с.

решение1

Здесь нет необходимости в виртуальных интерфейсах. То, что вам нужно, это несколько IP-адресов на одном устройстве и хорошие таблицы маршрутизации с политикой маршрутизации для выбора используемой таблицы маршрутизации. Теперь о конфигурации. Давайте настроим ваши IP-адреса с помощью /32, чтобы мы могли сами создавать маршруты on-link

ip addr flush dev eth0
ip addr add 192.168.1.yourhost/32 dev eth0
ip addr add 192.168.2.yourhost/32 dev eth0
ip addr add 192.168.3.yourhost/32 dev eth0

Теперь о таблице маршрутизации. Первая таблица маршрутизации будет сопоставлять пакеты, которые идут в ваши локальные сети.

ip route add 192.168.1.0/24 dev eth0 src 192.168.1.yourhost table 2
ip route add 192.168.2.0/24 dev eth0 src 192.168.1.yourhost table 2
ip route add 192.168.3.0/24 dev eth0 src 192.168.1.yourhost table 2

table 2указывает, какую таблицу маршрутизации использовать. 2 — произвольное число. числа можно сопоставить с именами, отредактировав /etc/iproute2/rt_tables. Давайте добавим 2 lanв этот файл, теперь вы можете просто использовать table lan.

Теперь давайте использовать эту таблицу маршрутизации по умолчанию:

ip rule add table lan

Теперь, если вы посмотрите на вывод ip rule, вы увидите что-то вроде этого:

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

local— это зарезервированная таблица, используемая для того, чтобы ядро ​​могло проверить, является ли IP-адрес его собственным IP-адресом, lan— это наша таблица, main— это обычная таблица маршрутизации, которую вы знаете, и default— это специальная таблица для пакетов, которые мы не можем маршрутизировать. По сути, ядро ​​будет пробовать эти правила, начиная с первого, и, если оно не может найти маршрут в этой таблице, оно переходит к следующему правилу.

Итак, мы добавили еще одну таблицу маршрутизации, в которую мы помещаем наши маршруты в LAN, которая пробуется перед таблицей main. Теперь давайте добавим маршрут по умолчанию в main: Когда вы не привязываете сокет к IP-адресу, вы будете использовать только этот маршрут по умолчанию. Давайте выберем 192.168.1.1:

ip route add default via 192.168.1.1 src 192.168.1.yourhost

Теперь, если вы привязываете свой сокет к 192.168.2.yourhost, вы не хотите использовать этот маршрут по умолчанию, а другой. Давайте добавим этот маршрут по умолчанию в другую таблицу маршрутизации:

ip route add default via 192.168.2.1 src 192.168.2.yourhost dev eth0 table 3
# and while we are at it, let's do this for 192.168.3.1 as well
ip route add default via 192.168.3.1 src 192.168.3.yourhost dev eth0 table 4

Теперь вы хотите использовать эти таблицы маршрутизации, но только если ваш сокет привязан к этим другим IP-адресам.

ip rule add from 192.168.2.yourhost iif lo table 3
ip rule add from 192.168.3.yourhost iif lo table 4

from 192.168.2.yourhostзаставит ядро ​​пробовать таблицу только в том случае, если исходный IP-адрес в пакете — 192.168.2.yourhost. iifпозволяет указать, с какого интерфейса был получен пакет (что полезно при пересылке трафика) со специальным исключением, где iif loозначает, что трафик был сгенерирован локально.

Теперь вы можете проверить, работает ли это, попробовав или используя ip route getкоманды для проверки ваших таблиц маршрутизации:

$ ip route get 192.168.2.5
192.168.2.5 dev eth0  src 192.168.2.yourhost 
    cache
$ ip route get 64.34.119.12
64.34.119.12 via 192.168.1.1 dev eth0 src 192.168.1.yourhost 
    cache
$ ip route get 64.34.119.12 from 192.168.2.yourhost
64.34.119.12 via 192.168.2.1 dev eth0 src 192.168.2.yourhost 
    cache

Связанный контент