如何建立與具有相同 CIDR 的不同網路的 VPN 連接?
所以,
我有一個在 VPC 中執行的應用程序,(目前)與開發位置有 VPN 連接。比如說,10.0.2.25(內部 ELB 的 IP,只能通過 VPN 訪問)可以訪問該應用程序。我擁有的支持 VPN 的路由器(又名客戶端網關)沒有 BGP 功能。
我所在網路的 CIDR(客戶端網路為 192.168.1.0/24),在 VPC 上有一個虛擬專用網關 (vgwA) 和相應的路由規則(目標 192.168.1.0/24;目標 wgwA)。
我可以毫無問題地訪問該應用程序(所有 ACL/安全組均已正確配置)。
我的問題是當我想創建另一個到不同站點的 VPN 連接時會發生什麼,但其網路具有相同的 CIDR 塊(192.168.1.0/24)或可能重疊(或包含)它的 CIDR 塊(例如 192.168.1.0 /16)? 這是否成功 - 客戶端網路上的使用者是否能夠訪問該應用程序?
基本上,我需要什麼才能與具有相同(或部分通用)CIDR 的不同網路建立 VPN 連接?支持 BGP 的客戶網關?同一個 VPC 上的不同虛擬網關?(我不認為 AWS 允許這樣做——而且它真的沒有意義)基於客戶網關外部 IP 的路由規則?(例如目的地:87.44.75.124 目標:vgwA; - 沒有任何意義)
“正確”的解決方案是更改您的 VPC 的 CIDR 塊以防止這種重疊。由於這不是一項簡單的任務,目前,您需要在新創建的 VPC 中啟動實例的副本,您可以考慮使用以下 hack:
將您的 VPN 設備定義為動態 NAT,它將非重疊 IP 地址轉換為 VPC 的真實私有 IP,同時為具有上述一組非重疊 IP 的 VPC 中的伺服器提供本地 DNS。
更具體地說,假設您在那裡有某種 VPN 設備,您將在客戶端網路上擁有以下組件:
- 面向 VPC 的路由器有一個 IP 地址路由,例如 192.168.3.0/24 指向 VPC
- 客戶實現了一個內部 DNS 伺服器,該伺服器實現了以下類型的 DNS A 記錄:customer-A-record.customerdomain.com -> 192.168.3.x
- 本地使用者(家庭網路)使用 DNS 名稱(而非 IP 地址)訪問 VPC 資源;因此,當內部網路使用者嘗試通過 SSH 或 HTTP 連接到 VPC 主機時,他們會針對 DNS 名稱(而不是 IP 地址)執行此操作:customer-A-record.customerdomain.com
- 內部 DNS 伺服器將 DNS 名稱解析為 192.168.3.x/24 IP 地址
- 內部路由器/第 3 層交換機路由表有一個 192.168.3.x/24 的路由表條目,指向 VPC 客戶網關(它是客戶端網路上的 VPN 網關,用於終止與 VPC 的 VPN 連接)
- 客戶 VPN 網關接收到前往 192.168.3.x/24 的數據包;它有一個靜態目標 NAT DNAT 條目來翻譯 192.168.3.x-> 192.168.0.x
- 客戶 VPN 網關確保源 IP 也被轉換,以確保有一個不重疊的返回 IP 地址,因此除了 DNAT 之外,它都會源 NAT SNAT:192.168.0.x->192.168.3.x(可能是不同的源 IP 子網——對 SNAT 和 DNAT 使用相同的 IP 子網更有效)
- 客戶 VPN 網關現在在其 IPSec 隧道/介面上轉發具有 (Source-IP, Destination-IP)=(192.168.3.x,192.168.0.x) 的數據包,這會在目標網路 (VPC) 上造成衝突
- VPC 主機收到一個不衝突的數據包,執行它應該做的事情,並發送一個格式為 (Source-IP, Destination-IP)=(192.168.0.x,192.168.3.x) 的響應數據包到客戶端網路的 VPN 隧道
- 客戶端網路上的客戶 VPN 網關同時執行 DNAT/SNAT 並最終得到另一個形式為 (Source-IP, Destination-IP)=(192.168.3.x,192.168.0.x) 的非衝突響應,它然後轉發到 192.168.0.0/24 上的本地(家庭)網路。