वीपीएन के साथ ओएस एक्स> 10.6.5 डीएनएस लुकअप ऑर्डर


13

OS X 10.6.5 (से .4) में अपडेट करने के बाद, जब मेरा वीपीएन कनेक्ट होता है, तो एप्लिकेशन सही क्रम में होस्ट नामों को (नेटवर्क वरीयता में सेवा आदेश के अनुसार) नहीं दिखता है।

मेरा वर्तमान सेटअप एक AirPort सेवा के सामने एक सिस्को IPSec वीपीएन सेवा है। DNS सर्वर वीपीएन कनेक्शन (जो ठीक है) के लिए स्वचालित रूप से सेटअप हैं, और एयरपोर्ट सेवा डीएनएस मेरे राउटर (192.168.1.1, जो ओपनडएनएस सर्वर को इंगित किया गया है) की ओर इशारा कर रहा है।

जब मेरा वीपीएन जुड़ा होता है, तो मैं पहले डीएनएस देखने के लिए वीपीएन डीएनएस सर्वरों के माध्यम से जाना चाहूंगा, लेकिन मेरे सभी एप्लिकेशन (फ़ायरफ़ॉक्स, थंडरबर्ड, एसएचएस) मेरे एयरपोर्ट डीएनएस सर्वर का उपयोग पहले करते हैं (ओपनडीएनएस)।

यह अपडेट से ठीक पहले काम कर रहा था।

किसी भी मदद के लिए धन्यवाद।

** संपादित करें **

मैं इस पोस्ट पर आया , और स्वीकृत उत्तर में आदेशों को चलाया। हालांकि यह मदद करने के लिए प्रतीत नहीं हुआ।

थोड़ी और खोज करने के बाद, मैं इस आदेश पर आया: स्कूटिल - डीएनएस

कमांड से आउटपुट नीचे है। सब कुछ सही लगता है, सिवाय इसके कि मुझे लगता है कि रिज़ॉल्वर # 2 पहले आना चाहिए, और रिज़ॉल्वर # 1 में एक खोज डोमेन है (यह स्पष्ट रूप से foobar.com नहीं है, लेकिन असली वीपीएन डोमेन है)। मुझे लगता है कि यह बग (या जो कुछ भी है) झूठ था। मैंने इसे मैन्युअल रूप से निर्दिष्ट नहीं किया है, और यह मेरे AirPort कनेक्शन के लिए DNS टैब पर नहीं है। जब वीपीएन काट दिया जाता है, तो वह खोज डोमेन नहीं होता है, और रिज़ॉल्वर # 2 चला गया है, जैसा कि यह होना चाहिए।

resolver #1
  search domain[0] : foobar.com
  nameserver[0] : 192.168.1.1
  order   : 200000

resolver #2
  domain : foobar.com
  nameserver[0] : 172.30.50.100
  nameserver[1] : 172.30.50.80
  order   : 100200

resolver #3
  domain : local
  options : mdns
  timeout : 2
  order   : 300000

resolver #4
  domain : 254.169.in-addr.arpa
  options : mdns
  timeout : 2
  order   : 300200

resolver #5
  domain : 8.e.f.ip6.arpa
  options : mdns
  timeout : 2
  order   : 300400

resolver #6
  domain : 9.e.f.ip6.arpa
  options : mdns
  timeout : 2
  order   : 300600

resolver #7
  domain : a.e.f.ip6.arpa
  options : mdns
  timeout : 2
  order   : 300800

resolver #8
  domain : b.e.f.ip6.arpa
  options : mdns
  timeout : 2
  order   : 301000

** संपादित करें **

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

  1. मेरा खाता एक व्यवस्थापक के रूप में चला जाता है जिसमें नेटवर्क प्राथमिकताएँ अनलॉक की जाती हैं, इसलिए मुझे यकीन नहीं है कि यह स्क्रिप्ट किसी भी चीज़ पर कैसे निष्पक्ष होगी।

  2. आपको स्क्रिप्ट में vpn_srvc_name सेट करने की आवश्यकता है, आपने यह अनुमान लगाया, vpn सेवा नाम।

  3. मुझे यकीन है कि ऐसा करने का एक आसान तरीका है, इसलिए अपनी टिप्पणी पोस्ट करने के लिए स्वतंत्र महसूस करें।

लिपी:

#!/bin/bash

function get_pri_srvc_id ()
{
  cat <<EOF | scutil | \
    grep 'PrimaryService' | \
    awk -F': ' '{print $2}'
show State:/Network/Global/IPv4
EOF
}

function get_srvc_name ()
{
  cat <<EOF | scutil | \
    grep 'UserDefinedName' | \
    awk -F': ' '{print $2}'
show Setup:/Network/Service/$1
EOF
}

function get_srvc_ids ()
{
  cat <<EOF | scutil | \
    sed -nEe '
/ServiceOrder/ {
  :ids
  n
  /[0-9]+ :/ {
    s/ *[0-9]+ : ([0-9A-Z-]+) */\1/p
    b ids
  }
}'
show Setup:/Network/Global/IPv4
EOF
}

