如何让 forticlient 在 OSX El Capitan 中工作

hbo*_*ert 10 vpn fortinet split-tunnel

自从 OSX El Capitan 以来,当使用水平分割时,forticlient VPN 软件就失效了。问题是 DNS 请求是在正常的主接口上发送到 VPN 隧道的 DNS。

我们如何通过正确的接口(即 VPN 隧道)发送 DNS 请求

hbo*_*ert 11

编辑答案

(重新)改进了几乎所有人的改进答案(@elmart,@user26312,我自己)。脚本中不需要编辑:

#!/bin/bash
default_line=$(netstat -rn |grep default)
gateway=$(echo $default_line | awk '{print $2}')
interface=$(echo $default_line | awk '{print $6}')
echo $gateway
echo $interface

scutil <<EOF
d.init
get State:/Network/Service/forticlientsslvpn/IPv4
d.add InterfaceName ppp0
set State:/Network/Service/forticlientsslvpn/IPv4
EOF

route delete default
route delete -ifscope $interface default
route add -ifscope $interface default $gateway
route add -net 0.0.0.0 -interface $interface
Run Code Online (Sandbox Code Playgroud)

使用 sudo 使您放入的文件可执行并执行(在与 VPN 连接后)。在脚本进行任何更改之前,它会查看您当前的默认路由,从而了解您当前的网关和接口。


旧答案

这不是一个完整的解决方案,您必须在每次 VPN 连接设置后执行以下两项高级操作:

  1. 我们必须将隧道的接口设置为 ppp0
  2. 重做默认路由(因为 1. 隐式设置了错误的默认网关,此后拆分隧道仍应正常工作)

创建一个文件名scutil-forti,例如

d.init
get State:/Network/Service/forticlientsslvpn/IPv4
d.add InterfaceName ppp0
set State:/Network/Service/forticlientsslvpn/IPv4
Run Code Online (Sandbox Code Playgroud)

重做网关路由,因此创建另一个文件 ,routes-forti与(注意具有特定网络设置的行):

sudo route delete default
sudo route delete  -ifscope en0 default # This line depends on your interface
sudo route add -ifscope en0 default 192.168.2.252  # This depends on your normal local gateway.
sudo route add -net 0.0.0.0 -interface en0
Run Code Online (Sandbox Code Playgroud)

现在,执行,

$ cat scutil-forti |sudo scutil ; bash routes-forti
Run Code Online (Sandbox Code Playgroud)


elm*_*art 8

我已将 @hbogert 的解决方案改造成更易于管理的单个脚本:

#!/bin/bash

scutil <<EOF
d.init
get State:/Network/Service/forticlientsslvpn/IPv4
d.add InterfaceName ppp0
set State:/Network/Service/forticlientsslvpn/IPv4
EOF

route delete default
route delete -ifscope en0 default
route add -ifscope en0 default 192.168.1.1
route add -net 0.0.0.0 -interface en0
Run Code Online (Sandbox Code Playgroud)

假设您使用的是 en0 接口和 192.168.1.1 默认网关。如果没有,请将它们替换为相应的值。如果您不认识它们,请键入route get www.google.com以获取它们。然后:

  • 将其放入路径中某处的文件(例如“fix-vpn”)中。
  • 授予它执行权限 ( chmod u+x fix-vpn)。
  • sudo fix-vpn在连接到 vpn 后使用 sudo ( )运行它。

我试过了,它有效。正如我所说,这只是对先前解决方案的返工。我只是将它作为单独的答案发布,因为我在评论中没有足够的空间。

顺便说一句,我还认为这可以包含在/etc/ppp/ip-up脚本中,以便在连接时自动执行。但由于某种原因,它不能那样工作。如果有人可以对此进行解释/改进,请这样做。