Ключевые слова:xen, ethernet, bridge, network, virtual, (найти похожие документы)
From: Михаил Сгибнев
Date: Mon, 22 May 2008 17:02:14 +0000 (UTC)
Subject: Использование нескольких сетевых карт в XEN 3.0
Оригинал: http://dreamcatcher.ru/index.php?option=com_content&task=view&id=97&Itemid=2
Краткая статья, повествующая о назначении различных физических сетевых
интерфейсов гостевым доменам.
Перевод: Сгибнев Михаил, Original
Xen - классная штука, но работа с несколькими сетевыми платами для меня
оказалась большой проблемой. Есть несколько теоретических документов,
описывающих принцип такой работы, но практической реализации мне
встретить не удалось. Данная статья призвана заполнить этот пробел.
Использование бриджа для Dom является неплохой идеей, но в этом случае
любые пакеты могут быть перехвачены другим Dom. Наличие одной сетевой
платы в Xen означает, что есть теоретическая возможность снифить пакеты
со всех Dom. Решить данную проблему нам поможет наличие нескольких
сетевых карт.
В данном случае мы имеем сервер с тремя сетевыми картами, при этом
первая используется для доступа к Dom0 и другим гостевым DomN, вторая
для работы с Dom1 и третья для работы с Dom2. Файл конфигурации Dom
должен выбрать соответствующий бридж для каждого домена.
Топология
eth0 - xenbr0 - Dom0, DomN
eth1 - xenbr1 - Dom1 (cannot be sniffed by Dom0, DomN or Dom2)
eth2 - xenbr2 - Dom2 (cannot be sniffed by Dom0, Dom1 or Domn)
Преимущество использования бриджа состоит в отсутствии маршрутизации.
/etc/xen/xend-config.sxp:
...
#(network-script network-bridge)
(network-script my-network-script)
...
Изменим скрипт для работы больше чем с одним мостом:
/etc/xen/scripts/my-network-script:
#!/bin/sh
dir=$(dirname "$0")
"$dir/network-bridge" "$@" vifnum=0 netdev=eth0 bridge=xenbr0
"$dir/network-bridge" "$@" vifnum=1 netdev=eth1 bridge=xenbr1
"$dir/network-bridge" "$@" vifnum=2 netdev=eth2 bridge=xenbr2
Не забудьте выставить права доступа chmod u+x для этого скрипта!
В заключение сконфигурируем каждый DomU:
/etc/xen/anyXmDomain.cfg: (не забудьте изменить mac-адрес)
...
# use eth0 for this DomU
vif = ['ip=10.XX.XX.230,mac=00:16:de:ad:fa:ce,bridge=xenbr0']
...
или
...
# use eth1 for Dom1
vif = ['ip=10.XX.XX.234,mac=00:16:de:ad:be:ef,bridge=xenbr1']
...
или
...
# use eth2 for Dom2
vif = ['ip=10.XX.XX.238,mac=00:16:be:ef:fa:ce,bridge=xenbr2']
...
Как я уже говорил, для Dom0 или DomU нет никакой маршрутизации, кроме
обычного шлюза по умолчанию, как если бы вы работали с единственной
сетевой картой, подключенной к Xen.
Для DomU ничего кардинально не меняется. Каждый DomU будет
автоматически использовать бридж, определенный в файле конфигурации.
Единственное отличие, на которое вы обратите внимание заключается в
том, что светодиоды сетевых карт будут мигать только когда
отсылаются/принимаются пакеты с соответствующих доменов. Вы даже можете
выдернуть патчкорд из NIC (eth0) в то время как Dom1 (eth1) и Dom2
(eth2) будут продолжать свою работу.
Dom0 routing:
# netstat -arn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.XX.XX.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 10.XX.XX.254 0.0.0.0 UG 0 0 0 eth0
Dom0 bridging:
# brctl show
bridge name bridge id STP enabled interfaces
xenbr0 8000.feffffffffff no peth0
vif0.0
vif1.0
vif3.0
vif4.0
xenbr1 8000.feffffffffff no peth1
vif0.1
vif6.0
xenbr2 8000.feffffffffff no peth2
vif0.2
vif7.0
Каждый DomU может использоваться как обычно. Сам DomU даже не знает,
что использует другой мост. С точки зрения DomUs есть (виртуальная)
сетевая карта, которая будет использоваться как eth0.
Dom1/Dom2 eth0 configuration: (HWaddr is Dom1)
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:16:DE:ED:BE:EF
inet addr:10.XX.XX.234 Bcast:10.XX.XX.255 Mask:255.255.255.0
inet6 addr: fe80::216:daff:feda:ba5e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:257357 errors:0 dropped:0 overruns:0 frame:0
TX packets:238053 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:32954128 (31.4 MiB) TX bytes:51239288 (48.8 MiB)
Проблем с маршрутизацией тоже никаких не возникает.
Dom1/Dom2 routing:
# netstat -arn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.XX.XX.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 10.XX.XX.254 0.0.0.0 UG 0 0 0 eth0
Вот, славная победа и результат достигнут, все расходятся пить пиво. Я
считаю это более простым и красивым решением по сравнению с настройкой
шины pci непосредственно от DomX, который также был бы возможным.