Полноценной статьи не будет. Тем более, что и писать об установке очередную статью писать смысла не вижу. Подобные вещи описаны в большом количестве в Сети и на русском, и на английском. Посему больше хотелось бы написать про те вопросы, которые возникли у меня.
Итак, дело обстоит так - есть достаточно мощный сервер: Core i7, 8 гигабайт оперативки и 1.5 терабайта места. Необходимо поднять на нем виртуальную машину, операционка в которой будет иметь внешний IP-адрес. И, самый главный момент, сервер удаленный. Доступ к нему имеется исключительно по SSH.
По идее сложного ничего нет. Но некоторые вещи были для меня настолько не очевидны (сам, конечно, виноват, признаю), что пришлось потратить на все это дело какое-то время. Начнем с того, что до этого момента мне с бриджем сталкиваться не приходилось. Вот не приходилось и все. Кстати, в качестве операционной системы для хоста был выбран Дебиан, поэтому относительно этого дистрибутива описания и будут.
В качестве системы виртуализации я остановился на KVM. Во-первых, потому что уже в ядре, во-вторых, по моим личным ощущениям работает чуть быстрее и менее нагружает систему, чем Xen. Может и не прав я, но все же.
Процесс установки KVM описывать не буду, как я и говорил, статей написано уже море. Первый момент был таков: раз нужен внешний айпишник на виртуалке, значит без бриджа не обойтись. Но... Сервер удаленный, я мосты не поднимал никогда, и в случае каких-либо проблем связь с машиной будет потеряна. Особых проблем это не доставит, есть возможность удаленного включения Rescue Mode, но это занимает времени не мало. После нескольких попыток попробовать поднять бридж и нескольких возвратов конфигурации после невозможности поднять сеть на сервере, я вдруг вспомнил про возможность дать интерфейсу алиас. Это позволяло настраивать бридж безболезненно для основного интерфейса. Итак, несколько листингов будет.
напомню, что в Дебиане сетевые настройки расположены в файле /etc/network/interfaces.
# Loopback device:
auto lo
iface lo inet loopback
# device: eth0
#auto eth0
#iface eth0 inet static
# address 88.198.52.135
# broadcast 88.198.52.159
# netmask 255.255.255.224
# gateway 88.198.52.129
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 88.198.52.135
netmask 255.255.255.224
network 88.198.52.128
broadcast 88.198.52.159
gateway 88.198.52.129
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
# default route to access subnet
up route add -net 88.198.52.128 netmask 255.255.255.224 gw 88.198.52.129 eth0
# Loopback device:
auto lo
iface lo inet loopback
# device: eth0
auto eth0
iface eth0 inet static
address xx.xx.xx.135
broadcast xx.xx.xx.159
netmask 255.255.255.224
gateway xx.xx.xx.129
Это настройки системы по умолчанию. Добавим алиас. Для этого допишем следующее:
# device: eth0:0
auto eth0:0
iface eth0 inet static
address xx.xx.xx.151
broadcast xx.xx.xx.159
netmask 255.255.255.224
После редактирования конфига перезапускаем сеть и проверяем, что интерфейс eth0 имеет алиас.
Теперь можно баловаться с бриджем. Снова открываем тот же файл и приводим его к такому виду:
# Loopback device:
auto lo
iface lo inet loopback
# device: eth0
auto eth0
iface eth0 inet static
address xx.xx.xx.135
broadcast xx.xx.xx.159
netmask 255.255.255.224
gateway xx.xx.xx.129
auto eth0:0
iface eth0:0 inet manual
auto br0
iface br0 inet static
address xx.xx.xx.151
netmask 255.255.255.224
network xx.xx.xx.128
broadcast xx.xx.xx.159
gateway xx.xx.xx.129
bridge_ports eth0:0
# default route to access subnet
up route add -net xx.xx.xx.128 netmask 255.255.255.224 gw xx.xx.xx.129 eth0
Сохраняем и перезапускаем сеть. Можно перегрузиться даже для того, чтобы убедиться, что все нормально поднимается. Если будут какие-то ошибки, смотрим логи и исправляем.
Если же все прошло нормально, после перезагрузки сеть поднялась и сервер доступен и пингуется обеим IP-адресам, то самое время снова поправить конфиг, удалив оттуда алиас и подняв мост уже на основном интерфейсе. У меня в итоге получилось вот так:
# Loopback device:
auto lo
iface lo inet loopback
# device: eth0
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address xx.xx.xx.135
netmask 255.255.255.224
network xx.xx.xx.128
broadcast xx.xx.xx.159
gateway xx.xx.xx.129
bridge_ports eth0
# default route to access subnet
up route add -net xx.xx.xx.128 netmask 255.255.255.224 gw xx.xx.xx.129 eth0
Очередная перезагрузка, дабы убедиться, что все в порядке и работает нормально. И смотрим вывод inconfig:
br0 Link encap:Ethernet HWaddr 40:61:86:2b:87:a6
inet addr:xx.xx.xx.135 Bcast:xx.xx.xx.159 Mask:255.255.255.224
inet6 addr: fe80::4261:86ff:fe2b:87a6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:76585400 errors:0 dropped:0 overruns:0 frame:0
TX packets:83969297 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:41794612663 (41.7 GB) TX bytes:61647808570 (61.6 GB)
eth0 Link encap:Ethernet HWaddr 40:61:86:2b:87:a6
inet6 addr: fe80::4261:86ff:fe2b:87a6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:43576052 errors:0 dropped:0 overruns:0 frame:0
TX packets:45777515 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:29177835387 (29.1 GB) TX bytes:32751417722 (32.7 GB)
Interrupt:249 Base address:0x2000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:233995 errors:0 dropped:0 overruns:0 frame:0
TX packets:233995 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:870168643 (870.1 MB) TX bytes:870168643 (870.1 MB)
vnet0 Link encap:Ethernet HWaddr 76:8c:af:d9:40:b6
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
inet6 addr: fe80::748c:afff:fed9:40b6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:468 (468.0 B)
Вот и готово. Теперь можно ставить систему в виртуальную машину, выбрав в качестве способа подключения к сети существующий на данный момент bridge.
И на последок есть маленькое замечание о настройке сети уже в виртуалке. У меня после установки операционной системы в виртуальной машине не пинговался присвоенный ей IP-адрес. Причина оказалась достаточно банальна - маршрут по умолчанию. Полные сетевые настройки с виртуалки я приводить не буду, только одну строку:
gateway xx.xx.xx.135
Здесь в качестве шлюза выступает созданный ранее мост.
Да возможно проблемы и с мостом, и с настройкой сети несколько надуманные. Но я с ними столкнулся и потратил n-ное количество времени на их решение. Может быть кому-то пригодится и он, этот кто-то, съэкономит себе время. Я буду только рад. :)