![如何在 OSX 10.6 中通过 VPN 路由某些应用程序并路由其他应用程序以使用我的“标准”连接?](https://linux22.com/image/1257847/%E5%A6%82%E4%BD%95%E5%9C%A8%20OSX%2010.6%20%E4%B8%AD%E9%80%9A%E8%BF%87%20VPN%20%E8%B7%AF%E7%94%B1%E6%9F%90%E4%BA%9B%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%B9%B6%E8%B7%AF%E7%94%B1%E5%85%B6%E4%BB%96%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E4%BB%A5%E4%BD%BF%E7%94%A8%E6%88%91%E7%9A%84%E2%80%9C%E6%A0%87%E5%87%86%E2%80%9D%E8%BF%9E%E6%8E%A5%EF%BC%9F.png)
我目前在国外工作,使用公司的 VPN 进行 FTP 和一些浏览。这是一个相对较慢的连接,虽然它适合那些 VPN 必需品;但我的许多其他互联网使用可以在没有 VPN 的情况下以更快的速度完成。
有没有办法告诉 Safari 和我的 FTP 软件使用 VPN,并让所有其他连接直接连接到互联网。
我目前正在使用 OSX 的网络首选项来运行我的 VPN 连接。
塔
答案1
我会考虑使用 VirtualBox/VMWare Player 来运行一台小型机器来满足您的 VPN 连接要求,这样您就可以让您计算机的主互联网连接无需进行自定义。
这样,两个连接就完全分开了,您不必配置或自定义路由表,也不必担心复杂的网络配置。
答案2
看起来您知道您正在连接的网络 IP 和域。
实现此目的的一种方法是仅根据您请求的 IP/域使用 VPN。
您可以使用 macOS 内置 VPN 并设置“通过 VPN 发送所有流量”来实现此目的未选中,并定义路线。
例如,如果您的 FTP 服务器位于 1.2.3.4,则此命令将确保到 1.2.3.4 的流量将使用 VPN 访问互联网:
/sbin/route -n add -net 1.2.3.4/32 -interface ppp0
注意:您可以用 列出所有现有路线netstat -rn
。
如果您在 DNS 后面有动态 IP,您可以使用dig
它来检索 IP 并将其添加到路由。(10.11.12.13 是您从 VPN 获得的 IP 地址)。
dig -b 10.11.12.13 +noall +answer ftp.company.example
还有一个钩子机制可以查看/etc/ppp/ip-up
并执行它,这有助于自动化上述过程。此 bash 脚本可以自动为您创建路由并查找 IP 地址。
这是一个粗略的例子,可以说明可以做什么:
#!/bin/bash
# change name to whatever your VPN is named in Pref system
vpn_name="Company vpn"
read_args() {
# Example: ppp0 0 10.239.163.212 192.0.2.1 192.168.2.1
iface=$1; shift 3
remote_ip=$1; shift
}
log() {
echo "$@" >&2
echo "$@" 2>/dev/null >> /tmp/vpn-split-tunnel.log
}
get_vpn_iface() {
/usr/sbin/scutil --nc status "$vpn_name" | grep InterfaceName | awk '{ print $3 }'
}
lookup_ips() {
if [ "$MAC_OS_MAJOR_VER" -ge 11 ]; then
xargs dig -b $remote_ip +noall +answer | grep 'IN\s\s*A' | awk '{ print $NF "/32" }'
else
xargs dig +noall +answer | grep 'IN\s\s*A' | awk '{ print $NF "/32" }'
fi
}
init() {
echo "" 2>/dev/null > /tmp/vpn-split-tunnel.log
read_args "$@"
vpn_iface=$(get_vpn_iface)
if [[ "$iface" != "$vpn_iface" && -z "$DEBUG" ]]; then
log "Interface $iface is not for the \"$vpn_name\" connection on interface $vpn_iface"
exit
fi
}
init "$@"
cmd=(/sbin/route -n add -net "1.2.3.4/32" -interface "$iface")
log ">> ${cmd[@]}"
log $(${cmd[@]} 2>&1)
答案3
在 VPN 设置的高级部分中,有一个设置可以满足您的要求,但可能存在一些问题。它执行此处另一个答案中描述的操作,即通过您的常规默认网关发送互联网流量,并将通向 VPN 子网的路由添加到您的路由表。
可能有一些非常专业的软件尝试根据应用程序进行路由,但大多数路由都是通过 IP 地址完成的,换句话说,不是“Safari 和 FTP”,而是您指向 Safari 和您的 FTP 客户端。
以下是我所说的屏幕:
我猜如果你进入系统偏好设置、网络,选择你的 VPN 连接,然后按高级按钮,你会看到你的所有流量都通过 VPN 发送。
答案4
这并不是您想要的,但您可以绕过 VPN 的网关,以便子网之外的任何东西都不会使用 VPN: 如何使 Windows VPN 路由选择性流量(按目标网络)?。