function get_srvc_id_by_name ()
{
  local srvc_ids=$(get_srvc_ids)

  for srvc_id in $srvc_ids
  do
    local srvc_name=$(get_srvc_name "$srvc_id")
    if [[ "$srvc_name" == "$1" ]]
    then
      echo $srvc_id
      return
    fi
  done
}

function get_dns_ips ()
{
  local srvc_id=$(get_srvc_id_by_name "$1")

  cat <<EOF | scutil | \
    sed -nEe '
/ServerAddresses/ {
  :ips
  n
  /[0-9]+ :/ {
    s/ *[0-9]+ : ([0-9.]+) */\1/p
    b ips
  }
}'
show $2:/Network/Service/$srvc_id/DNS
EOF
}

function set_dns_ips ()
{
  networksetup -setdnsservers "$@"
}

vpn_srvc_name='NAME OF VPN SERVICE'
ip_file='/tmp/setup_dns_ips'

pri_srvc_id=$(get_pri_srvc_id)
pri_srvc_name=$(get_srvc_name "$pri_srvc_id")

if [[ ! -e "$ip_file" ]]
then
  setup_dns_ips=$(get_dns_ips "$pri_srvc_name" "Setup")
  state_dns_ips=$(get_dns_ips "$pri_srvc_name" "State")
  vpn_ips=$(get_dns_ips "$vpn_srvc_name" "State")

  set_dns_ips "$pri_srvc_name" $vpn_ips $setup_dns_ips $state_dns_ips

  if [[ -z "$setup_dns_ips" ]]
  then
    setup_dns_ips="Empty"
  fi

  echo $setup_dns_ips >$ip_file
else
  setup_dns_ips=$(cat $ip_file)

  set_dns_ips "$pri_srvc_name" $setup_dns_ips

  rm $ip_file
fi

** संपादित करें **

ऐसा लगता है कि यह शेर के रूप में भी एक मुद्दा है। मैं शीर्षक को अपडेट कर रहा हूं और एक टैग जोड़ रहा हूं।

** संपादित करें **

जाहिर तौर पर लायन ने कुछ वायरलेस बदलाव भी लाए, जिनमें एयरपोर्ट सेवा का नाम बदलकर वाई-फाई करना शामिल है। अगर मैं किसी वायरलेस कनेक्शन पर अपने वीपीएन से जुड़ता हूं तो यह मेरे द्वारा दिए गए वर्कअराउंड स्क्रिप्ट के साथ समस्या पैदा कर सकता है। शेर (किसी कारण से) हुड के नीचे AirPort नाम की सेवा रखता है। इसे ठीक करने के लिए, आपको AirPort के अलावा अपनी Wi-Fi सेवा का नाम बदलने की आवश्यकता है। यदि आप वाई-फाई का नाम रखना चाहते हैं, तो आपको इसे पहले कुछ अलग करना होगा, फिर इसका नाम बदलकर वाई-फाई करना होगा।


जब आप सिस्टम वरीयताएँ देखते हैं और नेटवर्क पर क्लिक करते हैं, तो वीपीएन कनेक्शन के नीचे बाईं ओर उन्नत (नीचे दाएं हाथ का कोर्नर) चुनें। अब आपको सबसे ऊपर एक DNS टैब देखना चाहिए। बाईं ओर DNS के लिए IP हैं, और दाईं ओर आपका डोमेन दिखाया गया है। क्या ये सही हैं (वीपीएन डीएनएस सर्वर की ओर इशारा करते हुए)?
एवरेट

हां, वे सही हैं।
साइट्रॉसमोज

Set_dns_ips में लाइन होनी चाहिए networksetup -setdnsservers "$@"। मेरे मैक प्रो में दो ईथरनेट कनेक्शन ("ईथरनेट 1" और "ईथरनेट 2" डिफ़ॉल्ट नाम हैं) और इसलिए उन्हें उद्धृत किया जाना है। EDIT: ऐसा क्यों करना है
क्रिस आर। डोनेली

तुम सही हो, @chris। मैंने स्क्रिप्ट को अपडेट किया है। "आप ऐसा क्यों करते हैं" से निश्चित नहीं।
साइट्रसोज

क्षमा करें, @citrusmoose। सिर्फ यह कहने की कोशिश कर रहा था कि मैंने टिप्पणी को संपादित क्यों किया; मैंने सबमिट किया तो मुझे एहसास हुआ कि मैंने यह नहीं कहा कि मुझे क्यों बदलना है और एक अच्छे कारण के बिना बदलाव की वकालत करना नहीं चाहता।
क्रिस आर। डोनलाइन

जवाबों:


1

मेरे मामले में, FQDN अनुरोध सही आंतरिक पते पर हल नहीं कर रहे थे। इसके बजाय, वे बाहरी पते की ओर इशारा कर रहे थे।

मैं IPsec के माध्यम से अपने सिस्को एएसए से जुड़ता हूं। जबकि आदेश नेटवर्क कनेक्शन में सही ढंग से सेटअप है, DNS अनुरोध 10.6.5 को अपडेट करने के बाद से आदेश का पालन नहीं करते हैं।

