在一个月前,VMware发布了NSX-T数据中心3.0GA版本。其中不乏新的亮点功能,如与vSphere7共同实现构建统一管理工作负载(ESXi虚拟机+Kubernetes容器)的平台、原生实现了分布式的入侵检测IDS和入侵防御IPS、基于时间的安全微分段策略等等……

在之前的一篇分享中,我介绍了NSX通过在Linux裸金属服务器创建虚拟接口实现对裸金属服务器的微分段防护。

详情见:实现裸金属服务器的安全微分段

在NSX-T3.0的功能列表中,我们也可以看到现在NSX-T也能纳管Windows操作系统的裸金属服务器,实现对Windows Server的逻辑网络连接、安全微分段防护功能,弥补了之前NSX-T2.x的一个缺憾。

🧵2x12 实现裸金属服务器的安全微分段[2] - 图25

在今天的分享中,我将介绍一下如何在NSX-T3.0环境下实现对裸金属Windows Server2016的纳管,并通过分布式防火墙规则实现对该服务器的安全防护。

在浏览VMware官方社区一些帖子的时候,我发现其实有老外已经在NSX-T2.x的时候就尝试用Ansible脚本,在安装了OpenvSwitch on Windows的裸金属设备上实现了类似纳管的需求。

我们首先来回顾一下,NSX如何实现对Linux操作系统裸金属的网络连接和安全微分段:

🧵2x12 实现裸金属服务器的安全微分段[2] - 图26

为了便于类比理解,先拿Hypervisor传输节点(后简称TN)来说说虚拟机的连接方式,虚拟机连接到分段(也叫作逻辑交换机)是依赖于Logical Interface(后简称LIF)和Virtual Interface(后简称VIF)两个接口的。当管理员在vCenter界面上,选择将虚拟机连接到某个分段,如Web-Tier之后,NSX-T会在相应的分段上创建一个LIF,然后将虚拟机连接到一个VIF,VIF和LIF之间是通过IO链连接的,NSX-T的安全微分段就作用在这个IO链上。

🧵2x12 实现裸金属服务器的安全微分段[2] - 图27

那对于Linux裸金属来说,原理大体相同。当裸金属服务器完成NSX配置,成为一台主机TN之后,在它的内核中就运行了一台NSX主机交换机(后简称N-vDS)。管理员可以通过Ansible脚本,在该TN内部创建一个虚拟接口veth,在分段上创建一个对应的LIF(图中的veth-peer),利用OpenvSwitch(N-vDS在Linux环境下借用了OVS的内核)的桥接,将veth和veth-peer互联。

因此,对裸金属Linux服务器来说,真正去和其他IP开展业务通信的接口是veth,使用的是veth的IP地址,安全微分段防护的也是这个IP相关的流量;与该服务器本身的管理地址(图中eth0)和VTEP地址均无关。

接下来,我们来看看对于裸金属Windows服务器,NSX-T是如何实现的呢?

🧵2x12 实现裸金属服务器的安全微分段[2] - 图28

NSX-T依旧通过OpenvSwitch来实现Windows裸金属服务器的网络接入和安全微分段

Windows裸金属服务器的网络接入有三种可行的模式第一种:单网卡模式,用于进行NSX-T配置的管理地址也会是将来与外部通信和安全微分段生效的业务地址(图中的应用地址)。可以看到,这种模式下,并没有创建Overlay分段的必要,因此也没有VTEP IP生成;换言之,这是一种将裸金属服务器直接连接到VLAN分段的模式。第二种:双网卡VLAN模式,这可能是最贴近实际的模式。裸金属服务器使用第一张网卡(图中的Ethernet1)与NSX-T Manager通信,执行NSX-T配置等一系列工作;而它的第二张网卡(图中的Ethernet2)将承载业务流量。管理员可以通过Ansible脚本,创建一个虚拟接口(图中的vEthernet1-VIF),利用OVS的桥接实现互联;在这种模式下,虚拟接口连接到的是VLAN传输区域,因此也不需要VTEP IP。第三种:双网卡Overlay模式,这可能是最理想的模式。与第二种模式相同,裸金属服务器使用第一张网卡(图中的Ethernet1)与NSX-T Manager通信,执行NSX-T配置等一系列工作;而它的第二张网卡(图中的Ethernet2)将承载业务流量,只不过这种流量是Overlay传输区域的流量。管理员在执行Ansible脚本后,NSX-T在该裸金属Windows上创建一个虚拟接口的同时,还会创建一个用于VTEP封装通信的接口。在这种模式下,该裸金属服务器会出现3个不同的IP地址。



接下来,各位跟着我一起来动动手,看看NSX-T纳管裸金属Windows服务器具体的操作步骤吧。

0x01.在目标Windows操作系统上,执行一系列准备工作,允许Ansible服务器通过pywinrm模块访问Windows操作系统,完成虚拟接口的配置工作。

在目标Windows Server 2016下载配置脚本

使用命令:

$ wget -o ConfigureRemotingForAnsible.ps1 https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1

🧵2x12 实现裸金属服务器的安全微分段[2] - 图29

执行该脚本,设置允许Linux操作系统通过pywinrm模块访问Windows操作系统

使用命令:

$ powershell.exe -ExecutionPolicy Bypass -File .\ConfigureRemotingForAnsible.ps1

🧵2x12 实现裸金属服务器的安全微分段[2] - 图30

0x02.部署一台Ansible服务器,用来执行一系列远程配置工作;在我的环境中,我采用一台普通的CentOS。

找一台Linux终端,安装Python和pywinrm

# yum install -y epel-release

# yum install -y python-pip

# pip install pywinrm

