Ich betreibe also einen Entwicklungsserver für virtuelle KVM-Maschinen. Ich habe einen DHCP-Server, der lokal auf dem Hostknoten mit der folgenden Konfiguration ausgeführt wird:
/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"
Als Referenz: Dies ist ein Debian 7 Proxmox-Server.
Das Problem ist, dass dem Server problemlos eine IP über DHCP zugewiesen wird. Er erhält xxx.xxx.x.5, das Gateway wird jedoch über Route -n auf 0.0.0.0 gesetzt und das Netzwerk ist daher nicht erreichbar.
Inhalt der VM-Netzwerkkonfigurationsdatei:
DEVICE=eth01
BOOTPROTO=dhcp
ONBOOT=yes
Darüber hinaus tritt beim Abrufen von Informationen von DHCP ein Fehler aufgrund eines ungültigen Arguments auf. Die beiden könnten miteinander in Zusammenhang stehen.
Fehlerprotokoll auf dem Client:
Antwort1
Mit begrenzten Informationen ist es schwierig, Probleme aus der Ferne zu beheben. Aber ich würde es gerne versuchen.
Zunächst nur eine Vermutung. Normalerweise lautet der Gerätename eth0
oder eth1
, nicht eth01
. Dies könnte den „ungültigen Argumentfehler“ erklären. Stellen Sie sicher, dass Sie es mit der richtigen Netzwerkkarte von ifconfig -a
oder ip link
in der VM zu tun haben.
Ein weiterer Verdächtiger ist die statische Route. Sie sollte 13 Elemente im Array haben, statt Ihrer 14. Das Format ist <netmask>, <network-byte1>, <network-byte2>, <network-byte3>, <router-byte1>, <router-byte2>, <router-byte3>...
. Es sollte also so aussehen 24,192,168,1, 192,168,1,1, 0, 192,168,1,1
. Schauen Sie malHier. Ich vermute, dass die falsche statische Route das Standard-Gateway überschreibt.
Wenn das nicht das Problem ist, benötigen Sie einen Prozess zum Debuggen. Aus Ihrer DHCP-Konfiguration gehe ich davon aus, dass es vmbr0
sich um eine Linux-Bridge handelt und VMs von dort aus erstellt werden. Sie müssen bestätigen, dass das VM-Netzwerk richtig erstellt wurde, indem Sie virt net-list
und virt edit <vm>
auf dem Host/Hypervisor überprüfen. Sie können auch verwenden virt-manager
. Stellen Sie sicher, dass die VM nur eine Netzwerkkarte hat, die von überbrückt wird vmbr0
.
Wenn das Problem immer noch nicht behoben ist, gehen Sie in die VM und debuggen Sie den DHCP-Client. Führen Sie zuerst aus killall dhclient
und überwachen Sie den Verkehr dann dhclient eth0
mit dhcpdump -i eth0
oder tcpdump udp and port 67 or 68
. Suchen Sie nach Gateway-Optionen. Stellen Sie sicher, dass kein anderer DHCP-Server im Weg ist. (Könnte das Standard-NAT von libvirt sein oder ein anderer DHCP-Server von außerhalb, da Sie eine Bridge haben). Sie können es auch dhcpdump/tcpdump
auf dem Host ausführen, auf dem Sie den DHCP-Server haben.
Ich hoffe das hilft.