AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 728702
Accepted
hbogert
hbogert
Asked: 2015-10-14 10:50:30 +0800 CST2015-10-14 10:50:30 +0800 CST 2015-10-14 10:50:30 +0800 CST

如何让 forticlient 在 OSX El Capitan 中工作

  • 772

自 OSX El Capitan 以来,forticlient VPN 软件在使用水平分割时很糟糕。问题是 DNS 请求在普通主接口上发送到 VPN 隧道的 DNS。

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

vpn
  • 8 8 个回答
  • 26049 Views

8 个回答

  • Voted
  1. Best Answer
    hbogert
    2015-10-14T11:02:45+08:002015-10-14T11:02:45+08:00

    编辑后的答案

    (重新)改进了几乎所有其他人的改进答案(@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 之后)。在脚本进行任何更改之前,它会查看您当前的默认路由,因此知道您当前的网关和接口。


    旧答案

    这不是一个完整的解决方案,您必须在每次 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
    

    重做网关路由,因此制作另一个文件 , 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
    

    现在,执行,

    $ cat scutil-forti |sudo scutil ; bash routes-forti
    
    • 11
  2. elmart
    2015-10-16T00:37:15+08:002015-10-16T00:37:15+08:00

    我已经将@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
    

    假设您使用的是 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脚本中,以便在连接时自动执行。但由于某种原因,它不能那样工作。如果有人可以对此进行解释/改进,请这样做。

    • 8
  3. mr. brody
    2015-10-16T12:45:04+08:002015-10-16T12:45:04+08:00

    我能够使用旧版本的 Forticlient 并确认它可以工作!

    这是我的保管箱上的链接:

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

    • 4
  4. asmaier
    2016-06-29T06:46:06+08:002016-06-29T06:46:06+08:00

    更新:为 Mac OS X 下载和安装最新的官方版本 5.4.1 修复了 Mac OS X El Capitan 上的所有问题。

    如fortinet 论坛中所述,应下载最新(尚未发布)版本的 FortiClient 以解决 Mac OS X El Capitan 上的问题:

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

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

    • 1
  5. user26312
    2015-10-27T15:16:02+08:002015-10-27T15:16:02+08:00

    稍微改进@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用于去除空格。

    我还添加了(虽然我不知道这是否是一种改进):

    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。

    • 0
  6. michael.therrien
    2016-02-11T10:01:39+08:002016-02-11T10:01:39+08:00

    我拿了 hbogert 的脚本并将其包装在 Applescript 中,供我自己和另一位员工使用,可在此处获得: https ://www.dropbox.com/s/lh0hsqdesk3i0n7/Execute-Post-VPN-Connection.app.zip?dl=0

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

    • 0
  7. Christoph Hermann
    2016-05-17T02:43:24+08:002016-05-17T02:43:24+08:00

    我通过重新配置 DNS 设置以在 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
    

    可以在此处找到有关此的详细信息。

    • 0
  8. Frédéric Camblor
    2018-05-16T02:52:45+08:002018-05-16T02:52:45+08:00

    在我当前的 OS X 版本(Sierra 10.12.6)和 FortiClient 5.6.1 上,如果 ServerAddresses 有超过 2 个地址,那么“set”调用不会持续任何东西(如果你“get”,什么都不会更新)。为了解决这个问题,我决定只保留第一个 FortiClient DNS 地址并将其与我的公共 DNS 地址(8.8.8.8)合并。

    此外,我建议在 FortiClient 连接上自动运行 bash 脚本:这可以通过导出 FortiClient 配置脚本然后重新导入来完成

    完整指南如下:

    1/ 创建以下 bash 脚本并将其存储在某处(在我的情况下,它是在 中~/bashscripts/update-forticlient-dns.sh)并且不要忘记用FortiClient 连接时<FIRST IP ADDRESS FOR FORTICLIENT DNS>的结果替换scutil --dns | grep "nameserver\[0\]"

    #!/bin/bash
    
    ROOT_PASSWORD=$1
    
    # Uncomment this if you want to log everything happening during this script execution into a dedicated log file
    # exec >/tmp/forticlient-log 2>&1
    
    # Ensuring we did a sudo correctly once
    # Because we cannot both use a pipe and an stdin redirection at the same time
    # (or at least, my bash knowledge is not wide enough for that :-))
    echo "$ROOT_PASSWORD" | sudo -S ls /dev/null
    sudo scutil <<EOF
    get State:/Network/Service/forticlientsslvpn/DNS
    d.add ServerAddresses 8.8.8.8 <FIRST IP ADDRESS FOR FORTICLIENT DNS>
    set State:/Network/Service/forticlientsslvpn/DNS
    quit
    EOF
    

    2/ 运行 FortiClient,然后进入Preferences > General并单击Backup按钮,这会将您的 FortiClient 配置导出到文件中

    3/ 在此文件中,找到并编辑/forticlient_configuration/vpn/sslvpn/connections/connection[name="YOUR CONNECTION"]/on_connect/script/script节点并在其中调用您的脚本:

    <on_connect>
       <script>
          <os>mac</os>
          <script>/Users/fcamblor/bashscripts/update-forticlient-dns.sh "your_secret_root_password_here"</script>
        </script>
    </on_connect>
    

    4/ 返回 FortiClient 控制台,单击左下角的锁,然后转到Preferences > General并单击Restore按钮:找到更新的配置文件,就是这样,您的 DNS 配置将在每次更新时即时更新连接到 VPN。

    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • 用 D-LINK DFL-CPG310 防火墙替换 Cisco Pix 防火墙

  • 最好的点对点 VPN?

  • WAN 上的 VLAN

  • 通过 VPN 连接什么是远程服务器 IP?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve