如何在 Linode 上實現無 NAT 的 OpenVPN 用戶端路由

如何在 Linode 上實現無 NAT 的 OpenVPN 用戶端路由

我已經建立了一個 OpenVPN 網絡,並且它工作正常,我可以從遠端客戶端存取內部/LAN 電腦。然而,我的問題是,來自遠端計算機的所有流量對於 LAN 計算機來說似乎來自 OpenVPN 伺服器計算機,而不是來自客戶端計算機。

為了更好地解釋,請考慮我的網路拓撲:

網路拓撲結構

機器 R 連接到機器 A 上的 OpenVPN 伺服器,並分配到 IP 位址 10.200.200.5。

然後,機器 R 向機器 B 上運行的 Apache 發出請求。問題是機器 B 看到來自 192.168.0.10(機器 A 的 IP)而不是 10.200.200.5 的請求。

我想要後者。

我目前的設置

機器A

這是相關 iptables 規則的片段:

*nat
:PREROUTING ACCEPT [18:1080]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

-A POSTROUTING -o eth0 -j MASQUERADE

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

// snip

# accept incoming VPN connections
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT

# forward VPN traffic
-A FORWARD -s 10.200.200.0/25 -d 192.168.128.0/17 -i tun0 -j ACCEPT
-A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT

我還啟用了 ip_forwarding:

echo 1 > /proc/sys/net/ipv4/ip_forward

..並對 /etc/sysctl.conf 進行了適當的更改以使其永久化。

在 OpenVPN 設定中,我有:

server 10.200.200.0 255.255.255.128
push "route 192.168.0.0 255.255.255.0"

機器B

由於機器A不是機器B的網關,所以我在機器B上手動新增了一條路由,如下:

ip route add 10.200.200.0/25 via 192.168.0.10 dev eth0

為了測試正在路由的 IP,我建立了一個名為的小型 PHP 腳本showip.php

<?php echo "Your IP is: ", $_SERVER['REMOTE_ADDR'], "\n"; ?>

機器R

# wget -q -O - http://192.168.0.11/showip.php
Your IP is: 192.168.0.10

我該如何讓它顯示 10.200.200.5?

更新

為了澄清,在我的特定情況下,機器 A 有一個 NIC (eth0),它同時服務 LAN 和 WAN。

答案1

回答我自己的問題:

作為進一步的背景,這些機器託管在 Linode 上。事實證明,他們在交換器中使用靜態映射,以便將流量路由到 LAN 上的特定節點。由於 VPN 來源 IP 不是這些靜態映射的一部分,因此流量不會路由到任何地方。

所以這是 Linode 特有的問題,但希望它可以幫助其他人了解這一點。

答案2

由於您發現機器 A 和機器 B 之間的連接並不是真正的交換以太網,而且它只能使用已指派的 IP 位址處理流量,因此您需要尋找其他解決方案。

這可以透過使用隧道來實現。有多種類型的隧道可供使用。一種是使用 VPN,這可能是最簡單的,因為機器 A 已經是 VPN 伺服器。然後,您只需將機器 B 設為 VPN 用戶端,然後新增路由表條目即可透過該 VPN 連線轉送所需的前綴。

另一種選擇是使用 GRE 隧道或簡單的 IP over IP。這些隧道和相關路由可以靜態配置,這將使其比 VPN 方法更具優勢。

答案3

在機器A 上,您有一條NAT 規則,這會導致它在將封包路由到機器B 之前更改客戶端IP。轉發到機器B。

如果機器 B 上的路由表不完整,此變更可能會導致連線停止運作。在這種情況下,資料包被正確傳送到機器 B,但它沒有路由來傳送回應。這要么讓它根本不響應,要么將響應發送到互聯網而不是 VPN 伺服器。

在機器 B 上,您可以嘗試使用以下命令新增路由ip route add 10.200.200.0/24 via 192.168.0.10

相關內容