Итак, я запускаю сервер разработки для виртуальных машин KVM. У меня есть DHCP-сервер, работающий локально на хост-узле со следующей конфигурацией:
/etc/dhcp/dhcpd.conf
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
option rfc3442-classless-static-routes code 121 = array of integer 8;
option ms-classless-static-routes code 249 = array of integer 8;
subnet xxx.xxx.x.0 netmask 255.255.255.0 {
range xxx.xxx.x.2 xxx.xxx.x.127;
option routers xxx.xxx.x.1;
option broadcast-address xxx.xxx.x.255;
option domain-name-servers 8.8.8.8;
option netbios-name-servers 8.8.8.8;
default-lease-time 86400;
max-lease-time 86400;
option rfc3442-classless-static-routes 24, xxx, xxx, x, 0, 0, 0, 0, 0, 0, xxx, xxx, x, 1;
option ms-classless-static-routes 24, xxx, xxx, x, 0, 0, 0, 0, 0, 0, xxx, xxx, x, 1;
host 102 {hardware ethernet 4A:19:BD:DF:B0:07;fixed-address xxx.xxx.x.5;}
}
/etc/default/isc-dhcp-server
# Defaults for isc-dhcp-server initscript
# sourced by /etc/init.d/isc-dhcp-server
# installed at /etc/default/isc-dhcp-server by the maintainer scripts
#
# This is a POSIX shell fragment
#
# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPD_CONF=/etc/dhcp/dhcpd.conf
# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPD_PID=/var/run/dhcpd.pid
# Additional options to start dhcpd with.
# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="vmbr0"
Для справки, это сервер Debian 7 Proxmox.
Проблема в том, что серверу назначается IP через DHCP без проблем. Он получает xxx.xxx.x.5, однако шлюз установлен как 0.0.0.0 при просмотре через route -n, и поэтому сеть недоступна.
Содержимое файла конфигурации сети виртуальной машины:
DEVICE=eth01
BOOTPROTO=dhcp
ONBOOT=yes
Кроме того, при получении информации от DHCP возникает ошибка «недопустимый аргумент», и эти проблемы могут быть связаны.
Журнал ошибок на клиенте:
решение1
Трудно устранять неполадки удаленно, имея ограниченную информацию. Но я хотел бы попробовать.
Сначала просто предположение. Обычно имя УСТРОЙСТВА — eth0
или eth1
, а не eth01
. Это может объяснить «ошибку недопустимого аргумента». Убедитесь, что вы имеете дело с правильным NIC по ifconfig -a
или ip link
в VM.
Еще один подозреваемый — статический маршрут. Он должен иметь 13 элементов в массиве, вместо ваших 14. Формат <netmask>, <network-byte1>, <network-byte2>, <network-byte3>, <router-byte1>, <router-byte2>, <router-byte3>...
. Так что это должно выглядеть так 24,192,168,1, 192,168,1,1, 0, 192,168,1,1
. Взглянитездесь. Я полагаю, что неправильный статический маршрут перезаписывает шлюз по умолчанию.
Если проблема не в этом, вам нужен процесс отладки. Из вашей конфигурации DHCP я предполагаю, vmbr0
что это Linux Bridge и виртуальные машины создаются оттуда. Вам нужно подтвердить, что сеть виртуальных машин создана правильно, проверив virt net-list
и virt edit <vm>
на хосте/гипервизоре. Вы также можете использовать virt-manager
. Убедитесь, что у виртуальной машины есть только одна сетевая карта, которая соединена мостом с vmbr0
.
Если проблема не устранена, перейдите в виртуальную машину и выполните отладку клиента DHCP. Сначала killall dhclient
запустите dhclient eth0
и отслеживайте трафик с помощью dhcpdump -i eth0
или tcpdump udp and port 67 or 68
. Найдите параметры шлюза. Убедитесь, что на пути нет другого сервера DHCP. (Это может быть NAT по умолчанию из libvirt; или может быть другой сервер DHCP извне, поскольку у вас есть мост). Вы также можете запустить dhcpdump/tcpdump
на хосте, где у вас есть сервер DHCP.
Надеюсь, это поможет.