У меня есть несколько виртуальных машин (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 unreachable» для первых двух или «ping: unknown host google.com» для последнего.
Виртуальная машина может пинговать сама себя.
Что не так с моей конфигурацией?
Я до сих пор не понимаю, почему / 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