如何让OSX El Capitan充满活力

从OSX El Capitan开始,使用分裂视界的时候,最好的VPN软件是borked。 问题在于DNS请求是在正常的主要接口上发送到VPN隧道的DNS。

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

已编辑的答案

(Re)几乎改善了所有人的改进答案(@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 

把你把这个文件放进去,可执行文件,并用sudo执行(连接VPN后)。 在脚本做任何改变之前,它会查看你当前的默认路由,因此知道你当前的网关和接口。


老答案

不是一个完整的解决scheme,在每个VPN连接build立之后,你必须做以下两件事:

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

例如,创build一个名称为scutil-forti的文件

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

重做网关路由,所以创build另一个文件, routes-forti ,(注意为您的networking设置特定的行):

 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 

现在,执行,

 $ cat scutil-forti |sudo scutil ; bash routes-forti 

我已经把@ hbogert的解决scheme改写成更易于pipe理的单一脚本:

 #!/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 

假设你正在使用en0接口和192.168.1.1默认网关。 如果不是,请将其replace为相应的值。 如果你不知道他们,请键入route get www.google.com来获取他们。 然后:

  • 把它放到你path的某个文件(例如'fix-vpn')中。
  • 给它执行权限( chmod u+x fix-vpn )。
  • 在连接到vpn后,用sudo( sudo fix-vpn )运行它。

我试过了,它的工作原理。 正如我所说,这只是对以前的解决scheme的返工。 我只是把它作为一个单独的答案发布,因为我没有足够的空间发表评论。

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

我能够使用旧版本的Forticlient,并确认它的工作原理!

以下是我的保pipe箱中的链接:

https://www.dropbox.com/s/p43ssvp0gusmzeq/forticlientsslvpn_macosx_4.0.2297.dmg?dl=0

更新:下载和安装最新的正式版本5.4.1的Mac OS X修复了所有的问题在Mac OS X埃尔卡皮坦。

正如在fortinet论坛中所描述的,你应该下载FortiClient的最新( 但未发布的)版本来解决Mac OS X El Capitan上的问题:

https://www.dropbox.com/sh/cb0j4pxw1f8nq84/AABHzZW1bpx1VjzYAmiK00S9a?dl=0

这对我来说是最简单的解决scheme。

改善@ elmart的答案有点(我认为)。

 #!/bin/bash scutil <<EOF d.init get State:/Network/Service/forticlientsslvpn/IPv4 d.add InterfaceName ppp0 set State:/Network/Service/forticlientsslvpn/IPv4 EOF ROUTE_OUT=$(route get www.google.com) GATEWAY=$(echo "${ROUTE_OUT}"|grep gateway|cut -d':' -f2|xargs) INTERFACE=$(echo "${ROUTE_OUT}"|grep interface|cut -d':' -f2|xargs) echo "Fixing $INTERFACE with gateway $GATEWAY" route delete default route delete -ifscope $INTEFACE default route add -ifscope $INTERFACE default $GATEWAY route add -net 0.0.0.0 -interface $INTERFACE 

这样的脚本不需要编辑(和改变接口不应该是一个问题)。 xargs被用来xargs空白。

我也补充说(虽然我不知道这是否是一个改进):

 rootcheck () { if [ $(id -u) != "0" ] then echo "We need sudo permissions to run this script" sudo "$0" "$@" # Modified as suggested below. exit $? fi } rootcheck "$@" 

脚本的一开始提醒人们使用sudo。

我把hbogert的脚本包装在Applescript中,供自己和另一位员工使用,在这里可以find: https ://www.dropbox.com/s/lh0hsqdesk3i0n7/Execute-Post-VPN-Connection.app.zip?dl =0

只需连接到VPN,然后执行应用程序并input您的pipe理员密码(sudo必需)。 注意:必须保存在/ Applications /

我通过重新configurationDNS设置,在FortiClient提供的之前使用Google DNS服务器,解决了我的问题。 不幸的是,这必须在每次重新连接之后完成。

 #!/bin/bash scutil <<EOF d.init d.add ServerAddresses 8.8.8.8 8.8.4.4 <IP ADDRESSES FOR DNS FROM FORTICLIENT> set State:/Network/Service/forticlientsslvpn/DNS quit EOF 

关于这方面的细节可以在这里find。