วิธีทำให้ forticlient ทำงานใน OSX El Capitan


10

ซอฟต์แวร์ VPN forticlient นั้น borked เมื่อใช้ split horizon ตั้งแต่ OSX El Capitan ปัญหาคือคำร้องขอ DNS ถูกส่งออกไปบนอินเทอร์เฟซหลักปกติไปยัง DNS ของอุโมงค์ VPN

เราจะรับคำร้องขอ DNS ให้ส่งผ่านอินเตอร์เฟซที่ถูกต้องได้อย่างไร (เช่นอุโมงค์ VPN)

คำตอบ:


11

แก้ไขคำตอบแล้ว

(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

จัดทำไฟล์ที่คุณใส่ไว้ในไฟล์เรียกใช้และเรียกใช้งาน (หลังจากเชื่อมต่อกับ VPN) ด้วย sudo ก่อนที่สคริปต์จะทำการเปลี่ยนแปลงใด ๆ สคริปต์จะพิจารณาเส้นทางเริ่มต้นปัจจุบันของคุณดังนั้นจึงรู้เกตเวย์และอินเตอร์เฟสปัจจุบันของคุณ


คำตอบเก่า

ไม่ใช่โซลูชันที่สมบูรณ์คุณจะต้องทำสองสิ่งต่อไปนี้ระดับสูงหลังจากการตั้งค่าการเชื่อมต่อ 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

แต่ขั้นตอนเหล่านี้ควรจะถูกเปลี่ยนกลับหลังจากยกเลิกการเชื่อมต่อใช่ไหม?
elmart

1
TL; DR ไม่จำเป็นต้องทำการคืนค่า ไม่State:/Network/Service/forticlientsslvpn/IPv4คีย์จะอยู่ที่นั่นเพื่อเริ่มต้นเมื่อทันเนลของ VPN กำลังทำงานและถูกลบเมื่อการเชื่อมต่อ VPN ถูกลบออก เส้นทางไม่ได้แตกต่างไปจากที่ควรจะเป็น
hbogert

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

นั่นคือสมมติว่าคุณกำลังใช้อินเตอร์เฟซ en0 และเกตเวย์เริ่มต้น 192.168.1.1 หากไม่ใช่ให้แทนที่ด้วยค่าที่สอดคล้องกันของคุณ หากคุณไม่รู้จักพวกเขาพิมพ์route get www.google.comเพื่อรับพวกเขา แล้ว:

  • วางลงในไฟล์ (เช่น 'fix-vpn') ที่ใดที่หนึ่งในเส้นทางของคุณ
  • ให้สิทธิ์ดำเนินการ ( chmod u+x fix-vpn)
  • รันด้วย sudo ( sudo fix-vpn) หลังจากเชื่อมต่อกับ vpn

ฉันลองแล้วใช้งานได้ ดังที่ฉันได้กล่าวมานี่เป็นเพียงการนำกลับมาทำใหม่ของวิธีแก้ปัญหาก่อนหน้า ฉันเพิ่งโพสต์เป็นคำตอบแยกต่างหากเนื่องจากฉันมีพื้นที่ไม่เพียงพอในความคิดเห็น

BTW ฉันคิดว่านี่อาจรวมอยู่ใน/etc/ppp/ip-upสคริปต์เพื่อที่จะได้รับการดำเนินการโดยอัตโนมัติเมื่อเชื่อมต่อ แต่ด้วยเหตุผลบางอย่างมันไม่ทำงานอย่างนั้น หากใครบางคนสามารถอธิบาย / ปรับปรุงเกี่ยวกับเรื่องนั้นได้โปรดทำ


4

ฉันสามารถใช้ Forticlient รุ่นเก่ากว่าและยืนยันว่าใช้งานได้!

นี่คือลิงค์ของมันในดรอปบ็อกซ์ของฉัน:

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


1
นี่แสดงว่ามีปัญหาเกิดขึ้นกับไคลเอ็นต์ไม่ใช่ระบบปฏิบัติการ
Aaron Bratcher

1

อัปเดต: การดาวน์โหลดและติดตั้งเวอร์ชันใหม่ล่าสุดและเป็นทางการ 5.4.1 สำหรับ Mac OS X แก้ไขปัญหาทั้งหมดใน Mac OS X El Capitan

ดังที่ได้อธิบายไว้ในฟอรัม Fortinetเราควรดาวน์โหลด FortiClient รุ่นใหม่ล่าสุด (ยังไม่เผยแพร่) เพื่อแก้ไขปัญหาใน Mac OS X El Capitan:

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

นี่เป็นทางออกที่ง่ายที่สุดสำหรับฉัน


0

การปรับปรุงคำตอบของ @ 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


จะเป็นการดีกว่าถ้าใช้ที่อยู่ IP ในroute getคำสั่งเพื่อกำจัดการพึ่งพา DNS
kasperd

เนื่องจากปัญหาของคำถามนี้คือสมองที่แยกจากกันแม้หลังจากที่ VPN เชื่อมต่อเส้นทางเริ่มต้นของคุณน่าจะเป็นเกตเวย์ของคุณแล้ว คุณสามารถขูด$ netstat -rnเพื่อรับเกตเวย์และส่วนต่อประสาน
hbogert

0

ฉันใช้สคริปต์ของ hbogert และเขียนไว้ใน Applescript สำหรับตัวฉันเองและพนักงานคนอื่น ๆ มันมีให้ที่นี่: https://www.dropbox.com/s/lh0hsqdesk3i0n7/Execute-Post-VPN-Connection.app.zip?dl=0

เพียงเชื่อมต่อกับ VPN จากนั้นดำเนินการแอพและพิมพ์รหัสผ่านผู้ดูแลระบบของคุณ (จำเป็นสำหรับ sudo) หมายเหตุ: ต้องบันทึกไว้ใน / แอปพลิเคชัน /


0

ฉันแก้ไขปัญหาให้ฉันด้วยการกำหนดการตั้งค่า DNS ใหม่เพื่อใช้เซิร์ฟเวอร์ Google DNS ก่อนที่ FortiClient จะได้รับ น่าเสียดายที่ต้องดำเนินการหลังจากเชื่อมต่ออีกครั้ง

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

รายละเอียดเกี่ยวกับเรื่องนี้สามารถพบได้ที่นี่


ดังนั้นจะเกิดอะไรขึ้นหากฉันต้องการ DNS ของ บริษัท ของฉันสำหรับการแก้ไขชื่อโฮสต์ในเครือข่ายของ บริษัท
hbogert

ขึ้นอยู่กับการกำหนดค่า VPN โดยปกติแล้วเซิร์ฟเวอร์ DNS "ภายใน" จะถูกส่งผ่านไปยังเครื่องของคุณ เหล่านี้คือสิ่งที่ฉันเรียกว่า "<ที่อยู่ IP สำหรับ DNS จาก FORTICLIENT>" หากเครื่องของคุณไม่สามารถระบุที่อยู่ด้วย 8.8.8.8 หรือ 8.8.4.4 เครื่องจะใช้เซิร์ฟเวอร์ DNS ที่กำหนดโดยที่อยู่ IP ใน "<ที่อยู่ IP สำหรับ DNS จาก FORTICLIENT>"
Christoph Hermann

0

ในเวอร์ชั่น OS X ปัจจุบันของฉัน (เซียร์ 10.12.6) และ FortiClient 5.6.1 ดูเหมือนว่าถ้า ServerAddresses มีที่อยู่มากกว่า 2 ที่อยู่การโทร "set" จะไม่คงอยู่ต่อไป (ถ้าคุณ "ได้รับ" จะไม่มีอะไรเกิดขึ้น ปรับปรุง) เพื่อแก้ไขปัญหานี้ฉันตัดสินใจที่จะเก็บที่อยู่ DNS FortiClient แรกเท่านั้นและรวมกับที่อยู่ DNS สาธารณะของฉัน (8.8.8.8)

นอกจากนี้ฉันขอแนะนำให้รันสคริปต์ทุบตีโดยอัตโนมัติในการเชื่อมต่อ FortiClient: สิ่งนี้สามารถทำได้โดยการส่งออกสคริปต์การกำหนดค่า FortiClient จากนั้นนำเข้าอีกครั้ง

คู่มือเต็มรูปแบบด้านล่าง:

1 / สร้างสคริปต์ทุบตีต่อไปนี้และเก็บไว้ที่ใดที่หนึ่ง (ในกรณีของฉันมันเป็น~/bashscripts/update-forticlient-dns.sh) และอย่าลืมที่จะแทนที่<FIRST IP ADDRESS FOR FORTICLIENT DNS>ด้วยผลของscutil --dns | grep "nameserver\[0\]"การเชื่อมต่อ FortiClient ของคุณ

#!/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 จากนั้นไปที่การตั้งค่า > ทั่วไปและคลิกที่ปุ่มสำรองข้อมูลซึ่งจะส่งออกการกำหนดค่า FortiClient ของคุณไปยังไฟล์

3 / ในไฟล์นี้ค้นหาและแก้ไข/ forticlient_configuration / vpn / sslvpn / การเชื่อมต่อ / การเชื่อมต่อ [name = "Your CONNECTION"] / โหนด on_connect / สคริปต์ /และสคริปต์ของคุณภายใน:

<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 คลิกล็อกที่มุมล่างซ้ายจากนั้นไปที่การตั้งค่า > ทั่วไปและคลิกที่ปุ่มคืนค่า : ค้นหาไฟล์การกำหนดค่าที่อัปเดตแล้วนั่นคือการกำหนดค่า DNS ของคุณจะได้รับการอัพเดททุกครั้งที่คุณ เชื่อมต่อกับ VPN

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.