我已在运行 ddwrt 的路由器上成功配置了 OpenVPN 客户端,并且还将其设置为在启动时启用 OpenVPN。
家庭网络 => ddwrt 路由器与 OpenVPN 客户端 => web
如果 OpenVPN 客户端不是正在运行。所以我想知道如果 OpenVPN 客户端是跑步。
我确信我的家庭网络连接处于活动状态,因为我现在正在通过 wifi 连接到路由器的 Macbook 上输入此内容,而我的另一台 Macbook 通过 iPhone 个人热点连接到网络。我正在第二台 Macbook 上进行测试。
重要信息:
路由器防火墙已关闭。
IP 路由信息
root@myrouter:~# ip route list
0.0.0.0/1 via 10.208.185.5 dev tun1
default via my-wan-gateway-ip-here dev ppp0
my-wan-gateway-ip-here dev ppp0 proto kernel scope link src my-real-ip-here
10.208.0.1 via 10.208.185.5 dev tun1
10.208.185.5 dev tun1 proto kernel scope link src 10.208.185.6
127.0.0.0/8 dev lo scope link
128.0.0.0/1 via 10.208.185.5 dev tun1
169.254.0.0/16 dev br0 proto kernel scope link src 169.254.255.1
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.1
my-vpn-ip via my-wan-gateway-ip-here dev ppp0
我的 OpenVPN 配置运行由 dd-wrt 创建的默认 router-up.sh自动地。 我没有对该脚本进行任何更改。
root@myrouter:/tmp# cat /tmp/openvpncl/route-up.sh
#!/bin/sh
iptables -D POSTROUTING -t nat -o tun1 -j MASQUERADE
iptables -I POSTROUTING -t nat -o tun1 -j MASQUERADE
iptables -D INPUT -i tun1 -j ACCEPT
iptables -I INPUT -i tun1 -j ACCEPT
我的 DNS 服务器(使用 Comodo 和 OpenDNS)
root@myrouter:/tmp# cat resolv.dnsmasq
nameserver 8.26.56.26
nameserver 8.20.247.20
nameserver 208.67.222.222
我还使用了一些在网上找到的脚本,以便某些 IP 可以绕过 VPN。此脚本是我的启动脚本 (rc_startup) 的一部分。我需要它,这样我才能在平板电脑上玩这个特定的游戏。
#!/bin/sh
sleep 30
NO_VPN_LST="192.168.1.11 192.168.1.2"
[ -z "$NO_VPN_LST" ] && exit 0
WAN_GWAY="0.0.0.0"
while [ $WAN_GWAY == "0.0.0.0" ]; do
sleep 3
WAN_GWAY=`nvram get wan_gateway`
done
ip route add default via $WAN_GWAY table 10
for ipa in $NO_VPN_LST; do
ip rule add from $ipa table 10
done
ip route flush cache
exit 0
答案1
您面临的问题可能是默认/源路由问题之一。
当 VPN 未开启时,一切正常,因为默认网关位于您的 Internet 连接之外,但是当您启动 VPN 时,会添加几个新路由“0.0.0.0/1 via 10.208.185.5 dev tun1 和 128.0.0.0/1 via 10.208.185.5 dev tun1 ”这会导致默认网关成为 VPN 端点,而不是您的常规连接。
因此,有两种解决方案,具体取决于您需要做什么 -
更简单的解决方案是删除创建默认网关的那 2 行,并在您想要通过 VPN 访问的 VPN 连接上编程(或让您的提供商编程)特定路由。如果您将 VPN 用于特定目的(例如连接到公司网络),这才是一种选择,但如果您想在更广泛的互联网上隐藏您的身份,这种方法就不太适用了。
更难的解决方案是执行“基于源的路由” - 这意味着设置 2 个路由表 - 当前路由表是默认路由表,第二个路由表用于响应通过常规连接直接传入的内容,并使用不同的默认路由。这并非易事,但有许多链接介绍如何做到这一点,包括这里和这里 (谷歌的关键词是“源路由”或“策略路由”——如果你真的想成为这方面的专家,你可能需要熟悉拉特- 第 4 章介绍策略路由)