Iptables

將發送到 VPN 子網中未分配別名 IP 的所有流量重定向到另一個 VPN 中的固定 IP

  • May 7, 2014

我有一個使用 openvpn 託管多個橋接(即分路)VPN 的伺服器,其中每個 VPN 有一個不同的 10.8.X.0/24 子網。

我希望將發送到每個 VPN 中特定的、未分配的 IP 地址(例如 10.8.X.254)的流量重定向到不同 VPN 上的固定地址(例如 10.8.1.10)。這樣做的目的是保持客戶端配置相對乾淨(即,它知道某些流量總是在其自己的子網中到達地址 254),方法是將大部分路由配置保留在 VPN 伺服器上,並且更容易修改目的地未來的IP。

首先,在 VPN 伺服器上,我在核心中啟用了 IP 轉發

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

iptables然後,我嘗試在 VPN 伺服器上為每個 VPN設置 NAT 重定向,例如

sudo iptables -t nat -A PREROUTING -s 10.8.2.0/24 -d 10.8.2.254 -j DNAT --to-destination 10.8.1.10

但是從 VPN 內部對 10.8.2.254 的 ping 請求失敗,並且伺服器的 VPN 介面上Destination Host Unreachable報告了以下網路流量tshark

6.943311    10.8.2.12 -> 10.8.2.1     SSH 274 Encrypted response packet len=208
6.943347     10.8.2.1 -> 10.8.2.12    TCP 66 42926 > ssh [ACK] Seq=97 Ack=625 Win=563 Len=0 TSval=3930766820 TSecr=80207294
6.959100 9e:10:2c:67:91:2a -> Broadcast    ARP 42 Who has 10.8.2.254?  Tell 10.8.2.12
7.983824 9e:10:2c:67:91:2a -> Broadcast    ARP 42 Who has 10.8.2.254?  Tell 10.8.2.12

這似乎表明伺服器不知道將流量發送到哪裡,即使我已經配置了上面的重定向規則。

我想也許我應該/也應該通過 VPN 設置來配置路由,但無法弄清楚如何為包含多個橋接 VPN 的系統解決這個問題;我能找到的與重定向流量相關的所有 VPN 特定資訊都是基於路由 (tun) VPN。

我想避免將目標主機添加到每個 VPN 中的解決方案,因為當 VPN 伺服器託管的 VPN 數量以及最終 VPN 伺服器的數量增加時,這會變得越來越複雜。

10.8.2.12 將 10.8.2.254 視為在同一子網中,因此它請求 10.8.2.254 的 MAC 地址將其作為目標 MAC 地址插入到 10.8.2.254 的未來數據包中。由於 10.8.2.254 不存在,因此沒有人回复,並且 10.8.2.12 永遠不會找到要設置為目標 MAC 的 MAC。

嘗試在您的主伺服器上使用 proxy_arp。迴聲 1 > /proc/sys/net/ipv4/conf/ethXX/proxy_arp

執行 tcpdump 您應該會看到 VPN 伺服器使用自己的 MAC 地址響應 10.8.x.254 的 ARP 查詢,這應該讓您更進一步。

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