导语:在本文中,我将介绍构建网络的基本设置,这是一个简单的平面化网络,处于作为防火墙,NAT,DHCP和VPN的路由器的后面。
在本文中,我将介绍构建网络的基本设置,这是一个简单的平面化网络,处于作为防火墙,NAT,DHCP和VPN的路由器的后面。
第一个操作是创建一个虚拟交换机,该平面网络中的所有虚拟机都将连接到该虚拟交换机。 几乎所有的虚拟解决方案都支持在一个名称或另一个名称下配置虚拟交换机。由于我为我的家庭实验室选择了ESXi,下文中所显示的命令都是用于此平台的命令,但一般来说,你可以使用Hyper-V或XenServer完成相同的操作。
我通过命令行显示所有步骤的主要原因是它们可以在以后的脚本中实现自动化,这将会是一个重复多次的过程。
当前网络
我将使用PowerShell模块PowerCLI 来进行配置(在Windows,Linix和OS X中均可以使用)。 我们首先在PowerCLI窗口中创建到ESXi服务器的会话,然后使用Connect-VIServer cmdlet进行连接。
PowerCLI C:\> Connect-VIServer -Server 192.168.1.3 -Credential (Get-Credential root) -Force WARNING: The server certificate is not valid. Name Port User ---- ---- ---- 192.168.1.3 443 root
一旦连接,我们可以查看服务器上第一台交换机的端口组。默认的情况下,第一个交换机将被设置用于管理端口组,另一个交换机用于虚拟机的使用名称为vSwitch0,除非它已重命名。
PowerCLI C:\> Get-VirtualSwitch -Name vSwitch0 | Get-VirtualPortGroup Name Key VLanId PortBinding NumPorts ---- --- ------ ----------- -------- Management Network key-vim.host.PortGroup-Mana... 0 VM Network key-vim.host.PortGroup-VM N... 0
你可以看到VM的端口组被命名为VMNetwork。 这个网络将是我们的实验室构建块的外部网络。 我们可以通过使用Format-List cmdlet来查看交换机的详细信息,如:查看switch对象的所有属性,以便了解已经连接到哪一个网络接口。
PowerCLI C:\> Get-VirtualSwitch -Name vSwitch0 | Format-List -Property * Id : key-vim.host.VirtualSwitch-vSwitch0 Key : key-vim.host.VirtualSwitch-vSwitch0 Name : vSwitch0 NumPorts : 1792 NumPortsAvailable : 1779 Nic : {vmnic0} Mtu : 1500 VMHostId : HostSystem-ha-host VMHost : 192.168.1.3 VMHostUid : /[email protected]:443/VMHost=HostSystem-ha-host/ Uid : /[email protected]:443/VMHost=HostSystem-ha-host/VirtualSwitch=key-vim.host.VirtualSwitch-v Switch0/ ExtensionData : VMware.Vim.HostVirtualSwitch Client : VMware.VimAutomation.ViCore.Impl.V1.VimClient
我们可以看到连接的网络接口是vmnic0。 所有的这些信息告诉我们当前的网络配置看起来像下图所示的内容:
这就是我们为家庭实验室所考虑的外部网络构建块。VyOS路由器的外部接口将连接在VM网络的端口组上。
实验室的虚拟交换机和端口组
现在我们需要创建将用于托管我们的虚拟机的虚拟交换机和端口组。我们依旧使用PowerCLI来进行配置。 为此,我们将使用 New-VirtualSwitch 这个cmdlet进行操作,然后我们需要确认没有NIC连接到该虚拟交换机。
PowerCLI C:\> New-VirtualSwitch -Name "Lab1" Name NumPorts Mtu Notes ---- -------- --- ----- Lab1 1792 1500 PowerCLI C:\> Get-VirtualSwitch -Name lab1 | Format-List -Property * Id : key-vim.host.VirtualSwitch-Lab1 Key : key-vim.host.VirtualSwitch-Lab1 Name : Lab1 NumPorts : 1792 NumPortsAvailable : 1778 Nic : Mtu : 1500 VMHostId : HostSystem-ha-host VMHost : 192.168.1.3 VMHostUid : /[email protected]:443/VMHost=HostSystem-ha-host/ Uid : /[email protected]:443/VMHost=HostSystem-ha-host/VirtualSwitch=key-vim.host.VirtualSwitch-L ab1/ ExtensionData : VMware.Vim.HostVirtualSwitch Client : VMware.VimAutomation.ViCore.Impl.V1.VimClient
现在我们来创建一个端口组,以便我们可以将虚拟机连接到路由器的内部接口。 我们可以使用New-VirtualPortGroup 这个cmdlet。
PowerCLI C:\> New-VirtualPortGroup -Name Lab1 -VirtualSwitch Lab1 Name Key VLanId PortBinding NumPorts ---- --- ------ ----------- -------- Lab1 key-vim.host.PortGroup-Lab1 0
在ESXi虚拟交换机中,默认情况下有一个安全策略,以防止进行发送安全攻击,如网络嗅探,ARP Spoofing和其他基于网络的攻击技术。 如果希望练习这些内容,可以手动开启,但是这会降低虚拟交换机的安全等级。 要查看当前正在应用的安全策略,可以使用Get-SecurityPolicy 这个cmdlet。
PowerCLI C:\> Get-VirtualSwitch -Name lab1 | Get-SecurityPolicy VirtualSwitch AllowPromiscuous ForgedTransmits MacChanges ------------- ---------------- --------------- ---------- Lab1 False True True
可以看出,交换机的输出将允许伪造传输,改变MAC地址,但不允许将接口置为混杂模式。 要修改策略,我们可以使用Set-SecurityPolicy 这个cmdlet。 在下面的示例中,我将AllowPromiscuous设置为true。
PowerCLI C:\> Get-VirtualSwitch -Name lab1 | Get-SecurityPolicy | Set-SecurityPolicy -AllowPromiscuous $true VirtualSwitch AllowPromiscuous ForgedTransmits MacChanges ------------- ---------------- --------------- ---------- Lab1 True True True
安装VyOS路由器
对于我的家庭实验室,我喜欢使用VyOS作为我的路由器操作系统,它除了支持路由和NAT之外它还可以作为防火墙和VPN解决方案(L2TP / IPSEC和OpenVPN)。 该路由操作系统是开源的,可以通过ISO镜像文件进行安装,或者VMware设备文件(OVA),甚至在Amazon EC2上有一个可以预构建的设备文件进行部署。 你可以从VyOS Web页面下载安装文件。
我将使用PowerCLI部署VMware OVA设备文件,但是如果你要使用ISO镜像文件安装的话,你可以参考VyOS用户指南。
我们可以使用Import-vApp 这个cmdlet将OVA导入ESXi。 当我们查看该cmdlet的帮助信息时,我们可以看到Source和VMHost是必需指定的参数。
PowerCLI C:\> help Import-VApp NAME Import-VApp SYNOPSIS This cmdlet imports OVF (Open Virtualization Format) and OVA packages. The package can contain a virtual appliance or a virtual machine. SYNTAX Import-VApp [-Source] <String> [-OvfConfiguration <Hashtable>] [[-Name] <String>] [-Location <VIContainer>] [-VMHost] <VMHost> [-Datastore <StorageResource>] [-Force] [-DiskStorageFormat <VirtualDiskStorageFormat>] [-Server <VIServer[]>] [-RunAsync] [-WhatIf] [-Confirm] [<CommonParameters> DESCRIPTION This cmdlet imports OVF (Open Virtualization Format) and OVA packages. The package can contain a vApp or a virtual machine. The cmdlet returns a VApp object when the OVF contains a vApp and a VirtualMachine object when the OVF contains a single virtual machine. RELATED LINKS Online version: http://www.vmware.com/support/developer/PowerCLI/PowerCLI63R1/html/Import-VApp.html Export-VApp Get-VApp New-VApp Remove-VApp Set-VApp Start-VApp Stop-VApp Move-VApp REMARKS To see the examples, type: "get-help Import-VApp -examples". For more information, type: "get-help Import-VApp -detailed". For technical information, type: "get-help Import-VApp -full". For online help, type: "get-help Import-VApp -online"
为了确保我们所提供的值都是正确的, 我们首先将我们要部署的OVA文件的ESXi服务器的VMhost 保存到一个变量中。
PowerCLI C:\> $vmhost = Get-VMHost
其中有一个参数是Datastore,它不是强制性要指定的参数,但我想确保VM存储在我的服务器上的SSD中,所以我列出了可用的数据存储。
PowerCLI C:\> Get-Datastore Name FreeSpaceGB CapacityGB ---- ----------- ---------- datastore1 690.048 691.000 SSD1 904.075 931.250 isostore 1,554.740 690.048 691.000
一旦我决定了存储的位置,那我就会将其保存在一个变量中。
$datastore = Get-Datastore -Name "SSD1"
现在我就可以导入我刚刚从VyOS Web页面中下载的OVA文件了。
PowerCLI C:\> Import-VApp -Source C:\vyos-1.1.7-amd64-signed.ova -Name "Lab1_Router" -VMHost $vmhost -Datastore $datastore Name PowerState Num CPUs MemoryGB ---- ---------- -------- -------- Lab1_Router PoweredOff 1 1.000
当我们查看VM的网络适配器时,我们看到它只有一个网络适配器1,并且它连接到了“VM网络”的端口组。
PowerCLI C:\> Get-NetworkAdapter -VM "Lab1_Router" Name Type NetworkName MacAddress WakeOnLan Enabled ---- ---- ----------- ---------- --------- Network adapter 1 Vmxnet3 VM Network True
我们需要向VM中添加另一个网络适配器,并将其添加到我们创建的Lab1端口组中。 我们首先将端口组对象保存到变量中,并将该变量与New-NetworkAdapter 这个cmdlet的PortGroup参数一起使用,以便在VM上创建新的网络适配器。
PowerCLI C:\> $pg = Get-VirtualPortGroup -Name lab1 PowerCLI C:\> Get-VM -Name "lab1_router" | New-NetworkAdapter -Portgroup $pg -StartConnected WARNING: Parameter 'VM' is obsolete. Passing multiple values to this parameter is obsolete. Name Type NetworkName MacAddress WakeOnLan Enabled ---- ---- ----------- ---------- --------- Network adapter 2 e1000 Lab1
一旦我们添加了第二块网络适配器,我们的逻辑路由器网络配置应该看起来像下图所示的网络:
路由器配置
现在我们开始配置路由器。 本文示例的家庭网络是192.168.1.0/24网络,并且内部网络将是10.101.101.0/24的网络。 在本文这个示例中,我需要使用其他路由器或其他接口创建一个子网,我将使用第三个八位字节来区分它们。 我倾向于提交并保存我的配置信息,以便在我不断向前推进时能够进行测试。
路由器的初始IP配置将如下图所示。
我们使用vyos / vyos的默认登陆凭证连接到路由器的控制台,在命令行提示中我们可以使用show命令验证接口名称并运行show interfaces,一旦名称确认之后,我可以通过进入配置模式启动配置并设置IP地址和网关信息。
configure set interfaces ethernet eth0 address 192.168.1.9/24 set interfaces ethernet eth1 address '10.101.101.1/24' set system gateway-address 192.168.1.1 commit save
我们可以使用ping命令来测试我们的配置,使用ping命令后在配置模式提示的三个请求 8.8.8.8的回显结果来确定我们是否可以到达网关。
@vyos# ping -c 3 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_req=1 ttl=54 time=50.3 ms 64 bytes from 8.8.8.8: icmp_req=2 ttl=54 time=53.6 ms 64 bytes from 8.8.8.8: icmp_req=3 ttl=54 time=47.5 ms --- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 47.570/50.545/53.675/2.508 ms [edit] [email protected]#
一旦我们将基本配置设置完毕,我们就可以命名路由器,并将vyos帐户的默认密码设置的更加安全。 如果要使用特殊字符,需要将密码括在引号之间。
set system login user vyos authentication plaintext-password '[email protected]' set system host-name R0 commit save
现在我们在路由器上启用SSH以进行远程管理。 在这种情况下,我们只是启用服务。 我建议你使用密钥,限制密码和MA C地址以及采取其他措施来探索强化路由系统,以便养成配置实验室的好习惯,把它当成是一个生产环境去配置。
set service ssh port '22' commit save
在下一步中,我们将在路由器上对外部和内部的接口进行标记,然后创建第一个NAT网络10.101.0.0/16。 记住在开始时我提到的:我们可以使用第三个八位字节来创建子网并区分它们。
########################### # Configura NAT interfaces ########################## set interfaces ethernet eth0 description 'OUTSIDE' set interfaces ethernet eth1 description 'INSIDE' ##################### # Configure NAT rule. ##################### set nat source rule 100 outbound-interface 'eth0' set nat source rule 100 source address '10.101.0.0/16' set nat source rule 100 translation address masquerade commit save
下一步将设置内部DHCP服务器的初始配置。 此服务器将为我们的实验室中部署的VM分配IP地址和基本配置信息。
IP地址池:10.101.101.20 – .254
域名:“acmelabs.pv”(你可以使用任何你喜欢的域名)
DNS服务器:10.101.101.1(一旦我们有了Active Directory域控制器,我们将更改该地址)
默认网关:10.101.101.1
########################## # Configure DHCP service. ######################### set service dhcp-server disabled 'false' set service dhcp-server shared-network-name LAN subnet 10.101.101.0/24 default-router '10.101.101.1' set service dhcp-server shared-network-name LAN subnet 10.101.101.0/24 dns-server '10.101.101.1' set service dhcp-server shared-network-name LAN subnet 10.101.101.0/24 domain-name 'acmelabs.pvt' set service dhcp-server shared-network-name LAN subnet 10.101.101.0/24 lease '86400' set service dhcp-server shared-network-name LAN subnet 10.101.101.0/24 start '10.101.101.20' stop '10.101.101.254' commit save
由于在DHCP池中我们将路由器指定为了DNS服务器,因此我们将配置路由器作为DNS转发器,并指定两个Google的公共DNS服务器。 缓存大小设置为0,以便它总是能够获取最新地址,你可以改变这个设置值如果你愿意的话,我们将在路由器的内部接口中把它设置为监听状态。
########################### # Configure DNS Forwarding. ########################### set service dns forwarding cache-size '0' set service dns forwarding listen-on 'eth1' set service dns forwarding name-server '8.8.8.8' set service dns forwarding name-server '8.8.4.4' commit save
接下来,我们将配置一组基本的防火墙规则,并且为每个规则都设置一个名称。
OUTSIDE-LOCAL是针对从外部流向防火墙上运行的服务的流量。
OUTSIDE-IN是从外部到内部网络的流量
防火墙的规则设置比较容易。 我们将允许以下网络流量从外部流入到路由器:
ICMP-ECHO请求,Ping。
SSH连接。
针对SSH的暴力破解。
###################### # Configure Firewall. ##################### # Default Drop Rules set firewall name OUTSIDE-IN default-action 'drop' set firewall name OUTSIDE-IN rule 10 action 'accept' set firewall name OUTSIDE-IN rule 10 state established 'enable' set firewall name OUTSIDE-IN rule 10 state related 'enable' set firewall name OUTSIDE-LOCAL default-action 'drop' set firewall name OUTSIDE-LOCAL rule 10 action 'accept' set firewall name OUTSIDE-LOCAL rule 10 state established 'enable' set firewall name OUTSIDE-LOCAL rule 10 state related 'enable' # Accept Ping requests set firewall name OUTSIDE-LOCAL rule 20 action 'accept' set firewall name OUTSIDE-LOCAL rule 20 icmp type-name 'echo-request' set firewall name OUTSIDE-LOCAL rule 20 protocol 'icmp' set firewall name OUTSIDE-LOCAL rule 20 state new 'enable' # Deter SSh brute-force attacks by allowing only 4 new connections within 60 seconds set firewall name OUTSIDE-LOCAL rule 30 action 'drop' set firewall name OUTSIDE-LOCAL rule 30 destination port '22' set firewall name OUTSIDE-LOCAL rule 30 protocol 'tcp' set firewall name OUTSIDE-LOCAL rule 30 recent count '4' set firewall name OUTSIDE-LOCAL rule 30 recent time '60' set firewall name OUTSIDE-LOCAL rule 30 state new 'enable' # Allow SSH to Router from the outside. set firewall name OUTSIDE-LOCAL rule 31 action 'accept' set firewall name OUTSIDE-LOCAL rule 31 destination port '22' set firewall name OUTSIDE-LOCAL rule 31 protocol 'tcp' set firewall name OUTSIDE-LOCAL rule 31 state new 'enable' # Apply firewall rules set interfaces ethernet eth0 firewall in name 'OUTSIDE-IN' set interfaces ethernet eth0 firewall local name 'OUTSIDE-LOCAL' commit save
结论
在本系列文章的第二部分也就是本文中,我们讲述了以下几点:
为内部网络创建虚拟交换机和端口组。 部署了VyOS路由器镜像。 在路由器上进行了基本NAT,SSH和防火墙配置。
在下一篇博文中,我将介绍用于访问内部网络的L2TP / IPSec和OpenVPN的VPN配置。一如既往的希望你能在这找到有用的信息。