Назад | Перейти на главную страницу

Мост не пересылает весь трафик (Ubuntu Xenial)

Я новичок в этом мире мостов. У меня возникла проблема, из-за которой я сломал себе шею, но мне это не удалось.

У меня есть машина с установленной (Ubuntu xenial 16.04) с гостевой виртуальной машиной. Я создал мост (virbr - привязанный к vnet1) для пересылки всего трафика с хоста -> ВМ.

Кажется, что не весь трафик перенаправляется изящно. Мы пропускаем много трафика. Например, Trace-1 достиг моста, но не виден на vnet1 (ничего не пересылается) Trace-1 Пример трафика Trace-1 Есть идеи, пожалуйста? В случае Trace-2, все пакеты, видимые на vnet0 (100% перенаправленные), введите здесь описание изображения. Пример трафика Trace-2

Я не трогал iptables

root@physc_host:/proc/sys/net/unix# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps
ACCEPT     all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc
root@physc_host:/proc/sys/net/unix# 

Я нашел решение своей проблемы. Мостам необходимо узнать, какие компьютеры к каким локальным сетям подключены. Говоря более формально, им нужно узнать, следует ли пересылать на каждый адрес. Чтобы узнать, какие адреса используются и к каким портам (интерфейсам на мосту) в теории ближе всего, мосты наблюдают за заголовками полученных кадров Ethernet. Изучая MAC-адрес источника каждого принятого кадра и записывая порт, на котором он был получен, мост может узнать, какие адреса принадлежат компьютерам, подключенным через каждый порт. Это называется «обучение». На рисунке ниже рассмотрим три компьютера X, Y, Z. Предположим, каждый отправляет кадры на другие компьютеры. Наблюдается, что адреса источника X, Y находятся в сети A, тогда как адрес компьютера Z будет находиться в сети B.

Полученные адреса сохраняются в таблице адресов интерфейса, связанной с каждым портом (интерфейсом). После того, как эта таблица была настроена, мост проверяет адрес назначения всех полученных кадров, затем просматривает таблицы интерфейсов, чтобы увидеть, был ли получен кадр с того же адреса (т. Е. Пакет с исходным адресом, совпадающим с текущим адресом назначения). . Существуют три возможности:

  1. Если адрес не найден, значит, от источника не было получено никаких кадров. Источник может не существовать, или он мог не отправлять кадры с использованием этого адреса. (Адрес также мог быть удален мостом из-за того, что программное обеспечение моста недавно было перезапущено, не хватило записей адреса в таблице интерфейса или удален адрес, потому что он был слишком старым). Поскольку мост не знает, какой порт использовать для пересылки кадра, он отправит его на все выходные порты, кроме того, на котором он был получен. (Очевидно, нет необходимости отправлять его обратно в тот же сегмент кабеля, из которого он был получен, поскольку любой другой компьютер / мосты на этом кабеле уже должны были получить пакет.) Это называется лавинной рассылкой.

  2. Если адрес найден в таблице интерфейсов и адрес связан с портом, на котором он был принят, кадр отбрасывается. (Оно должно быть уже получено адресатом.)

  3. Если адрес найден в таблице интерфейсов и адрес не связан с портом, на котором он был получен, мост пересылает кадр на порт, связанный с этим адресом.

Пакеты с источником X и получателем Y принимаются и отбрасываются, поскольку компьютер Y напрямую подключен к LAN A, тогда как пакеты от X с местом назначения Z пересылаются в сеть B мостом.

Чтобы решить эту проблему: Установите нулевое время старения с помощью команды ниже $ brctl setageing br0 0

введите описание изображения здесь