Я не могу найти ответа о том, как Linux обрабатывает входящие пакеты из разных VLAN, которые не принадлежат подсети, назначенной VLAN.
Представьте себе такую ситуацию. На машине Linux со следующей конфигурацией:
адрес шлюза по умолчанию 192.168.100.1, указывающий на интерфейс eth0.100
На порт eth0.150 приходит пакет с адресом источника 10.0.0.100/24, адресованный службе, которая прослушивает 192.168.150.2. Пакет обрабатывается службой (более высокий уровень модели ISO / OSI), и новый пакет (ответ) генерируется на хост 10.0.0.100. Здесь вопрос в том, как будет обрабатываться пакет.
Linux сначала проверяет таблицу ARP, и если в ней есть запись, связанная с хостом 10.0.0.100 (MAC-адрес), отправьте пакет обратно через eth0.150 или сначала просканируйте таблицу маршрутизации, и если совпадений не обнаружите, отправите пакет обратно через интерфейс eth0.100 (с которым он связан шлюзом по умолчанию)?
Не могли бы вы помочь найти правильный ответ?
После настройки виртуальных локальных сетей и IP-адресов в вашей таблице маршрутизации будет 4 маршрута:
192.168.100.2/24 directly connected dev eth0.100
192.168.150.2/24 directly connected dev eth0.150
192.168.200.2/24 directly connected dev eth0.200
default via 192.168.100.1 dev eth0.100
Независимо от того, откуда приходит пакет, на выходе он будет сопоставлен с таблицей маршрутизации. поскольку 10.0.0.100
не является частью какой-либо сети в таблице маршрутизации, он будет отправлен через шлюз по умолчанию («все другие сети»).
ARP используется только внутри локальных сетей Ethernet, поэтому пакет от 10.0.0.100 фактически будет иметь MAC-адрес от маршрутизатора (где-то в vlan150), который перенаправил его на ваш хост.
Когда вы отправляете IP-пакет, вы упаковываете его (инкапсулируете) в пакет Ethernet. Поэтому, когда вы хотите получить доступ к serverfault.com (который, вероятно, находится за пределами вашей локальной сети), вы сначала инкапсулируете его и отправляете пакет с вашим MAC-адресом в качестве исходного адреса и MAC-адресом вашей локальной сети в качестве адреса назначения. Маршрутизатор получает его, смотрит только на IP-пакет, проверяет, куда его направить, а затем инкапсулирует (только IP-пакет) в другой пакет Ethernet, используя свой собственный MAC-адрес на стороне WAN в качестве адреса источника и MAC-адрес восходящего маршрутизатора. в качестве адреса назначения. Затем это повторяется на каждом маршрутизаторе Ethernet в пути.
Поскольку пакет из 10.0.0.100 пришел из другой сети (не из напрямую подключенной), его нужно было маршрутизировать через маршрутизатор, и вы не можете увидеть MAC-адрес 10.0.0.100s.
Конечно, вы можете настроить маршрутизацию (с несколькими таблицами маршрутизации), чтобы пакеты, поступающие с eth0.150, маршрутизировались через шлюз на eth0.150.
РЕДАКТИРОВАТЬ: Как отмечено в комментариях, если у вас включена фильтрация обратного пути на этих интерфейсах, ядро отбрасывает пакет, поскольку интерфейс возврата не такой, как входящий.