इसके चारों ओर काम करने के लिए, मैंने अपने वीपीएन के लिए एयरपोर्ट कनेक्शन (जब से मैं वायरलेस हूं) में मैन्युअल रूप से डीएनएस सर्वर सौंपा। वीपीएन कनेक्ट के साथ होने के बाद, मैं मैन्युअल रूप से जोड़े गए DNS पते को हटा देता हूं।


हां, यह मेरा वर्कअराउंड भी है (लेकिन बहुत परेशान करने वाला)। मुझे खुशी है कि किसी और को यह समस्या हो रही है, क्योंकि ऐसा लगता है कि मैं अकेला था। मुझे लगता है कि अन्य लोग नोटिस नहीं कर सकते क्योंकि आंतरिक डोमेन के लिए अधिकांश लुकअप विफल हो जाएंगे और सही DNS सर्वर पर वापस आ जाएंगे। मेरे मामले में, हालांकि, कुछ आंतरिक डोमेन हैं जो (किसी कारण से) बाहरी DNS सर्वरों में प्रविष्टियां हैं।
साइट्रसोज

इस से बेहतर दृष्टिकोण होना चाहिए, @Citrusmoose, क्या आपको कुछ कम मैनुअल और अधिक मजबूत के साथ कोई भाग्य मिला है?
माइटी

नहीं, मैं अभी तक कुछ भी नहीं आया हूं।
साइट्रसोसे

1

अपने वीपीएन कनेक्शन के लिए डिफ़ॉल्ट मार्ग बनाने से ओएस एक्स 10.8 को रोकने के लिए, इंटरनेट कनेक्ट (एप्लिकेशन में) खोलें। कनेक्ट मेनू से विकल्प चुनें, फिर "वीपीएन कनेक्शन पर सभी ट्रैफ़िक भेजें" विकल्प को अनचेक करें। ठीक क्लिक करें, और आप कर रहे हैं।

वीपीएन कनेक्शन के दूसरी तरफ सबनेट के लिए एक कस्टम मार्ग बनाने के लिए, बाकी संकेत पढ़ें ...

रूट के रूप में, / etc / ppp / ip-up बनाएं, और निम्नलिखित कोड में डालें:

#!/bin/sh
# When the ppp link comes up, this script is called with the following
# parameters
#       $1      the interface name used by pppd (e.g. ppp3)
#       $2      the tty device name
#       $3      the tty device speed
#       $4      the local IP address for the interface
#       $5      the remote IP address
#       $6      the parameter specified by the 'ipparam' option to pppd

DEBUGFILE=/tmp/ip-up-debug.txt
## echo "1:$1 2:$2 3:$3 4:$4 5:$5 6:$6" > $DEBUGFILE
NET=`echo $5 | cut -d. -f1,2,3`
## echo $NET >> $DEBUGFILE

case $NET in 192.168.3)
     ## echo "CASE1" >> $DEBUGFILE
     RESULT=`/sbin/route add -net 192.168.30.0 $5 255.255.255.0`
     ##echo $RESULT >> $DEBUGFILE
     ;;
     192.168.2)
     ## echo "CASE2" >> $DEBUGFILE
     RESULT=`/sbin/route add -net 192.168.20.0 netmask 255.255.255.0 gw $5`
     ## echo $RESULT >> $DEBUGFILE
     ;;
     192.168.1)
     ## echo "CASE3" >> $DEBUGFILE
     RESULT=`/sbin/route add -net 192.168.10.0 netmask 255.255.255.0 gw $5`
     ## echo $RESULT >> $DEBUGFILE
     ;;
     *)
     ## echo "No match" >> $DEBUGFILE
     ;;
esac

टिप्पणियाँ:

  1. एक बार फाइल बनाने के बाद, ए chmod u+x /etc/ppp/ip-up
  2. $ 5 चर आपका दूरस्थ आईपी पता (दूरस्थ नेटवर्क पर आपका आईपी पता) है।
  3. पहले केस स्टेटमेंट में, अपने रिमोट नेटवर्क के पहले तीन ऑक्टेट में 192.168.x प्रविष्टि बदलें। इस उदाहरण में, दूरस्थ IP 192.168.3.1 है, और दूरस्थ नेटवर्क 192.168.30.0/24 है (दूरस्थ वीपीएन बॉक्स रूटिंग कर रहा है - ऐसा इसलिए है कि SAMBA प्रॉक्सी ARP की आवश्यकता के बिना काम करेगा)।
  4. Uncomment (## 's) को डीबग लाइनों से हटाकर देखें कि यह स्क्रिप्ट क्या कर रही है। आउटपुट /tmp/ip-up-debug.txt फ़ाइल को लिखा जाएगा। याद रखें कि जब आप परीक्षण कर रहे हैं तो ## को वापस रखें।
  5. इस स्क्रिप्ट में तीन अलग-अलग वीपीएन कनेक्शन के विकल्प हैं। बस 192.168.x प्रविष्टियों को अपने अलग-अलग वीपीएन के विभिन्न नेटवर्क पते में बदलें।

यहां मिला

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