Home Lab家庭實驗室搭建之網路配置篇

在本文中,我將介紹構建網路的基本設置,這是一個簡單的平面化網路,處於作為防火牆,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) -ForcenWARNING: The server certificate is not valid. nName Port Usern---- ---- ----n192.168.1.3 443 rootn

一旦連接,我們可以查看伺服器上第一台交換機的埠組。默認的情況下,第一個交換機將被設置用於管理埠組,另一個交換機用於虛擬機的使用名稱為vSwitch0,除非它已重命名。

PowerCLI C:> Get-VirtualSwitch -Name vSwitch0 | Get-VirtualPortGroup nName Key VLanId PortBinding NumPorts n---- --- ------ ----------- -------- Management Network key-vim.host.PortGroup-Mana... 0 VM Network key-vim.host.PortGroup-VM N... 0n

你可以看到VM的埠組被命名為VMNetwork。 這個網路將是我們的實驗室構建塊的外部網路。 我們可以通過使用Format-List cmdlet來查看交換機的詳細信息,如:查看switch對象的所有屬性,以便了解已經連接到哪一個網路介面。

PowerCLI C:> Get-VirtualSwitch -Name vSwitch0 | Format-List -Property * Id : key-vim.host.VirtualSwitch-vSwitch0 nKey : key-vim.host.VirtualSwitch-vSwitch0 nName : vSwitch0 NumPorts : 1792 nNumPortsAvailable : 1779 nNic : {vmnic0} nMtu : 1500 nVMHostId : HostSystem-ha-host nVMHost : 192.168.1.3 nVMHostUid : /VIServer=root@192.168.1.3:443/VMHost=HostSystem-ha-host/ Uid : /VIServer=root@192.168.1.3:443/VMHost=HostSystem-ha-host/VirtualSwitch=key-vim.host.VirtualSwitch-v Switch0/ nExtensionData : VMware.Vim.HostVirtualSwitch nClient : VMware.VimAutomation.ViCore.Impl.V1.VimClientn

我們可以看到連接的網路介面是vmnic0。 所有的這些信息告訴我們當前的網路配置看起來像下圖所示的內容:

這就是我們為家庭實驗室所考慮的外部網路構建塊。VyOS路由器的外部介面將連接在VM網路的埠組上。

實驗室的虛擬交換機和埠組

現在我們需要創建將用於託管我們的虛擬機的虛擬交換機和埠組。我們依舊使用PowerCLI來進行配置。 為此,我們將使用 New-VirtualSwitch 這個cmdlet進行操作,然後我們需要確認沒有NIC連接到該虛擬交換機。

PowerCLI C:> New-VirtualSwitch -Name "Lab1" nName NumPorts Mtu Notesn---- -------- --- -----nLab1 1792 1500 nPowerCLI C:> Get-VirtualSwitch -Name lab1 | Format-List -Property * nId : key-vim.host.VirtualSwitch-Lab1nKey : key-vim.host.VirtualSwitch-Lab1nName : Lab1nNumPorts : 1792nNumPortsAvailable : 1778nNic :nMtu : 1500nVMHostId : HostSystem-ha-hostnVMHost : 192.168.1.3nVMHostUid : /VIServer=root@192.168.1.3:443/VMHost=HostSystem-ha-host/ Uid : /VIServer=root@192.168.1.3:443/VMHost=HostSystem-ha-host/VirtualSwitch=key-vim.host.VirtualSwitch-L ab1/nExtensionData : VMware.Vim.HostVirtualSwitchnClient : VMware.VimAutomation.ViCore.Impl.V1.VimClientn

現在我們來創建一個埠組,以便我們可以將虛擬機連接到路由器的內部介面。 我們可以使用New-VirtualPortGroup 這個cmdlet。

PowerCLI C:> New-VirtualPortGroup -Name Lab1 -VirtualSwitch Lab1 nName Key VLanId PortBinding NumPorts n---- --- ------ ----------- -------- nLab1 key-vim.host.PortGroup-Lab1 0n

