У меня есть машина, на которой установлен KVM и мост на eth0 с IP-адресом для машины. У машины есть IP-адрес в диапазоне, свободных IP-адресов больше нет. Я пытаюсь сделать вторую подсеть доступной для гостей KVM, чтобы они могли использовать свои IP-адреса.
network -- eth0 --- bridge0 --|
(x.x.x.75/26) |-- guest0:eth0 (x.x.y.213/28)
|
|-- guest1:eth0 (x.x.y.214/28)
Я создал мост, создав файл ifcfg-bridge0 на хосте, и, как правило, он работает, однако я не могу инициировать соединение из внешнего мира с гостем. Что странно, так это то, что у гостя есть доступ в Интернет, поэтому очевидно, что ответные пакеты попадают туда, куда они направляются, но новые соединения не могут быть установлены. Примером этого является то, что если я подключаюсь к одному из гостей с помощью VNC, я могу выполнить wget http://google.com/
и я получаю страницу.
Как на хосте, так и на гостевом iptables был сброшен, поэтому правил iptables нет. На хосте вывод команды маршрута
host# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
x.x.x.64 0.0.0.0 255.255.255.224 U 0 0 0 bridge0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
169.254.0.0 0.0.0.0 255.255.0.0 U 1004 0 0 bridge0
0.0.0.0 x.x.x.94 0.0.0.0 UG 0 0 0 bridge0
Чтобы попытаться заставить маршрутизацию работать, я попытался добавить статический маршрут к новой подсети на brdge с помощью такой команды, как route add --net x.x.y.208 netmask 255.255.255.240 bridge0
. После добавления маршрута моя таблица маршрутов на хосте выглядит как
host# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
x.x.y.208 0.0.0.0 255.255.255.240 U 0 0 0 bridge0
x.x.x.64 0.0.0.0 255.255.255.224 U 0 0 0 bridge0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
169.254.0.0 0.0.0.0 255.255.0.0 U 1004 0 0 bridge0
0.0.0.0 x.x.x.94 0.0.0.0 UG 0 0 0 bridge0
Однако хост по-прежнему не может получить доступ к гостю. Если я отслеживаю гостя, я не вижу, чтобы соединение разорвалось, я просто вижу
host# traceroute x.x.y.213
traceroute to x.x.y.213, 30 hops max, 60 byte packets
1 x.x.y.213 0.639 ms 0.771 ms 0.784 ms
Но когда я пытаюсь подключиться к машине (например, telnet x.x.y.213 22
) У меня нет связи (по сравнению с гостем, если я запускаю telnet x.x.y.213 22
или telnet x.x.x.75 22
Получаю результат).
Если две подсети (/ 28 и / 26) подключены к одному и тому же интерфейсу, тогда вам понадобятся адреса в обеих сетях восходящей сети (т. Е. Вторичный адрес на маршрутизаторе для всей сети).
Думайте о виртуальных хостах на мосту, как если бы они были подключены к тому же коммутатору, что и сетевая карта хоста. Тот факт, что хост (например, bridge0) находится в другой IP-подсети, подразумевает, что между ними должен быть какой-то шлюз.
Два варианта: либо перенумеровать все хосты в одну сеть, либо предоставить какой-либо маршрутизируемый интерфейс между ними.