OpenVPN 不通過 VPN 重定向所有流量
我剛剛完成了我的 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
或的輸出中看到您的 IPlast
。另一方面,如果您通過 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 網關。