Почему я теряю сетевое подключение для виртуальной машины за пределами /24?
У меня есть куча виртуальных машин (Ubuntu Server 14.04), размещенных на одном реальном сервере (Ubuntu Server 14.04 с KVM). Количество виртуальных машин растет, и скоро у меня их будет более 254.
Тестировать,
Я изменился в
/etc/network/interfaces
реального сервера сетевая маска от255.255.255.0
в255.255.254.0
, IP-адрес реального сервера192.168.1.30
,Я сделал аналогичную операцию с
virsh net-edit default
, который изменил маскуvirbr0
в255.255.254.0
,Я изменил маску коммутатора на
255.255.254.0
также.Я изменил конфигурацию тестовой виртуальной машины следующим образом:
auto eth0 iface eth0 inet static address 192.168.2.35 netmask 255.255.254.0 network 192.168.1.0 broadcast 192.168.2.255 gateway 192.168.1.1 dns-nameservers 192.168.1.13 dns-search example.com
Это текущее состояние:
Я не могу пинговать
192.168.2.35
с реального сервера: он просто застрял в "PING 192.168.2.35 (192.168.2.35) 56(84) байт данных". При остановке (Ctrl+C) он жалуется: "Передано 143 пакета, получено 0, потеря пакета 100%, время 142134мс".Виртуальная машина
192.168.2.35
не может ничего пропинговать (ни коммутатор, ни реальный сервер, ни google.com), выдает ошибку "connect: Network is reachable" для первых двух или "ping: unknown host google.com" для последней.Виртуальная машина может пинговать себя.
Что не так с моей конфигурацией?
1 ответ
Я до сих пор не понимаю, почему / 22 вместо / 23
Потому что вы неправильно рассчитали свои подсети и пытаетесь использовать IP-адреса из двух разных подсетей.
Или, другими словами, если вы используете / 23-битную маску, ваш начальный адрес для диапазона должен быть первым адресом для этого диапазона. 192.168.1.1 не является начальным адресом для любой сети, описываемой 23-битной маской, потому что именно так работает математика.
С 23-битной маской действительными сетями являются следующие.
$ ipcalc 192.168.0.0/23
Address: 192.168.0.0 11000000.10101000.0000000 0.00000000
Netmask: 255.255.254.0 = 23 11111111.11111111.1111111 0.00000000
Wildcard: 0.0.1.255 00000000.00000000.0000000 1.11111111
=>
Network: 192.168.0.0/23 11000000.10101000.0000000 0.00000000
HostMin: 192.168.0.1 11000000.10101000.0000000 0.00000001
HostMax: 192.168.1.254 11000000.10101000.0000000 1.11111110
Broadcast: 192.168.1.255 11000000.10101000.0000000 1.11111111
Hosts/Net: 510
$ ipcalc 192.168.2.0/23
Address: 192.168.2.0 11000000.10101000.0000001 0.00000000
Netmask: 255.255.254.0 = 23 11111111.11111111.1111111 0.00000000
Wildcard: 0.0.1.255 00000000.00000000.0000000 1.11111111
=>
Network: 192.168.2.0/23 11000000.10101000.0000001 0.00000000
HostMin: 192.168.2.1 11000000.10101000.0000001 0.00000001
HostMax: 192.168.3.254 11000000.10101000.0000001 1.11111110
Broadcast: 192.168.3.255 11000000.10101000.0000001 1.11111111
Hosts/Net: 510
В конфигурации вашего интерфейса, хотя вы, кажется, address 192.168.2.35
, а также gateway 192.168.1.1
, Учитывая, что маска вашего шлюза и адрес находятся в совершенно разных подсетях. Конечно, ваши широковещательные и сетевые адреса также неверны.
Если вы используете 22-битную маску, вы получите диапазон, включающий 192.168.1.x и 192.168.2.x. Имейте в виду, что ваши широковещательные и сетевые значения по-прежнему неверны, их также необходимо исправить.
$ ipcalc 192.168.2.0/22
Address: 192.168.2.0 11000000.10101000.000000 10.00000000
Netmask: 255.255.252.0 = 22 11111111.11111111.111111 00.00000000
Wildcard: 0.0.3.255 00000000.00000000.000000 11.11111111
=>
Network: 192.168.0.0/22 11000000.10101000.000000 00.00000000
HostMin: 192.168.0.1 11000000.10101000.000000 00.00000001
HostMax: 192.168.3.254 11000000.10101000.000000 11.11111110
Broadcast: 192.168.3.255 11000000.10101000.000000 11.11111111
Hosts/Net: 1022