1

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

Я ищу лучший подход для подключения к нескольким маршрутизаторам только через один адаптер Ethernet, и его побочные эффекты.
У меня есть один Linux-компьютер с одним портом Ethernet, подключенный к коммутатору. этот коммутатор подключен к нескольким маршрутизаторам с разными сетями (например, 192.168.1.1, 192.168.2.1, 192.168.3.1), и я хочу иметь возможность привязать сокет к определенному "устройству", поэтому я буду использовать соответствующий маршрутизатор для эта связь.
Я считаю, что это может быть достигнуто путем создания виртуального интерфейса eth для каждого маршрутизатора и установки соответствующего ip/subnet/gw для каждого.
вопросы: это правильно? , как это сделать? Должен ли я подозревать странные побочные эффекты.
* общая скорость сети со всех роутеров вместе не превысит 10М.

1 ответ1

2

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

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

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

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 - специальная таблица для пакетов, которые мы не можем маршрутизировать. , По сути, ядро будет пробовать эти правила, начиная с первого, и, если оно не может найти маршрут в этой таблице, оно переходит к следующему правилу.

Таким образом, мы добавили еще одну таблицу маршрутизации, в которую мы помещаем наши маршруты в ЛВС, что делается перед 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .