从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立之后,你必须做以下两件事:
ppp0 例如,创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来获取他们。 然后:
chmod u+x fix-vpn )。 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。