Làm thế nào để có được forticlient làm việc trong OSX El Capitan


10

Phần mềm VPN forticlient bị bẻ khóa, khi sử dụng đường chân trời phân chia, kể từ OSX El Capitan. Vấn đề là các yêu cầu DNS được gửi trên giao diện chính thông thường đến DNS của đường hầm VPN.

Làm cách nào để chúng tôi nhận được các yêu cầu DNS được gửi qua giao diện chính xác (ví dụ: đường hầm VPN)

Câu trả lời:


11

Đã trả lời

(Re) đã cải thiện về câu trả lời được cải thiện của mọi người khác (@elmart, @ user26312, bản thân tôi). Không cần chỉnh sửa trong tập lệnh:

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

Tạo tệp bạn đặt tệp này vào, thực thi và thực thi (sau khi kết nối với VPN) bằng sudo. Trước khi tập lệnh thực hiện bất kỳ thay đổi nào, nó sẽ xem xét tuyến đường mặc định hiện tại của bạn và do đó biết cổng và giao diện hiện tại của bạn.


Câu trả lời cũ

Không phải là một giải pháp hoàn chỉnh, bạn sẽ phải thực hiện hai điều cấp cao sau đây sau mỗi lần thiết lập kết nối VPN:

  1. Chúng ta sẽ phải thiết lập giao diện của đường hầm thành ppp0
  2. Làm lại các tuyến mặc định (vì 1. ngầm định đặt cổng mặc định sai, đường hầm phân tách vẫn hoạt động chính xác sau đây)

Tạo một tập tin với tên scutil-fortichẳng hạn

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

Làm lại các tuyến cổng, để tạo một tệp khác routes-forti, với (lưu ý các dòng có cài đặt cụ thể cho mạng của bạn):

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

bây giờ, thực thi,

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

Nhưng, những bước này cần được hoàn nguyên sau khi ngắt kết nối, phải không?
elmart

1
TL; DR không cần hoàn nguyên. Không, State:/Network/Service/forticlientsslvpn/IPv4chìa khóa ở đó để bắt đầu khi đường hầm VPN đang chạy và bị xóa khi đường hầm VPN bị xóa ngắt kết nối. Các tuyến đường không thực sự khác với những gì họ nên được.
hbogert

8

Tôi đã sửa lại giải pháp của @ hbogert thành một tập lệnh đơn dễ quản lý hơn:

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

Giả sử bạn đang sử dụng giao diện en0 và cổng mặc định 192.168.1.1. Nếu không, thay thế những giá trị tương ứng của bạn. Nếu bạn không biết họ, hãy gõ route get www.google.comđể lấy chúng. Sau đó:

  • Đặt nó vào một tệp (ví dụ: 'fix-vpn') ở đâu đó trong đường dẫn của bạn.
  • Cung cấp cho nó quyền thực thi ( chmod u+x fix-vpn).
  • Chạy nó với sudo ( sudo fix-vpn) ngay sau khi kết nối với vpn.

Tôi đã thử nó và nó hoạt động. Như tôi đã nói, đây chỉ là một bản sửa lại của một giải pháp trước đó. Tôi chỉ đăng nó dưới dạng một câu trả lời riêng vì tôi không có đủ dung lượng trong một bình luận.

BTW, tôi cũng nghĩ rằng điều này có thể được bao gồm trong một /etc/ppp/ip-uptập lệnh để nó được tự động thực hiện khi kết nối. Nhưng vì một số lý do, nó không hoạt động theo cách đó. Nếu ai đó có thể giải thích / cải thiện về điều đó, xin vui lòng làm.



1

CẬP NHẬT: Tải xuống và cài đặt phiên bản mới nhất và chính thức 5.4.1 cho Mac OS X khắc phục tất cả các sự cố trên Mac OS X El Capitan.

Như được mô tả trong diễn đàn fortinet, người ta nên tải xuống phiên bản mới nhất (chưa được công bố) của FortiClient để khắc phục các sự cố trên Mac OS X El Capitan:

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

Đây là giải pháp dễ nhất cho tôi.


0

Cải thiện câu trả lời của @ elmart một chút (tôi nghĩ).

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

Bằng cách đó, kịch bản không cần phải chỉnh sửa (và thay đổi giao diện không phải là vấn đề). xargsđược sử dụng để tước khoảng trắng.

Tôi cũng đã thêm (mặc dù tôi không biết nếu đây là một cải tiến):

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

rootcheck "$@"

Để bắt đầu của kịch bản để nhắc nhở mọi người sử dụng sudo.


Sẽ tốt hơn nếu sử dụng một địa chỉ IP trong route getlệnh để loại bỏ sự phụ thuộc vào DNS.
kasperd

Vì vấn đề của Câu hỏi này là với bộ não phân tách, ngay cả sau khi VPN được kết nối, tuyến đường mặc định của bạn có khả năng là cổng của bạn. Bạn chỉ có thể cạo $ netstat -rnđể có được cổng và giao diện.
hbogert


0

Tôi đã giải quyết vấn đề cho tôi bằng cách định cấu hình lại cài đặt DNS để sử dụng máy chủ DNS của Google trước các máy chủ do FortiClient cung cấp. Thật không may, điều này phải được thực hiện sau mỗi lần kết nối lại.

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

Chi tiết về điều này có thể được tìm thấy ở đây .


Vậy chuyện gì xảy ra nếu tôi cần DNS của công ty tôi để giải quyết tên máy chủ trong mạng công ty?
hbogert

Điều này phụ thuộc vào cách VPN được cấu hình. Thông thường, các máy chủ DNS "nội bộ" được truyền qua máy của bạn. Đây là những cái tôi gọi là "<ĐỊA CHỈ IP CHO DNS TỪ FORTICLIENT>". Nếu máy của bạn không thể giải quyết một địa chỉ bằng 8.8.8.8 hoặc 8.8.4.4, nó sẽ sử dụng các máy chủ DNS được xác định bởi các địa chỉ IP trong "<ĐỊA CHỈ IP CHO DNS TỪ FORTICLIENT>".
Christoph Hermann

0

Trên phiên bản OS X hiện tại của tôi (Sierra 10.12.6) & FortiClient 5.6.1, có vẻ như nếu ServerAddresses có nhiều hơn 2 địa chỉ, thì cuộc gọi "set" không tồn tại bất cứ điều gì (nếu bạn "nhận", sẽ không có gì cập nhật). Để khắc phục điều này, tôi quyết định chỉ giữ địa chỉ DNS FortiClient đầu tiên và hợp nhất nó với địa chỉ DNS công cộng của tôi (8.8.8.8).

Hơn nữa, tôi khuyên bạn nên tự động chạy tập lệnh bash trên kết nối FortiClient: điều này có thể được thực hiện bằng cách xuất tập lệnh cấu hình FortiClient sau đó nhập lại tập lệnh

Hướng dẫn đầy đủ dưới đây:

1 / Tạo tập lệnh bash sau và lưu nó ở đâu đó (trong trường hợp của tôi, nó đã vào ~/bashscripts/update-forticlient-dns.sh) và đừng quên thay thế <FIRST IP ADDRESS FOR FORTICLIENT DNS>bằng kết quả scutil --dns | grep "nameserver\[0\]"trong khi kết nối FortiClient của bạn đã hết

#!/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 / Chạy FortiClient, sau đó vào Tùy chọn > Chung và nhấp vào nút Sao lưu sẽ xuất cấu hình FortiClient của bạn thành một tệp

3 / Trong tệp này, xác định vị trí và chỉnh sửa nút / forticlient_configuration / vpn / sslvpn / links / Connection [name = "CONNMENT CỦA BẠN"] / on_connect / script / script và gọi tập lệnh của bạn bên trong nó:

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

4 / Quay trở lại bảng điều khiển FortiClient, nhấp vào khóa ở góc dưới bên trái, sau đó vào Tùy chọn > Chung và nhấp vào nút Khôi phục : xác định vị trí tệp cấu hình được cập nhật của bạn và đó là cấu hình DNS của bạn sẽ được cập nhật mỗi khi bạn kết nối với VPN.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.