Estou executando um servidor de desenvolvimento para máquinas virtuais KVM. Tenho um servidor DHCP em execução localmente no nó host com a seguinte configuração:
/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"
Para referência, este é um servidor debian 7 proxmox.
O problema é que o servidor recebe um IP via DHCP sem problemas. Obtém xxx.xxx.x.5, porém o gateway é definido como 0.0.0.0 quando visualizado via rota -n e a rede, portanto, não está acessível.
Conteúdo do arquivo de configuração da rede VM:
DEVICE=eth01
BOOTPROTO=dhcp
ONBOOT=yes
Além disso, há um erro de argumento inválido ao obter informações do DHCP, eles podem estar relacionados.
Log de erros no cliente:
Responder1
É difícil solucionar problemas remotamente com informações limitadas. Mas eu gostaria de tentar.
Primeiro, apenas um palpite. Normalmente, o nome DEVICE é eth0
ou eth1
, não eth01
. Isso pode explicar o "erro de argumento inválido". Certifique-se de estar lidando com a NIC correta na VM ifconfig -a
ou ip link
na VM.
Outro suspeito é a rota estática. Deve ter 13 itens na matriz, em vez de 14. O formato é <netmask>, <network-byte1>, <network-byte2>, <network-byte3>, <router-byte1>, <router-byte2>, <router-byte3>...
. Então deveria ficar assim 24,192,168,1, 192,168,1,1, 0, 192,168,1,1
. Dê uma olhadaaqui. Acho que a rota estática errada substitui o gateway padrão.
Se esse não for o problema, você precisará de um processo para depurar. Na sua configuração de DHCP, presumo vmbr0
que seja uma ponte Linux e as VMs sejam criadas a partir daí. Você precisa confirmar se a rede VM foi criada corretamente, verificando virt net-list
e virt edit <vm>
no host/hipervisor. Você também pode usar virt-manager
. Certifique-se de que a VM tenha apenas uma NIC, que esteja conectada ao vmbr0
.
Se ainda não for corrigido, entre na VM e depure o cliente DHCP. Primeiro, killall dhclient
, e depois execute dhclient eth0
e monitore o tráfego com dhcpdump -i eth0
ou tcpdump udp and port 67 or 68
. Procure opções de gateway. Certifique-se de que não haja outro servidor DHCP no caminho. (Pode ser o NAT padrão da libvirt; ou pode ser outro servidor DHCP externo, já que você tem uma ponte). Você também pode executar dhcpdump/tcpdump
no host onde possui o servidor DHCP.
Eu espero que isso ajude.