天天看点

如何在底层清除 NSX 防火墙规则

通常情况下 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 防火墙规则

检查nsx-proxy 为running状态:​

/etc/init.d/nsx-proxy status      
如何在底层清除 NSX 防火墙规则

停止nsx-proxy服务:​

/etc/init.d/nsx-proxy stop      
如何在底层清除 NSX 防火墙规则

再次检查连接,发现1234断开或TIME_WAIT​

esxcli network ip connection list | grep 1234      
如何在底层清除 NSX 防火墙规则
如何在底层清除 NSX 防火墙规则

查找相应 VM 的 ID 并清除规则

查找故障 VM 对应的 name 和 vmx 名称(一般 VM 名称和 vmx 等同,但如果用户后期改过 VM 名称,则两者会不一致,通常vmx 名称相对准确):​

esxcli vm process list      
如何在底层清除 NSX 防火墙规则

通过下列命令获取相应虚拟机的 vNIC name(napp-automation 为 vmx 名称前缀):​

summarize-dvfilter | grep -A3 napp-automation      

记录红色标记的值:​

如何在底层清除 NSX 防火墙规则

通过下列命令查看网卡上的防火墙规则:​

vsipioctl getrules -f nic-26729301-eth0-vmware-sfw.2      

一般第一个ruleset 名为mainrs,记录此名称​

如何在底层清除 NSX 防火墙规则

通过下列命令清除网卡上的防火墙规则:​

vsipioctl vsipfwcli -Override -f nic-26729301-eth0-vmware-sfw.2 -c "create ruleset mainrs;"      
如何在底层清除 NSX 防火墙规则

清除完毕后,再次检查网卡上的防火墙规则,发现 mainrs 下已经为空:​

vsipioctl getrules -f nic-26729301-eth0-vmware-sfw.2      
如何在底层清除 NSX 防火墙规则

修正 NSX 防火墙规则

清理完毕后,回到 NSX Manager界 面,修正相关的防火墙规则,然后在 ESXi 上启动 nsx-proxy 服务:​

/etc/init.d/nsx-proxy start