OpenVPN 不会通过 VPN 重定向所有流量

OpenVPN 不会通过 VPN 重定向所有流量

我刚刚设置完 VPN,Google 显示我的 IP 是我的 VPN 的 IP,所以这没问题。但是,当我通过 SSH 登录 VPN 服务器时,它显示我上次登录的 IP 是我的(非 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

有办法解决这个问题吗?

答案1

这是 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 网关。

相关内容