Linux

通過網關路由到另一個子網 - 防火牆生成器

  • April 9, 2020

該問題與此處發布的問題非常相似: 通過網關路由到另一個子網

我的問題是關於以下網路拓撲的正確路由/iptable 設置,其中包括站點 A 和站點 B 之間的站點到站點 VPN。

網路架構

客戶端 A想要訪問客戶端 B,例如 web 伺服器託管在客戶端 B上。為簡單起見,我只想關注站點 A。讓我們假設client-Bvpn-server-B作為它的網關。

如果client-A使用vpn-server-A作為其網關,則 client -A可以訪問client-B上的網路伺服器。但是客戶端 A也想通過網關訪問網際網路。因此,客戶端 A網關A 設置為其預設網關。所以gateway-A應該將 192.168.1.0/24 的流量轉發到vpn-server-A。我使用防火牆生成器來配置防火牆和路由規則。我在防火牆生成器中設置了以下內容。

防火牆生成器

客戶端 A可以 ping 成功客戶端 B,但無法建立 http(s) 連接。查看gateway-A的日誌文件:

Apr  3 21:22:35 gateway-A kernel: [ 5456.799769] RULE 1 -- ACCEPT IN=eth0 OUT=eth0 MAC=00:11:22:33:44:55:00:55:44:33:22:11:08:00 SRC=192.168.0.100 DST=192.168.1.100 LEN=52 TOS=0x02 PREC=0x00 TTL=127 ID=28583 DF PROTO=TCP SPT=53133 DPT=443 WINDOW=8192 RES=0x00 CWR ECE SYN URGP=0
Apr  3 21:22:35 gateway-A kernel: [ 5456.814869] RULE 3 -- DENY IN=eth0 OUT=eth0 MAC=00:11:22:33:44:55:00:55:44:33:22:11:08:00 SRC=192.168.0.100 DST=192.168.1.100 LEN=40 TOS=0x00 PREC=0x00 TTL=127 ID=28584 DF PROTO=TCP SPT=53133 DPT=443 WINDOW=260 RES=0x00 ACK URGP=0

問題似乎是gateway-A沒有正確地將流量重定向到vpn-server-A。作為上面連結的文章中的最後一條評論,應該檢查防火牆。可能需要額外的 NAT,但我不明白為什麼。在gateway-A訪問 192.168.1.0/24 的傳入請求應該只是重定向到vpn-server-A

您看到的防火牆條目是:

  • 初始 TCP SYN(握手步驟 1):允許。
  • 伺服器 TCP SYN-ACK(握手步驟 2):失去?
  • 隨後的 TCP ACK(握手步驟 3):被阻止。

這向我表明,防火牆上的連接跟踪沒有像您預期的那樣工作。它表明要麼存在路由問題(下面有更多資訊),要麼存在防火牆配置問題。我沒有關於您正在使用的防火牆或 VPN 的資訊/經驗,因此很難提供更多詳細資訊。

路由問題:

在提供的圖表中,從客戶端 A 到客戶端 B 的流量似乎直接通過互連網路(未加密)路由(因為客戶端 A 的網關是網關 A),從客戶端 B 到客戶端 A 的流量通過 VPN 路由(因為客戶端 B 的網關是 vpn-server-B)。

由於 VPN 伺服器 A 與客戶端 A 位於同一網路上,因此通過 VPN 路由的任何數據包都將直接傳遞到客戶端 A,而不是通過網關 A。

這意味著網關 A永遠不會看到來自客戶端 B 的 TCP SYN-ACK。因此,就網關 A 而言,A 和 B 之間的連接永遠不會建立,並且該連接上從客戶端 A 到客戶端 B 的進一步流量被阻止。

Ping 流量很好,因為它在未加密的情況下出去,然後以加密方式返回,但隨後發送的數據包與第一個相同,因此與 TCP 連接相比,它們被視為相同,即使建立起來也需要大量的雙向通信。

我建議將 VPN 伺服器放在與客戶端不同的網路上(例如 192.168.100.0/24 和 192.168.101.0/24),並在網關伺服器(網關 A 和網關 B)中創建顯式路由,為遠端路由流量通過 VPN 網路。這樣您就不必專門配置客戶端。

引用自:https://serverfault.com/questions/1010808