Я новичок в этом мире мостов. У меня возникла проблема, из-за которой я сломал себе шею, но мне это не удалось.
У меня есть машина с установленной (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.
Полученные адреса сохраняются в таблице адресов интерфейса, связанной с каждым портом (интерфейсом). После того, как эта таблица была настроена, мост проверяет адрес назначения всех полученных кадров, затем просматривает таблицы интерфейсов, чтобы увидеть, был ли получен кадр с того же адреса (т. Е. Пакет с исходным адресом, совпадающим с текущим адресом назначения). . Существуют три возможности:
Если адрес не найден, значит, от источника не было получено никаких кадров. Источник может не существовать, или он мог не отправлять кадры с использованием этого адреса. (Адрес также мог быть удален мостом из-за того, что программное обеспечение моста недавно было перезапущено, не хватило записей адреса в таблице интерфейса или удален адрес, потому что он был слишком старым). Поскольку мост не знает, какой порт использовать для пересылки кадра, он отправит его на все выходные порты, кроме того, на котором он был получен. (Очевидно, нет необходимости отправлять его обратно в тот же сегмент кабеля, из которого он был получен, поскольку любой другой компьютер / мосты на этом кабеле уже должны были получить пакет.) Это называется лавинной рассылкой.
Если адрес найден в таблице интерфейсов и адрес связан с портом, на котором он был принят, кадр отбрасывается. (Оно должно быть уже получено адресатом.)
Пакеты с источником X и получателем Y принимаются и отбрасываются, поскольку компьютер Y напрямую подключен к LAN A, тогда как пакеты от X с местом назначения Z пересылаются в сеть B мостом.
Чтобы решить эту проблему: Установите нулевое время старения с помощью команды ниже $ brctl setageing br0 0