Iptables

OpenVPN 不通過 VPN 重定向所有流量

  • December 14, 2013

我剛剛完成了我的 VPN 設置,Google顯示我的 IP 是我的 VPN 的,所以這很好。但是,當我通過 SSH 登錄到 VPN 伺服器時,它顯示我的最後一次登錄是我的(非 VPN 的)IP(即使在多次登錄/退出之後)。這讓我相信並非所有數據都通過 VPN。

在我的server.conf我有以下指令:

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

iptables設置了以下內容:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

有沒有辦法解決這個問題?它

這是 100% 的預期行為。為了通過您的 VPN 連接路由所有流量,添加了一條預設路由,並將虛擬介面作為目標。但這帶來了一個問題——用於承載 VPN 連接的網路數據包本身也會被路由到 VPN 介面,從而形成一種路由循環。為了解決這個問題,使用您的普通 Internet 網關作為目標添加到 VPN 伺服器的靜態主機路由。這樣,OpenVPN 創建的數據包可以通過 Internet 傳輸到 OpenVPN 伺服器,而其他所有內容都通過 VPN 連結定向。

由於主機路由,如果您嘗試通過 SSH 連接到您的 VPN 伺服器的 Internet 地址,該連接將通過您的正常 Internet 連接,您將在who或的輸出中看到您的 IP last。另一方面,如果您通過 SSH 連接到 VPN 隧道的另一端,則您的連接似乎源自分配給隧道客戶端的 IP 地址。

例如,這是典型的 OpenVPN 虛擬介面的配置方式:

$ ifconfig
...
tun0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500
   inet 10.10.11.9 --> 10.10.11.10 netmask 0xffffffff 
   open (pid 48658)

在這種情況下,VPN 隧道的遠端是10.10.11.10. 這是一個 BSD 風格的ifconfig輸出(實際上是 OS X)。Linux 上的輸出有點不同。這是相應的主機路由(同樣是 BSD 格式):

$ netstat -rn
Destination        Gateway            Flags        Refs      Use   Netif Expire
0/1                10.10.11.9         UGSc            0        0    tun0
default            10.0.1.1           UGSc           22        0     en0
10.0.1/24          link#4             UCS             1        0     en0
10.10.11/24        10.10.11.9         UGSc            0        0    tun0
10.10.11.9         10.10.11.10        UHr             5        0    tun0
yy.yy.yy.yy/32     10.0.1.1           UGSc            1        0     en0

第一條路由將所有流量(定向到本地網路的流量除外10.0.1/24)引導到tun0介面,即 OpenVPN。到 OpenVPN 伺服器的靜態路由位於最後一行。10.0.1.1在這種情況下是 Internet 網關。

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