我正在尝试为 eth1 创建两个具有静态 IP 的可信虚拟机,但静态地址之间的 ping 失败。
- 通过 havana 仪表板,我创建了一个子网为 10.16.1/24 的网络,禁用了网关,启用了 dhcp,范围为 10.16.1.100,10.16.1.120。
- 启动了 4 个实例,每个实例都有两个 NICS;eth0 用于我的常规公共接口,eth1 用于 10.16.1/24 子网。
- 登录到两个虚拟机并创建 eth1.cfg,配置为 dhcp
自动 eth1 iface eth1 inet dhcp
- 登录另外两台虚拟机并创建 eth1.cfg,配置静态信息
自动 eth1 iface eth1 inet 静态 地址 10.16.1.2 网络掩码 255.255.255.0
- 每个虚拟机上的 ifup eth1
从每个配置了 dhcp 的 VM,我可以 ping 通其他配置了 dhcp 的 VM,但不能 ping 通静态配置的 VM。
从静态配置的虚拟机,我无法 ping 通其他虚拟机。
我还尝试为网络创建路由器,并添加接口 10.16.1.254。但这没有带来明显变化。我也无法从任何虚拟机 ping 通路由器。
我错过了什么?
答案1
如果没有更多信息,很难回答。由于你们在同一个网络上,我认为防火墙规则不会成为问题。
您使用的是 neutron 还是 nova。您能检查一下所有 neutron 服务是否运行正常吗?
neutron agent-list
也许值得启用 dhcp,这样您至少可以验证网络是否正常运行。
此外,虚拟机是否位于同一个物理虚拟机管理程序上,还是分布在两个虚拟机管理程序上。如果分布在两个虚拟机管理程序上,那么您是否使用 VLAN,并且是否已配置交换机以支持它?
值得指出的是,在 Icehouse 之前,静态配置 Openstack 未保留的 IP 是可行的,但该版本中的更改可能会导致问题。
在托管其中一台虚拟机的计算节点上运行
iptables -S | more
在输出中搜索你的虚拟机的 MAC 地址,例如我的是“FA:16:3E:D0:1A:5D”
您将看到类似这样的输出:
-A neutron-openvswi-see719639-9 -s 192.168.0.83/32 -m mac --mac-source FA:16:3E:BB:75:7E -j RETURN
-A neutron-openvswi-see719639-9 -j DROP
这意味着它将只接受发往 192.168.0 .83/32 的 MAC 地址的数据包。
答案2
我相信这与我之前在启用了 DHCP 的 neutron 网络上尝试静态配置 IP 地址的实验一致。我记得,如果已为该特定 neutron 网络禁用 DHCP,则您尝试执行的操作有效,但如果已启用 DHCP,则无法执行。
在后一种情况下,将为此 VM 接口创建一个中子端口,该端口具有 IP 分配的 IP 地址。如果您要静态配置客户 VM 以匹配此 IP 和子网,它将起作用。如果您尝试为除中子数据库中的 IP 之外的 IP 静态配置客户,则不会。至少,这是一种 IP 欺骗保护形式,因为它不允许您冒充同一网络上另一个 VM 的 IP,并且通常是一种很好的保护。
因此,一种选择是使用已禁用 DHCP 的网络。另一种选择是将虚拟机静态配置为与 neutron 分配的 IP 相同。
另一个轶事:有一次,我通过特定 VLAN 将外部网络桥接到 openstack 网络。此网络只有静态配置的物理服务器,没有 DHCP 服务器。我创建的 openstack 端网络启用了 DHCP。我使用受限的分配范围执行此操作,以分配不会与同一 CIDR 上的现有静态 IP 冲突的 IP。由于 neutron 仅管理虚拟机的桥接端口,这意味着网络上的其他静态配置设备(在 openstack/neutron 控制之外)可以与此网络上的 DHCP 虚拟机通信。但是,此设置不允许您在启用 DHCP 的同一 neutron 网络上启动静态和 DHCP 虚拟机/客户机的混合。