因此,我正在运行 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 服务器
# 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 服务器。
问题是,服务器通过 DHCP 分配 IP 时没有出现任何问题。它获取 xxx.xxx.x.5,但是通过 route -n 查看时网关设置为 0.0.0.0,因此无法访问网络。
VM网络配置文件的内容:
DEVICE=eth01
BOOTPROTO=dhcp
ONBOOT=yes
另外,从 DHCP 获取信息时出现无效参数错误,它们可能有关联。
客户端错误日志:
答案1
远程排除故障非常困难,因为信息有限。但我想尝试一下。
首先,这只是猜测。通常设备名称是eth0
或eth1
,而不是。这可能解释了“无效参数错误”。确保您在虚拟机中通过或eth01
处理正确的 NIC 。ifconfig -a
ip link
另一个可疑点是静态路由。数组中应该有 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 配置来看,我假设是 Linux Bridge,并且从那里创建 VM。您需要通过检查主机/虚拟机管理程序上的和vmbr0
来确认 VM 网络是否正确创建。您也可以使用。确保 VM 只有一个 NIC,它是从桥接的。virt net-list
virt edit <vm>
virt-manager
vmbr0
如果仍未修复,请进入虚拟机并调试 DHCP 客户端。首先,,killall dhclient
然后使用 或 运行并dhclient eth0
监控流量。查找网关选项。确保没有其他 DHCP 服务器挡路。(可能是来自 libvirt 的默认 NAT;或者可能是来自外部的另一个 DHCP 服务器,因为您有一个网桥)。您也可以在有 DHCP 服务器的主机上运行。dhcpdump -i eth0
tcpdump udp and port 67 or 68
dhcpdump/tcpdump
我希望这有帮助。