OSX El Capitan में काम करने का सौभाग्य कैसे प्राप्त करें


10

जब आप OSX El Capitan के बाद से विभाजित क्षितिज का उपयोग कर रहे हैं, तो फोर्टिकिएंट वीपीएन सॉफ्टवेयर को बोर्क किया जाता है। समस्या यह है कि DNS अनुरोधों को सामान्य प्राथमिक इंटरफ़ेस पर वीपीएन सुरंग के डीएनएस में भेजा जाता है।

हमें सही इंटरफ़ेस (यानी वीपीएन टनल) पर भेजे जाने वाले DNS अनुरोध कैसे प्राप्त होते हैं

जवाबों:


11

संपादित उत्तर

(रे) केवल हर किसी के बेहतर जवाब (@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

आप जिस फाइल को डालते हैं, उसे निष्पादन योग्य और निष्पादित करें (वीपीएन से कनेक्ट करने के बाद) को सूडो के साथ बनाएं। इससे पहले कि स्क्रिप्ट में कोई बदलाव हो, यह आपके वर्तमान डिफ़ॉल्ट मार्ग को देखता है और इसलिए आपके वर्तमान गेटवे और इंटरफ़ेस को जानता है।


पुराना उत्तर

संपूर्ण समाधान नहीं, आपको प्रत्येक वीपीएन कनेक्शन सेटअप के बाद निम्न दो उच्च-स्तरीय चीजें करनी होंगी:

  1. हमें सुरंग का इंटरफ़ेस सेट करना होगा ppp0
  2. रेडो ​​डिफ़ॉल्ट मार्ग (क्योंकि 1. गलत रूप से गलत डिफ़ॉल्ट गेटवे सेट करता है, विभाजन सुरंग फिर भी सही ढंग से काम करना चाहिए)

scutil-fortiउदाहरण के लिए नाम के साथ एक फ़ाइल बनाएँ

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

Redo गेटवे रूट, इसलिए एक और फ़ाइल बनाएं 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

लेकिन, इन चरणों को डिस्कनेक्ट करने के बाद वापस करना चाहिए, क्या उन्हें नहीं करना चाहिए?
एलर्ट

1
टीएल; डीआर reverting की जरूरत नहीं है। नहीं, State:/Network/Service/forticlientsslvpn/IPv4वीपीएन सुरंग के चालू होने के बाद कुंजी शुरू होती है और वीपीएन सुरंग के डिस्कनेक्ट होने पर हटा दी जाती है। मार्ग वास्तव में वे क्या होना चाहिए से अलग नहीं हैं।
hbogert

8

मैंने @ hogogert के समाधान को अधिक प्रबंधनीय एकल स्क्रिप्ट में पुन: प्रकाशित किया है:

#!/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उन्हें पाने के लिए टाइप करें। फिर:

  • अपने पथ में कहीं एक फ़ाइल (जैसे 'फिक्स-वीपीएन') में रखें।
  • इसे निष्पादित अनुमतियाँ ( chmod u+x fix-vpn) दें।
  • Vpn से sudo fix-vpnकनेक्ट करने के बाद इसे sudo ( ) के साथ चलाएं ।

मैंने इसकी कोशिश की है और यह काम करता है। जैसा कि मैंने कहा, यह पिछले समाधान की एक पुनरावृत्ति है। मैंने इसे एक अलग उत्तर के रूप में पोस्ट किया क्योंकि मेरे पास एक टिप्पणी में पर्याप्त जगह नहीं थी।

BTW, मुझे यह भी लगा /etc/ppp/ip-upकि इसे एक स्क्रिप्ट में शामिल किया जा सकता है ताकि कनेक्ट करते समय यह स्वचालित रूप से निष्पादित हो जाए। लेकिन किसी कारण के लिए, यह उस तरह से काम नहीं करता है। अगर कोई उस पर व्याख्या / सुधार कर सकता है, तो कृपया करें।


4

मैं Forticlient के पुराने संस्करण का उपयोग करने में सक्षम था और यह पुष्टि करता है कि यह काम करता है!

यहाँ मेरे ड्रॉपबॉक्स पर इसका लिंक दिया गया है:

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


1
इससे पता चलता है कि समस्या क्लाइंट के साथ है, न कि ओएस
आरोन ब्रेचर

1

अद्यतन: मैक ओएस एक्स के लिए नवीनतम और आधिकारिक संस्करण 5.4.1 को डाउनलोड और इंस्टॉल करना मैक ओएस एक्स एल कैपिटन पर सभी समस्याओं को ठीक करता है।

जैसा कि फोर्टिनेट फोरम में वर्णित है, एक को मैक ओएस एक्स एल कैपिटान पर समस्याओं को ठीक करने के लिए फोर्टिएक का नवीनतम (अभी तक अप्रकाशित) संस्करण डाउनलोड करना चाहिए:

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

यह मेरे लिए सबसे आसान उपाय था।


0

@ Elmart's answer पर थोड़ा सुधार करना (मुझे लगता है)।

#!/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 "$@"

स्क्रिप्ट की शुरुआत से ही लोगों को सुडो का उपयोग करने के लिए याद दिलाने के लिए।


route getDNS पर निर्भरता को समाप्त करने के लिए कमांड में एक आईपी पते का उपयोग करना बेहतर होगा ।
कास्परड

जैसा कि इस प्रश्न का मुद्दा विभाजित मस्तिष्क के साथ है, भले ही वीपीएन कनेक्ट होने के बाद आपका डिफ़ॉल्ट मार्ग आपके गेटवे की संभावना है। आप $ netstat -rnगेटवे और इंटरफ़ेस प्राप्त करने के लिए बस स्क्रैप कर सकते हैं ।
hbogert

0

मैंने hbogert की स्क्रिप्ट ली और इसे अपने और किसी अन्य कर्मचारी के लिए Applescript में लपेट लिया, यह यहाँ उपलब्ध है: https://www.dropbox.com/s/lh0hsqdesk3i0n7/Execute-Post-VPN-Canection.app.zip?dl=0

बस वीपीएन से कनेक्ट करें, फिर ऐप को निष्पादित करें और अपने व्यवस्थापक पासवर्ड में टाइप करें (sudo के लिए आवश्यक)। नोट: आवेदन / आवेदन में सुरक्षित होना चाहिए


0

मैंने FortiClient द्वारा उपलब्ध कराए जाने से पहले Google DNS सर्वर का उपयोग करने के लिए 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

इस पर विवरण यहां पाया जा सकता है


तो क्या होगा अगर मुझे कंपनी नेटवर्क में होस्टनामों को हल करने के लिए मेरी कंपनी की डीएनएस की आवश्यकता है?
hbogert

यह निर्भर करता है कि वीपीएन कैसे कॉन्फ़िगर किया गया है। आम तौर पर, "आंतरिक" DNS सर्वरों को आपकी मशीन के माध्यम से पारित किया जाता है। ये वे हैं जिन्हें मैंने "<IP ADDRESSES for DNS से ​​FORTICLIENT>" कहा है। यदि आपकी मशीन 8.8.8.8 या 8.8.4.4 के साथ एक पते को हल नहीं कर सकती है, तो वह "<IP ADDRESSES फॉर DNS से ​​FORTICLIENT>" में आईपी पते द्वारा परिभाषित DNS सर्वर का उपयोग करता है।
क्रिस्टोफ़ हर्मन

0

मेरे वर्तमान OS X संस्करण (सिएरा 10.12.6) और FortiClient 5.6.1 पर ऐसा लगता है कि अगर ServerAddresses के 2 से अधिक पते हैं, तो "सेट" कॉल कुछ भी नहीं बनी रहती है (यदि आपको "मिलता है", तो कुछ भी नहीं होगा) अद्यतन)। इसे हल करने के लिए, मैंने केवल पहले FortiClient DNS पते को रखने और इसे अपने सार्वजनिक DNS पते (8.8.8.8) के साथ मर्ज करने का निर्णय लिया।

इसके अलावा, मैं अपने आप FortiClient कनेक्ट पर bash स्क्रिप्ट चलाने का सुझाव दूंगा: यह 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 / कनेक्शन / कनेक्शन [नाम = "आपका कनेक्शन"] / 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 कंसोल पर वापस जाएं, निचले बाएं कोने में स्थित लॉक पर क्लिक करें, फिर प्राथमिकताएं > जनरल पर जाएं और रिस्टोर बटन पर क्लिक करें: अपनी अपडेट की गई कॉन्फ़िगरेशन फ़ाइल का पता लगाएं और यह वह है, जब भी आप उड़ान भरते हैं, तो आपके DNS कॉन्फ़िगरेशन को हर बार अपडेट किया जाएगा। वीपीएन से कनेक्ट करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.