2

Я знаю, что возможно дать несколько IP-адресов одному и тому же интерфейсу, скажем, eth0. Также возможно создать несколько виртуальных интерфейсов на одном физическом сетевом адаптере, скажем, eth0:1, eth0:2, ....

Предположим, теперь все они принадлежат одной подсети. Могу ли я сделать политику маршрутизации с ними? Например, имея несколько маршрутизаторов в одной подсети, я могу назначить разные шлюзы

  1. разные виртуальные интерфейсы?
  2. разные IP-адреса на одной сетевой карте?

Я пытался и потерпел неудачу, пока. Теперь мне интересно, является ли это проблемой в моих конфигурациях или проблемой принципиального характера, т. Е. Это просто невозможно сделать.

РЕДАКТИРОВАТЬ:

В конце концов, мне удалось заставить его работать, и я хотел бы поделиться этим руководством для случайного нуждающегося peruser. Я использую дистрибутив семейства Debian. Когда я найду время, я опубликую эквивалент для системных дистрибутивов, Fedora, Arch Linux, ...

Я не хочу использовать IP-псевдонимы, потому что это устаревшая технология, которая используется только для обратной совместимости, см. Эту страницу git.kernel.org . Поэтому я разрешаю перенаправлению eth0 через 192.168.73.129, но затем я хочу создать новый виртуальный интерфейс для перенаправления через 192.168.73.1. Я делаю это так: я не изменяю /etc/network/interfaces, где я ничего не настраивал. Я добавил строку

  200 lab

в /etc /iproute2 /rt_tables. Затем я выдаю команды:

  ip link add link eth0 mac0 address 56:61:4f:7c:77:db type macvlan

это создает виртуальный интерфейс mac0 с MAC-адресом 56:61:4f:7c:77:db, который я использую для резервирования адреса в маршрутизаторе;

  ip link set mac0 up

это поднимает это

  dhclient mac0

и это дает ему IP-адрес (всегда один и тот же, благодаря резервированию адреса);

  IP=$(ifconfig | grep -A 1 mac0 | grep inet | awk '{print $2}' | awk -F ":" '{print $2}')

это хранит номер IP виртуального интерфейса mac0 в переменной оболочки IP ;

  ip route del default via 192.168.73.1 dev eth0 
  ip route add default via 192.168.73.129 dev eth0 
  ip route add 192.168.73.0/24 dev eth0
  ip route add default via 192.168.73.1 dev mac0 table lab
  ip route add 192.168.73.0/24 dev mac0 table lab
  ip route del 192.168.73.0/24 dev mac0 table main

Это настраивает таблицу маршрутизации для использования 192.168.73.129 в качестве шлюза по умолчанию для eth0 и 192.168.73.1 в качестве шлюза для mac0 в лаборатории таблицы маршрутизации;

        ip rule add from $IP table lab

это правило определяет , при каких условиях использовать лабораторию таблицы маршрутизации. Все вышеперечисленные команды вставляются в исполняемый скрипт оболочки, а команда для его запуска помещается в /etc/rc.local, так что система при загрузке уже настроена правильно.

Последнее, что нужно сделать, переадресация портов и резервирование адресов. Готово.

Спасибо за вашу помощь.

PS: на случай, если кому-то интересно .... Мне это нужно, потому что у меня дома два маршрутизатора: 192.168.73.1 и 192.168.73.129; первый - обычный маршрутизатор, другой - маршрутизатор DD-WRT, действующий в качестве клиента OpenVPN для сервера OpenVPN моей лаборатории. Весь трафик к 192.168.73.129 перенаправляется в мою лабораторию по очевидным причинам, связанным с работой, в то время как остальная часть семьи использует 192.168.73.1, которая выполняет службу DHCP. Мой рабочий компьютер использует 192.168.73.129 в качестве шлюза. Когда я в дороге, мне иногда нужно получить доступ к бизнесу, связанному с работой, на моем компьютере, на котором работает SSH-сервер, но он проходит через 192.168.73.1. Таким образом, если я пытаюсь подключиться к своему рабочему компьютеру по ssh из дома, запросы приходят через 192.168.73.1, но ответы проходят через 192.168.73.129, и сессия ssh никогда не устанавливается. Придуманное выше решение этой загадки.

2 ответа2

3
  1. Да, ты можешь.
  2. Да, вы можете, если вы говорите об IP на eth0, eth0:1, eth0:2 и так далее. Я никогда не видел несколько IP-адресов на одном сетевом адаптере (вот для чего:1:2)..

Все это можно выполнить с помощью команды ip.

Причина, по которой у вас возникают проблемы с маршрутизацией, заключается в том, что у вас есть только одна таблица маршрутизации, и поскольку интерфейсы находятся в одной подсети, GW по умолчанию для этой подсети будет применяться. Однако, если вы создаете несколько таблиц маршрутизации, вы можете направлять трафик в них и из них на основе интерфейса, на котором они пришли, или исходного IP-адреса, или любого другого типа критериев, доступных вам в этом контексте.

http://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.html

2

Разбивая это:

  • « Интерфейс » (точнее, интерфейс Ethernet) представляет собой фактическое аппаратное обеспечение, имеет уникальный MAC-адрес и работает на физическом уровне и канальном уровне. Это на самом деле делает работу общения.
  • Затем вы можете отправлять и получать IP-пакеты на уровне OSI пакетов / дейтаграмм через этот интерфейс.
  • Виртуальный интерфейс - это программная абстракция в ядре, относящаяся либо к реальным аппаратным интерфейсам, либо к туннелям (которые я считаю абстракциями интерфейса).
  • Подсеть - это диапазон возможных IP-адресов, поэтому требуется маршрутизатор.
  • Политика маршрутизации - это маршрутизация, основанная на адресе, отличном от адреса назначения, например, маршрутизация на основе адреса отправителя для направления определенного трафика по другому маршруту.

Я озадачен «наличием нескольких маршрутизаторов в одной подсети».

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

Надеюсь, что это может помочь вам подумать об этом, если ничего другого. Сетевое программное обеспечение может быть очень сложным, и иногда оно удивляет меня тем, что происходит на самом деле.

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