在ESXi虛擬交換機中,默認情況下有一個安全策略,以防止進行發送安全攻擊,如網路嗅探,ARP Spoofing和其他基於網路的攻擊技術。 如果希望練習這些內容,可以手動開啟,但是這會降低虛擬交換機的安全等級。 要查看當前正在應用的安全策略,可以使用Get-SecurityPolicy 這個cmdlet。

PowerCLI C:> Get-VirtualSwitch -Name lab1 | Get-SecurityPolicy nVirtualSwitch AllowPromiscuous ForgedTransmits MacChanges ------------- ---------------- --------------- ----------nLab1 False True Truen

可以看出,交換機的輸出將允許偽造傳輸,改變MAC地址,但不允許將介面置為混雜模式。 要修改策略,我們可以使用Set-SecurityPolicy 這個cmdlet。 在下面的示例中,我將AllowPromiscuous設置為true。

PowerCLI C:> Get-VirtualSwitch -Name lab1 | Get-SecurityPolicy | Set-SecurityPolicy -AllowPromiscuous $true nVirtualSwitch AllowPromiscuous ForgedTransmits MacChanges ------------- ---------------- --------------- ----------nLab1 True True Truen

安裝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-VAppnNAMEn Import-VAppnSYNOPSISn This cmdlet imports OVF (Open Virtualization Format) and OVA packages. The package can contain a virtual appliancen or a virtual machine.nSYNTAXn Import-VApp [-Source] <String> [-OvfConfiguration <Hashtable>] [[-Name] <String>] [-Location <VIContainer>]n [-VMHost] <VMHost> [-Datastore <StorageResource>] [-Force] [-DiskStorageFormat <VirtualDiskStorageFormat>]n [-Server <VIServer[]>] [-RunAsync] [-WhatIf] [-Confirm] [<CommonParameters>nDESCRIPTIONn This cmdlet imports OVF (Open Virtualization Format) and OVA packages. The package can contain a vApp or a virtualn machine. The cmdlet returns a VApp object when the OVF contains a vApp and a VirtualMachine object when the OVFn contains a single virtual machine.nRELATED LINKSn Online version: http://www.vmware.com/support/developer/PowerCLI/PowerCLI63R1/html/Import-VApp.htmln Export-VAppn Get-VAppn New-VAppn Remove-VAppn Set-VAppn Start-VAppn Stop-VAppn Move-VAppnREMARKSn To see the examples, type: "get-help Import-VApp -examples".n For more information, type: "get-help Import-VApp -detailed".n For technical information, type: "get-help Import-VApp -full".n For online help, type: "get-help Import-VApp -online"n

為了確保我們所提供的值都是正確的, 我們首先將我們要部署的OVA文件的ESXi伺服器的VMhost 保存到一個變數中。

PowerCLI C:> $vmhost = Get-VMHostn

其中有一個參數是Datastore,它不是強制性要指定的參數,但我想確保VM存儲在我的伺服器上的SSD中,所以我列出了可用的數據存儲。

PowerCLI C:> Get-Datastore nName FreeSpaceGB CapacityGB n---- ----------- ---------- ndatastore1 690.048 691.000 nSSD1 904.075 931.250 nisostore 1,554.740 690.048 691.000n

一旦我決定了存儲的位置,那我就會將其保存在一個變數中。

$datastore = Get-Datastore -Name "SSD1"n

現在我就可以導入我剛剛從VyOS Web頁面中下載的OVA文件了。

PowerCLI C:> Import-VApp -Source C:vyos-1.1.7-amd64-signed.ova -Name "Lab1_Router" -VMHost $vmhost -Datastore $datastore nName PowerState Num CPUs MemoryGB n---- ---------- -------- -------- nLab1_Router PoweredOff 1 1.000n

當我們查看VM的網路適配器時,我們看到它只有一個網路適配器1,並且它連接到了「VM網路」的埠組。

PowerCLI C:> Get-NetworkAdapter -VM "Lab1_Router" Name Type NetworkName MacAddress WakeOnLan Enabled ---- ---- ----------- ---------- --------- Network adapter 1 Vmxnet3 VM Network Truen

我們需要向VM中添加另一個網路適配器,並將其添加到我們創建的Lab1埠組中。 我們首先將埠組對象保存到變數中,並將該變數與New-NetworkAdapter 這個cmdlet的PortGroup參數一起使用,以便在VM上創建新的網路適配器。

PowerCLI C:> $pg = Get-VirtualPortGroup -Name lab1 nPowerCLI C:> Get-VM -Name "lab1_router" | New-NetworkAdapter -Portgroup $pg -StartConnected nWARNING: Parameter VM is obsolete. Passing multiple values to this parameter is obsolete. Name Type NetworkName MacAddress WakeOnLan Enabled n---- ---- ----------- ---------- --------- nNetwork adapter 2 e1000 Lab1n

一旦我們添加了第二塊網路適配器,我們的邏輯路由器網路配置應該看起來像下圖所示的網路:

路由器配置

現在我們開始配置路由器。 本文示例的家庭網路是192.168.1.0/24網路,並且內部網路將是10.101.101.0/24的網路。 在本文這個示例中,我需要使用其他路由器或其他介面創建一個子網,我將使用第三個八位位元組來區分它們。 我傾向於提交並保存我的配置信息,以便在我不斷向前推進時能夠進行測試。

路由器的初始IP配置將如下圖所示。

我們使用vyos / vyos的默認登陸憑證連接到路由器的控制台,在命令行提示中我們可以使用show命令驗證介面名稱並運行show interfaces,一旦名稱確認之後,我可以通過進入配置模式啟動配置並設置IP地址和網關信息。

configure nset interfaces ethernet eth0 address 192.168.1.9/24 nset interfaces ethernet eth1 address 10.101.101.1/24 nset system gateway-address 192.168.1.1 ncommit nsaven

我們可以使用ping命令來測試我們的配置,使用ping命令後在配置模式提示的三個請求 8.8.8.8的回顯結果來確定我們是否可以到達網關。

@vyos# ping -c 3 8.8.8.8nPING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.n64 bytes from 8.8.8.8: icmp_req=1 ttl=54 time=50.3 msn64 bytes from 8.8.8.8: icmp_req=2 ttl=54 time=53.6 msn64 bytes from 8.8.8.8: icmp_req=3 ttl=54 time=47.5 msn--- 8.8.8.8 ping statistics ---n3 packets transmitted, 3 received, 0% packet loss, time 2003msnrtt min/avg/max/mdev = 47.570/50.545/53.675/2.508 msn[edit]nvyos@vyos#n

一旦我們將基本配置設置完畢,我們就可以命名路由器,並將vyos帳戶的默認密碼設置的更加安全。 如果要使用特殊字元,需要將密碼括在引號之間。

set system login user vyos authentication plaintext-password $secureP@ss nset system host-name R0 ncommit nsaven

現在我們在路由器上啟用SSH以進行遠程管理。 在這種情況下,我們只是啟用服務。 我建議你使用密鑰,限制密碼和MA C地址以及採取其他措施來探索強化路由系統,以便養成配置實驗室的好習慣,把它當成是一個生產環境去配置。

set service ssh port 22 ncommit nsaven

在下一步中,我們將在路由器上對外部和內部的介面進行標記,然後創建第一個NAT網路10.101.0.0/16。 記住在開始時我提到的:我們可以使用第三個八位位元組來創建子網並區分它們。

###########################n# Configura NAT interfacesn##########################nset interfaces ethernet eth0 description OUTSIDEnset interfaces ethernet eth1 description INSIDEn#####################n# Configure NAT rule.n#####################nset nat source rule 100 outbound-interface eth0nset nat source rule 100 source address 10.101.0.0/16nset nat source rule 100 translation address masqueradencommitnsaven

下一步將設置內部DHCP伺服器的初始配置。 此伺服器將為我們的實驗室中部署的VM分配IP地址和基本配置信息。

IP地址池:10.101.101.20 – .254

域名:「acmelabs.pv」(你可以使用任何你喜歡的域名)

DNS伺服器:10.101.101.1(一旦我們有了Active Directory域控制器,我們將更改該地址)

默認網關:10.101.101.1

##########################n# Configure DHCP service.n#########################nset service dhcp-server disabled falsenset service dhcp-server shared-network-name LAN subnet 10.101.101.0/24 default-router 10.101.101.1nset service dhcp-server shared-network-name LAN subnet 10.101.101.0/24 dns-server 10.101.101.1nset service dhcp-server shared-network-name LAN subnet 10.101.101.0/24 domain-name acmelabs.pvtnset service dhcp-server shared-network-name LAN subnet 10.101.101.0/24 lease 86400nset service dhcp-server shared-network-name LAN subnet 10.101.101.0/24 start 10.101.101.20 stop 10.101.101.254ncommitnsaven

由於在DHCP池中我們將路由器指定為了DNS伺服器,因此我們將配置路由器作為DNS轉發器,並指定兩個Google的公共DNS伺服器。 緩存大小設置為0,以便它總是能夠獲取最新地址,你可以改變這個設置值如果你願意的話,我們將在路由器的內部介面中把它設置為監聽狀態。

###########################n# Configure DNS Forwarding.n###########################nset service dns forwarding cache-size 0nset service dns forwarding listen-on eth1nset service dns forwarding name-server 8.8.8.8nset service dns forwarding name-server 8.8.4.4ncommitnsaven

接下來,我們將配置一組基本的防火牆規則,並且為每個規則都設置一個名稱。

OUTSIDE-LOCAL是針對從外部流向防火牆上運行的服務的流量。

OUTSIDE-IN是從外部到內部網路的流量

防火牆的規則設置比較容易。 我們將允許以下網路流量從外部流入到路由器:

ICMP-ECHO請求,Ping。

SSH連接。

針對SSH的暴力破解。

######################n# Configure Firewall.n#####################n# Default Drop Rulesnset firewall name OUTSIDE-IN default-action dropnset firewall name OUTSIDE-IN rule 10 action acceptnset firewall name OUTSIDE-IN rule 10 state established enablenset firewall name OUTSIDE-IN rule 10 state related enablenset firewall name OUTSIDE-LOCAL default-action dropnset firewall name OUTSIDE-LOCAL rule 10 action acceptnset firewall name OUTSIDE-LOCAL rule 10 state established enablenset firewall name OUTSIDE-LOCAL rule 10 state related enablen# Accept Ping requestsnset firewall name OUTSIDE-LOCAL rule 20 action acceptnset firewall name OUTSIDE-LOCAL rule 20 icmp type-name echo-requestnset firewall name OUTSIDE-LOCAL rule 20 protocol icmpnset firewall name OUTSIDE-LOCAL rule 20 state new enablen# Deter SSh brute-force attacks by allowing only 4 new connections within 60 secondsnset firewall name OUTSIDE-LOCAL rule 30 action dropnset firewall name OUTSIDE-LOCAL rule 30 destination port 22nset firewall name OUTSIDE-LOCAL rule 30 protocol tcpnset firewall name OUTSIDE-LOCAL rule 30 recent count 4nset firewall name OUTSIDE-LOCAL rule 30 recent time 60nset firewall name OUTSIDE-LOCAL rule 30 state new enablen# Allow SSH to Router from the outside.nset firewall name OUTSIDE-LOCAL rule 31 action acceptnset firewall name OUTSIDE-LOCAL rule 31 destination port 22nset firewall name OUTSIDE-LOCAL rule 31 protocol tcpnset firewall name OUTSIDE-LOCAL rule 31 state new enablen# Apply firewall rulesnset interfaces ethernet eth0 firewall in name OUTSIDE-INnset interfaces ethernet eth0 firewall local name OUTSIDE-LOCALncommitnsaven

結論

在本系列文章的第二部分也就是本文中,我們講述了以下幾點:

為內部網路創建虛擬交換機和埠組。n部署了VyOS路由器鏡像。n在路由器上進行了基本NAT,SSH和防火牆配置。n

在下一篇博文中,我將介紹用於訪問內部網路的L2TP / IPSec和OpenVPN的VPN配置。一如既往的希望你能在這找到有用的信息。

本文參考來源於darkoperator,如若轉載,請註明來源於嘶吼: Home Lab家庭實驗室搭建之網路配置篇 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

深度剖析Struts2遠程代碼執行漏洞(CVE-2017-5638)
2017-08-22
乾貨 | 《魔獸爭霸3》地圖漏洞分析介紹

TAG:技术分析 | 极客Geek |