🧵2x12 实现裸金属服务器的安全微分段[2] - 图31

0x03.关键步骤:将该Windows服务器添加作为NSX-T的独立主机传输节点。

将Windows Server添加作为NSX-T的独立主机传输节点

🧵2x12 实现裸金属服务器的安全微分段[2] - 图32

与Linux操作系统相同,将Windows Server添加作为独立的服务器同样需要将主机的IP地址、凭据等进行正确地设置

🧵2x12 实现裸金属服务器的安全微分段[2] - 图33



NSX-T会在Windows Server操作系统安装OpenvSwitch,并根据管理员的配置获取到一个IP地址,用于Geneve传输网络的相互通信

同时,需要指定以OpenvSwitch为内核的N-vDS上联网络适配器,如Ethernet2

🧵2x12 实现裸金属服务器的安全微分段[2] - 图34



与NSX-T早些版本不同的是,当前版本的NSX-T可以看到“NSX配置”的进展阶段

🧵2x12 实现裸金属服务器的安全微分段[2] - 图35

等待该Windows Server被正确配置为独立传输节点

NSX-T会自动在该主机内部创建出额外的两个虚拟网络适配器

其中一个用于VTEP的封装(我手动改名为NSX-VTEP)

另一个用于虚拟端口连接到逻辑交换机使用(我手动改名为NSX-VIF)

🧵2x12 实现裸金属服务器的安全微分段[2] - 图36

在该主机命令行,使用命令同样可以查看到这些网络适配器的信息

使用命令:

$ get-NetAdapter

🧵2x12 实现裸金属服务器的安全微分段[2] - 图37

0x04.使用Ansible创建虚拟接口,实现网络互联

回到Ansible服务器,下载playbook

使用命令:

# git clone https://github.com/vmware/bare-metal-server-integration-with-nsxt.git

🧵2x12 实现裸金属服务器的安全微分段[2] - 图38

安装Ansible

# yum install -y ansible

🧵2x12 实现裸金属服务器的安全微分段[2] - 图39

编写配置文件

下面,给出我的配置文件,提供各位参考:

#

# Create an group that contains the Bare Metal Servers

[windows:children]

servers_static(以静态地址分配方式定义虚拟接口IP)

servers_dhcp

servers_migration

servers_restoration

# Set variables common for all Bare Metal Servers

[windows:vars]

ansible_user=administrator(裸金属服务器用户名)

ansible_password=VMware1!(裸金属服务器密码)

ansible_connection=winrm(连接方式,WINRM)

ansible_winrm_server_cert_validation=ignore(忽略证书)

# host group for servers

[servers_static]

172.30.81.33 static_ip=10.0.0.12 netmask=255.255.255.0 ls_name=LS-Global-MGMT-Tier-10.0.0.0

(从左往右,依次是裸金属服务器管理地址、虚拟接口业务地址、虚拟接口子网掩码、连接的分段名)

[servers_dhcp]

[servers_migration]

[servers_restoration]

# NSX Configuration

[NSX]

#============================

# NSX Manager Credential

nsxmanager ip=地址我就不告诉你了 username=admin password=密码我也不告诉你(从左往右,依次是NSX-T Manager地址、用户名、密码)

#============================

根据实际情况,执行静态配置虚拟接口地址的playbook

使用命令:

# ansible-playbook -I ./win_hosts(配置文件) ./bare-metal-server-integration-with-nsxt/bms-ansible-nsx/win_static_config.yml(YAML文件)

🧵2x12 实现裸金属服务器的安全微分段[2] - 图40

等待Playbook执行完成

可以看到该Windows Server已经与其他传输节点正常建立了通信隧道,通过Geneve协议传输网络实现Overlay层的互通

🧵2x12 实现裸金属服务器的安全微分段[2] - 图41

0x05.验证NSX-T纳管裸金属Windows服务器

在该Windows Server命令行,可以通过命令查看OpenvSwitch的一些状态,如桥接、流表等

# ovs-vsctl show

🧵2x12 实现裸金属服务器的安全微分段[2] - 图42

通过NSX-T的TraceFlow可以查看到通信流走向

比如一台ESXi主机TN上的虚拟机s12-mgmt-02(10.0.0.11)尝试与该裸金属服务器(10.0.0.12)进行二层通信的时候,流量会经过ESXi主机TN的VTEP(172.30.81.12)封装,传输到该裸金属的VTEP(172.30.82.104),最终解封装后被s12-wbm-01收到。

🧵2x12 实现裸金属服务器的安全微分段[2] - 图43

接下来,我们来看看安全微分段能不能对裸金属Windows服务器生效。

我在该裸金属服务器上激活了一个HTTP服务,可以看到在默认情况下,外部用户可以正常访问,并下载资料

🧵2x12 实现裸金属服务器的安全微分段[2] - 图44

现在,我创建一条分布式防火墙策略:仅阻止外部用户以HTTP方式访问该Windows服务器

🧵2x12 实现裸金属服务器的安全微分段[2] - 图45

我们再使用与该服务器相同网段的10.0.0.11验证分布式防火墙的生效情况

🧵2x12 实现裸金属服务器的安全微分段[2] - 图46

通过NSX-T的TraceFlow同样可以验证流量被分布式防火墙所阻止

🧵2x12 实现裸金属服务器的安全微分段[2] - 图47

🧵2x12 实现裸金属服务器的安全微分段[2] - 图48

经过今天的分享,相信各位对NSX-T与裸金属Windows服务器的集成已经有了充分的了解。在后面的分享中,我将推出新的连载:漫步云网端-构建NSX虚拟云网络,欢迎各位继续关注晓冬的公众号~