LINUX.ORG.RU

соединить две VM на одной машине через бридж

 , , ,


0

1

Настраиваю light-weigh виртуальную машину lkvm (http://git//git.kernel.org/pub/scm/linux/kernel/git/will/kvmtool.git) для общения между собой. VM при запуске создает tun интерфейсы на хостеь (аналогично тому как делают другие VM).


               VM1                          VM2
          +----------+                 +-----------+
          |          |                 |           |
tap0 -----+eth0  eth1+--tap1-----tap2--+eth0   eth1+--tap3-
          |          |                 |           |
          +----------+                 +-----------+

1) на обоих VM включена маршрутизация, на всякий случай отключен rp_filter

2) на обоих VM установлены соответствующие маршруты

3) на всех VM прописаны IP адреса на интерфейсах

4) создаем и поднимаем bridge девайс на хосте, интерфейсы tap1 and tap2 добавлены в bridge, на tap1/tap2/bridge IP адреса не прописаны (не уверен нужно ли??)

5) включена маршрутизация на хосте

6) адреса следующие:

   VM1 eth0 20.20.20.2/24
       eth1 30.30.30.2/24
   VM2 eth0 30.30.30.3/24
       eth1 40.40.40.2/24

Но по каким-то причинам не работает, пинг не ходит с VM1 eth1->tap1->br->tap2->eth0 (хотя вижу пакеты на tap1 and bridge девайсе, но не на tap2.) или наоборот с VM2.

Что я делаю не так?

★★

А у тебя tap или tun интерфейсы используются? Когда-то давно встречал, что для моста нужно использовать tap-интерфейс.

anonymous
()

Что я делаю не так?

tcpdump может помочь понять.

Возможно файрволл (iptables) не пускает пакеты.

Deleted
()

Ты что-то совсем не там углубился. По-умолчанию, в обычной убунте-дебиане iptables всё разрешено и это не надо уточнять. На хосте создёшь бридж, изолируешь его и включаешь в него машины. Соответственно, это на хосте надо углубиться в iptables, а не в виртуальных машинах.

$IPTABLES -A FORWARD -i $LAN_41_IFACE -o $LAN_41_IFACE -j ACCEPT
$IPTABLES -A FORWARD -o $LAN_41_IFACE -j REJECT --reject-with icmp-port-unreachable
$IPTABLES -A FORWARD -i $LAN_41_IFACE -j REJECT --reject-with icmp-port-unreachable

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

targitaj ★★★★★
()
Последнее исправление: targitaj (всего исправлений: 2)
Ответ на: комментарий от cruz7

файрволла/iptables нет

Что говорит

iptables-save
На хосте и в гостевых системах?

Deleted
()
Ответ на: комментарий от cruz7

lkvm создает tun-девайсы, попробую убедить lkvm создать tap девайс. Спасибо за совет.

tun-интерфейсы в принципе в мост добавить нельзя, так что если интерфейсы добавились в мост без ошибки, то они - tap.

P.S. Ты попробовал при помощи tcpdump определить на каком этапе у тебя перестают проходить пакеты?

Deleted
()
               VM1                          VM2
          +----------+                 +-----------+
          |          |                 |           |
tap0 -----+eth0  eth1+--tap1-----tap2--+eth0   eth1+--tap3-
          |          |                 |           |
          +----------+                 +-----------+

В чём рисовал блоксхему, если не секрет? Вряд ли же вручную.

fehhner ★★★★★
()
Последнее исправление: fehhner (всего исправлений: 1)
Ответ на: комментарий от Deleted
% ip -d link show dev tap0

тем не менее говорит что tap0 типа tun, но все равно в бридж добавляется.

Если пинговать VM1 -> VM2 (ping 30.30.30.3), то tcpdump показывает пакеты на tap1, br но не на tap2.

IP адреса следующие: eth1/VM1 30.30.30.2/24, eth0/VM2 - 30.30.30.3/24

При этом MAC адреса резолвятся корректно.

cruz7 ★★
() автор топика
Последнее исправление: cruz7 (всего исправлений: 2)
Ответ на: комментарий от cruz7

Если пинговать VM1 -> VM2 (ping 30.30.30.3), то tcpdump показывает пакеты на tap1, br но не на tap2.

Попробуй на хосте сделать так:

sysctl net.bridge.bridge-nf-call-iptables=0

Deleted
()
Ответ на: комментарий от cruz7

За что сий параметр отвечает?

Выключает использование iptables для мостов. Насколько я помню, по умолчанию весь трафик, проходящий через мост, проходит через filter/FORWARD в iptables. И видимо у тебя на хосте в цепочке FORWARD всё дропается.

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

Deleted
()

MAC-адреса там хотя бы разные на интерфейсах-то?

post-factum ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.