通常情况下 NSX 防火墙仅用于业务负载,但在配置上并不会限制用户将防火墙规则配置给 vCenter、NSX Manager 等管理型的 VM。如果用户将 vCenter 以及 NSX Manager 等组件加入 NSX 防火墙管理域中,假如规则设置错误则可能导致用户无法访问 vCenter 及 NSX,这时候就需要在 ESXi 底层进行修复。
本文介绍如何在 ESXi 底层清除相关 VM 上的规则。
清除原理介绍
在 NSX 防火墙架构下,每个 VM 的网卡都可以有自己的防火墙规则,这种架构可以非常精细的控制每个 VM 的流入流出流量。在 ESXi 底层,每个 VM 的网卡都会有一个 dvfilter,在此 filter 中会记录此 VM 上生效的防火墙规则。所以清除的办法是先找到对应 VM 的网卡 ID,然后再通过命令覆写该网卡上的规则,为了避免规则被 NSX 组件刷掉,需要预先停止 ESXi 和 NSX Manager 之间的通信。
恢复方式
停止 ESXi 和 NSX Manager 间的通信
找到相关 ESXi 主机。开启 SSH 服务,通过 SSH 登陆。
通过下列命令查看ESXi和NSX Manager的通信:
esxcli network ip connection list | grep 1234
检查nsx-proxy 为running状态:
/etc/init.d/nsx-proxy status
停止nsx-proxy服务:
/etc/init.d/nsx-proxy stop
再次检查连接,发现1234断开或TIME_WAIT
esxcli network ip connection list | grep 1234
查找相应 VM 的 ID 并清除规则
查找故障 VM 对应的 name 和 vmx 名称(一般 VM 名称和 vmx 等同,但如果用户后期改过 VM 名称,则两者会不一致,通常vmx 名称相对准确):
esxcli vm process list
通过下列命令获取相应虚拟机的 vNIC name(napp-automation 为 vmx 名称前缀):
summarize-dvfilter | grep -A3 napp-automation
记录红色标记的值:
通过下列命令查看网卡上的防火墙规则:
vsipioctl getrules -f nic-26729301-eth0-vmware-sfw.2
一般第一个ruleset 名为mainrs,记录此名称
通过下列命令清除网卡上的防火墙规则:
vsipioctl vsipfwcli -Override -f nic-26729301-eth0-vmware-sfw.2 -c "create ruleset mainrs;"
清除完毕后,再次检查网卡上的防火墙规则,发现 mainrs 下已经为空:
vsipioctl getrules -f nic-26729301-eth0-vmware-sfw.2
修正 NSX 防火墙规则
清理完毕后,回到 NSX Manager界 面,修正相关的防火墙规则,然后在 ESXi 上启动 nsx-proxy 服务:
/etc/init.d/nsx-proxy start