持續的遠程工作趨勢使企業組織嚴重依賴虛擬基礎架構與虛擬專用網絡(VPN)。它們在今天是非常常見的解決方案,但微調VPN 仍然是一項棘手的任務。
網絡管理員必須選擇相關工具並手動構建一個網絡,以滿足其組織在網絡安全、用戶匿名性和網絡複雜性方面的需求。有時,VPN 無法滿足組織的需求,組織不得不尋找軟件定義網絡(SDN) 等更複雜的技術。
在本文中,我們展示瞭如何設置可在現實場景中使用的安全虛擬專用網絡,以提供對本地和雲資源的訪問。我們還將了解SDN 的功能、優勢和關鍵應用。
本文對希望增強VPN 技術及其發展方向知識的團隊領導和產品經理很有用。
什麼是VPN? VPN是一種允許多台機器通過虛擬網絡連接的技術。與需要實際的電線和/或無線電發射器到位的物理網絡不同,虛擬網絡利用現有的物理基礎設施並純粹通過軟件方式定義其拓撲。
為了解釋VPN 的工作原理,讓我們定義一些術語,考慮我們期望常規網絡具有的屬性,並了解它們通常如何在VPN 中實現:
這些東西的工作方式在真實網絡和虛擬網絡中幾乎是一樣的。主要區別在於,在虛擬網絡中,分配了IP 地址的網絡接口是虛擬的,即在操作系統視為接口的背後沒有實際的物理設備。路由到此接口的流量由實現VPN 協議的軟件處理。
由於虛擬接口沒有與其關聯的物理設備,它不能直接將數據包發送到網絡中,因此它要求其他接口為它這樣做。當虛擬接口接收到數據包時,它會確定其在虛擬網絡中的目的地(接收方的IP 地址)。然後,接口背後的軟件檢查VPN 的配置,以找到與接收方網絡節點對應的物理接口的IP 或可以將數據包路由到它的節點的IP。這是這個過程的樣子:
物理接口不轉發原始數據(即VPN 數據包的有效負載),而是傳輸整個數據包和標頭。當接收方的節點收到數據包時,其虛擬接口可以解析它並確定下一步要做什麼。
VPN 本質上混淆了兩個對等點之間的物理網絡,使它們認為它們直接相互連接並在幕後傳輸流量。此屬性允許組織為其用戶提供從本地網絡外部對敏感資源的安全遠程訪問。此外,他們不需要根據物理網絡接口的IP 地址配置複雜的路由規則。
現在,讓我們通過實際示例詳細探討如何保護您的虛擬網絡。
使用VPN 增強網絡安全VPN 實現在數據離開虛擬接口之前對所有數據進行加密,並利用VPN 網關屏蔽網絡客戶端的實際IP。讓我們看看真實世界的VPN 協議Wireguard如何確保在虛擬網絡中保護傳輸中的數據和用戶匿名。
Wireguard 是一款開源軟件,可為您的VPN 添加加密功能。以下是我們如何使用Wireguard 配置文件表達上一節中的方案:
Device1configuration:
[Interface]
Address=10.0.0.1
PrivateKey=%device1's
key%
[Peer]
PublicKey=%device2的
公鑰
%
Endpoint=%device2的IP%:
51820AllowedIPs=10.0.0.2/32
Device2配置:
[Interface]
Address=10.0.0.2
PrivateKey=%device2的
私鑰
%
ListenPort=51820
[Peer]
PublicKey=%device1's
public
key%
AllowedIPs=10.0.0.1/32這兩種配置看起來幾乎相同。兩者都定義了一個具有特定IP 地址和關聯私鑰的虛擬接口,並相互交換公鑰。第二個設備承擔服務器的角色,定義其虛擬網絡對等點可以連接到的偵聽端口。如果未定義此端口,則入站數據包將被丟棄,從而阻止任何通信的發生。
但是,對等點不必公開偵聽端口,因為服務器將使用在它們連接後創建的套接字來響應它們。所有在10.0.0.1 和10.0.0.2 之間傳輸的數據包都將由Wireguard 加密,並使用UDP 傳輸協議通過物理網絡發送到它們的目的地。
現在讓我們擴展上面描述的簡單拓撲並在網絡中引入更多對等點:
在網絡中,Device1 和Device3 之間沒有直接連接,它們必須依靠Device2 來中繼它們的數據包。這是此設置的Wireguard 配置的外觀:
Device1configuration:
[Interface]
Address=10.0.0.1
PrivateKey=%device1'sprivatekey%
[Peer]
PublicKey=%device2'spublickey%
Endpoint=%device2'sIP%:51820
AllowedIPs=10.0.0.0/24
Device2configuration:
[Interface]
Address=10.0.0.2
PrivateKey=%device2'sprivatekey%
ListenPort=51820
[Peer]
PublicKey=%device1'spublickey%
AllowedIPs=10.0.0.1/32
[Peer]
PublicKey=%device3'spublickey%
AllowedIPs=10.0.0.3/32
Device3configuration:
[Interface]
Address=10.0.0.3
PrivateKey=%device3'sprivatekey%
[Peer]
PublicKey=%device2'spublickey%
Endpoint=%device2'sIP%:51820
AllowedIPs=10.0.0.0/24現在Device2的配置和原來的有很大的不同。它有兩個[Peer] 部分,對應於Device1 和Device2。每個部分都包含給定對等點的公鑰及其虛擬IP,以便Device2 知道將哪些數據包路由到哪裡。 Device1 和Device3 配置也有點不同:它們的AllowedIPs 字段現在包含的不是單個IP,而是10.0.0.0/24 子網。這意味著此子網中的所有IP 都將路由到Device2。
這種將一台設備用作網關的設置非常普遍。 Device1可以是員工在家訪問辦公室的電腦,Device3可以是連接公司內網的目標電腦,Device2可以是外部客戶端訪問本地設備的網關,例如Device3。
在Wireguard 接口之間流動的所有流量都經過加密,連接到此VPN 的設備(網關除外)都不知道對等方的物理IP。這種連接既安全又匿名。
為什麼簡單的虛擬網絡會演變成SDN?我們上面討論的示例拓撲可用於不需要復雜網絡的小型組織。大型公司、國際組織和雲計算採用者需要更複雜和精細的解決方案。複雜的虛擬網絡是許多現代組織的支柱,這些組織允許其員工遠程工作或在多個地點開展業務。
軟件定義的網絡方法在網絡交換機、負載平衡器、網關和其他元素之上添加專用網絡服務。這些服務充當網絡基礎設施和您的業務架構之間的附加控制層。通過這一層,您可以方便地配置和管理網絡中的端點,以及建立虛擬網絡安全性能監控。
軟件定義的網絡正在迅速流行,因為它允許組織:
簡化和集中網絡管理。網絡管理員可以使用軟件定義的網絡從一個地方管理他們的網絡,而不是分別處理每個基礎設施元素和VPN 協議。中間層幫助他們方便地編排網絡端點、配置流量優先級並添加安全機制,同時節省時間。
保持網絡配置一致。當從一個地方配置和管理所有基礎架構元素時,它們會一致地工作,並且不會在虛擬專用網絡安全性和性能方面留下任何差距。
加強網絡保護。 SDN 引入了額外的可能性來保護您的網絡,例如選擇性流量阻塞和路由到特定服務、網絡分段、自動安全更新以及所有網絡元素的識別。
優化負載均衡。配置有VPN 的簡單虛擬網絡為負載平衡提供的靈活性很小,因為它專注於在虛擬元素和真實元素之間傳遞流量。 SDN 控制器可以查看整個網絡中資源的可用性,並根據負載動態將流量重新路由到各個端點。
構建更複雜的網絡。網絡服務層允許您向網絡添加任意數量的虛擬資源、雲計算服務和基礎設施元素。使用SDN對於構建大型數據中心、國際企業基礎設施、雲服務等至關重要。
請記住,建立SDN 是一個複雜的過程,仍然需要您投入大量精力來設計和規劃您的網絡。但如果實施得當,軟件定義網絡可為您提供改進虛擬網絡的可能性。
現在,讓我們看看如何通過使用軟件定義額外的端點,將上面示例中的簡單網絡轉變為高級網絡。
配置高級網絡路由具有多個內網和雲服務的網絡需要更多的網關來管理不同的子網,平衡負載,並使虛擬網絡容錯。在物理網絡中,無數網關通過Internet 路由數據包。為了有效地做到這一點,他們使用了邊界網關協議(BGP)。該協議設計用於在網關之間共享路由和可達性信息。
讓我們探索擴展網絡拓撲的示例模式:
物理網絡接口上的特定IP 在這裡並不重要,因為所有設備都連接到不同的LAN。 Device1 和Device2 連接到Gateway1,而Device3 和Device4 連接到Gateway2。但是,例如,當Device1 試圖訪問Device3 時會發生什麼?
當Device1 將數據包發送到IP 地址10.0.0.4 時,它們被路由到Gateway1,因為該IP 屬於10.0.0.0/24 子網並且Wireguard 配置指示將這些數據包重定向到10.0.0.2 對等方。但是Gateway1 的配置不包含IP 為10.0.0.4 的任何對等點,因此它必須將接收到的數據包中繼給知道如何到達目的地的人。
這就是BGP 發揮作用的地方。 Gateway1 和Gateway2 建立BGP 連接並共享路由信息。要創建這樣的連接,您可以使用BIRD Internet Routing Daemon。 BIRD 守護進程的相應配置如下:
Gateway1config
protocolbfd{
interface'wg*'{
minrxinterval10ms;
mintxinterval100ms;
idletxinterval1000ms;
multiplier5;
};
neighbor10.0.0.5;
}
protocolstatic{
route10.0.0.1/32;
route10.0.0.3/32;
}
Gateway2config
protocolbfd{
interface'wg*'{
minrxinterval10ms;
mintxinterval100ms;
idletxinterval1000ms;
multiplier5;
};
neighbor10.0.0.2;
}
protocolstatic{
route10.0.0.4/32;
route10.0.0.6/32;
}每個配置的第一部分——protocol bfd——定義了向鄰居通告路由的條件。鄰居本身應該可以通過雙向轉發檢測(BFD) 協議訪問,該協議可以快速檢測兩個鄰居之間的鏈路是否斷開。
第二部分——靜態協議——定義了向鄰居通告的靜態路由。 Gateway1 共享到Device1 和Device2 的路由,而Gateway2 共享到Device3 和Device4 的路由。因此,當網關接收到一個IP 未出現在其配置中的數據包時,它可以檢查路由表以查看BIRD 守護程序是否接收到任何相關的路由信息並將數據包轉發到下一個網關。數據包將在網關之間傳輸,直到到達目的地。
為了獲得額外的可靠性,每個對等點都可以運行BFD 客戶端來檢測它們所連接的網關是否可達。如果對等點本身不可達,則可以指示BIRD 守護進程根據其BFD 連接狀態不通告其路由。我們可以通過將此代碼添加到上面的代碼而不是protocol static來實現:
protocolstatic{
route%peervirtualIP%/32multipath
via%wireguardinterface%bfd;
}有了這個,您將擁有一個可行的虛擬軟件定義網絡,該網絡連接多個端點,保護其中的數據,並提供一些擴展空間。
結論借助Wireguard 和BIRD 等現代工具,組織可以構建跨越多個內聯網的虛擬網絡,整合雲服務,並允許用戶通過精細控制安全地訪問所有必需的資源。