OS X> 10.6.5 คำสั่งค้นหา DNS ด้วย VPN


13

หลังจากอัปเดตเป็น OS X 10.6.5 (จาก. 4) ดูเหมือนว่าแอปพลิเคชันจะไม่ค้นหาชื่อโฮสต์ในลำดับที่ถูกต้อง (ตามคำสั่งบริการในการตั้งค่าเครือข่าย) เมื่อเชื่อมต่อ VPN ของฉัน

การตั้งค่าปัจจุบันของฉันคือบริการ Cisco IPSec VPN หน้าบริการ AirPort เซิร์ฟเวอร์ DNS ถูกตั้งค่าโดยอัตโนมัติสำหรับการเชื่อมต่อ VPN (ซึ่งก็โอเค) และบริการ AirPort DNS ชี้ไปที่เราเตอร์ของฉัน (192.168.1.1 ซึ่งชี้ไปที่เซิร์ฟเวอร์ OpenDNS)

เมื่อเชื่อมต่อ VPN ฉันต้องการให้ DNS ทำการค้นหาผ่านเซิร์ฟเวอร์ DNS DNS ก่อน แต่แอปพลิเคชันทั้งหมดของฉัน (Firefox, Thunderbird, ssh) ปรากฏว่ากำลังใช้เซิร์ฟเวอร์ AirPort DNS ของฉันก่อน (OpenDNS)

สิ่งนี้ใช้ได้ดีก่อนการอัพเดท

ขอบคุณสำหรับความช่วยเหลือ

** แก้ไข **

ฉันเจอโพสต์นี้แล้วจึงรันคำสั่งในคำตอบที่ยอมรับได้ ดูเหมือนว่าจะไม่ได้ช่วย

หลังจากค้นหาอีกเล็กน้อยฉันเจอคำสั่งนี้: scutil --dns

เอาต์พุตจากคำสั่งอยู่ด้านล่าง ทุกอย่างดูถูกต้องเว้นแต่ฉันคิดว่าตัวแก้ไข # 2 ควรมาก่อนและมีโดเมนการค้นหาในตัวแก้ไข # 1 (เห็นได้ชัดว่าไม่ใช่ foobar.com แต่เป็นโดเมน VPN จริง) ฉันคิดว่านี่เป็นข้อผิดพลาด (หรืออะไรก็ตามที่) โกหก ฉันไม่ได้ระบุด้วยตนเองและไม่ได้อยู่ในแท็บ DNS สำหรับการเชื่อมต่อ AirPort ของฉัน เมื่อ VPN ถูกตัดการเชื่อมต่อโดเมนการค้นหานั้นจะไม่อยู่ที่นั่นและตัวแก้ไข # 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

** แก้ไข **

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

  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

** แก้ไข **

ดูเหมือนว่านี่จะยังเป็นปัญหาใน Lion เช่นกัน ฉันกำลังอัปเดตชื่อและเพิ่มแท็ก

** แก้ไข **

เห็นได้ชัดว่า Lion นำการเปลี่ยนแปลงแบบไร้สายมาด้วยรวมถึงการเปลี่ยนชื่อบริการ AirPort เป็น Wi-Fi นี่อาจทำให้เกิดปัญหากับสคริปต์วิธีแก้ปัญหาที่ฉันให้ไว้หากมีการเชื่อมต่อกับ VPN ผ่านการเชื่อมต่อไร้สาย Lion (ด้วยเหตุผลบางอย่าง) ทำให้บริการชื่อ AirPort อยู่ใต้ฝากระโปรง ในการแก้ไขคุณต้องเปลี่ยนชื่อบริการ Wi-Fi เป็น AirPort หากคุณต้องการเก็บชื่อ Wi-Fi คุณต้องเปลี่ยนชื่อเป็นชื่ออื่นก่อนจากนั้นเปลี่ยนชื่อกลับเป็น Wi-Fi


เมื่อคุณดูการตั้งค่าระบบและคลิกที่เครือข่ายภายใต้การเชื่อมต่อ VPN ทางด้านซ้ายให้เลือกขั้นสูง (corener มือขวาล่างขวา) ตอนนี้คุณควรเห็นแท็บ DNS ที่ด้านบน ทางด้านซ้ายคือ IP สำหรับ DNS และด้านขวาแสดงโดเมนของคุณ สิ่งเหล่านี้ถูกต้องหรือไม่ (ชี้ไปที่เซิร์ฟเวอร์ VPN DNS)
Everett

ใช่มันถูกต้อง
citrusmoose

บรรทัดใน set_dns_ips networksetup -setdnsservers "$@"ควรจะเป็น My Mac Pro มีการเชื่อมต่อ Ethernet สองจุด ("Ethernet 1" และ "Ethernet 2" เป็นชื่อเริ่มต้น) ดังนั้นจึงต้องอ้างอิง แก้ไข: ทำไมต้องทำเช่นนี้
Chris R. Donnelly

@chris คุณพูดถูก ฉันได้อัปเดตสคริปต์แล้ว ไม่แน่ใจว่าคุณหมายถึงอะไรโดย "ทำไมต้องทำเช่นนี้"
citrusmoose

ขออภัย @citrusmoose แค่พยายามบอกว่าทำไมฉันถึงแก้ไขความคิดเห็น ฉันกดส่งแล้วก็รู้ว่าฉันไม่ได้บอกว่าทำไมต้องเปลี่ยนสิ่งนั้นและไม่ต้องการออกมาเป็นเพียงการสนับสนุนการเปลี่ยนแปลงโดยไม่มีเหตุผลที่ดี
Chris R. Donnelly

คำตอบ:


1

ในกรณีของฉันคำขอ FQDN ไม่ได้รับการแก้ไขเป็นที่อยู่ภายในที่ถูกต้อง แต่พวกเขาชี้ไปยังที่อยู่ภายนอก

ฉันเชื่อมต่อกับ Cisco ASA ของฉันผ่าน IPsec ในขณะที่คำสั่งซื้อถูกตั้งค่าอย่างถูกต้องในการเชื่อมต่อเครือข่ายคำขอ DNS จะไม่ทำตามคำสั่งตั้งแต่อัปเดตเป็น 10.6.5

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


ใช่นี่เป็นวิธีแก้ปัญหาของฉันด้วย (แต่น่ารำคาญมาก) ฉันดีใจที่มีคนอื่นกำลังประสบปัญหานี้เพราะฉันเป็นคนเดียว ฉันคิดว่าคนอื่นอาจไม่สังเกตเห็นเนื่องจากการค้นหาโดเมนส่วนใหญ่จะล้มเหลวและถอยกลับไปยังเซิร์ฟเวอร์ DNS ที่ถูกต้อง ในกรณีของฉันมีโดเมนภายในไม่กี่แห่งที่ (มีเหตุผลบางอย่าง) มีรายการในเซิร์ฟเวอร์ DNS ภายนอก
citrusmoose

จะต้องมีวิธีการที่ดีกว่านี้ @Citrusmoose คุณมีโชคกับคู่มือที่น้อยกว่าและแข็งแกร่งกว่านี้หรือไม่?
MightyE

ไม่ฉันยังไม่เจออะไรเลย
citrusmoose

1

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

หากต้องการสร้างเส้นทางที่กำหนดเองไปยังเครือข่ายย่อยในอีกด้านหนึ่งของการเชื่อมต่อ VPN ให้อ่านคำแนะนำที่เหลือ ...

ในฐานะที่เป็น root ให้สร้าง / 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 คือที่อยู่ IP ระยะไกลของคุณ (ที่อยู่ IP ของคุณบนเครือข่ายระยะไกล)
  3. ในคำสั่ง case แรกเปลี่ยนรายการ 192.168.x เป็นสาม octets แรกของเครือข่ายระยะไกลของคุณ ในอินสแตนซ์นี้ IP ระยะไกลคือ 192.168.3.1 และเครือข่ายระยะไกลคือ 192.168.30.0/24 (กล่อง VPN ระยะไกลกำลังกำหนดเส้นทาง - นี่คือเพื่อให้ SAMBA ทำงานได้โดยไม่ต้องใช้พร็อกซี ARP)
  4. ไม่แสดงข้อคิดเห็น (ลบ ##) ออกจากบรรทัดการแก้ไขข้อบกพร่องเพื่อดูว่าสคริปต์นี้ทำอะไรอยู่ เอาต์พุตจะถูกเขียนไปยังไฟล์ /tmp/ip-up-debug.txt อย่าลืมนำ ## กลับมาอีกครั้งเมื่อคุณทำการทดสอบเสร็จแล้ว
  5. สคริปต์นี้มีตัวเลือกสำหรับการเชื่อมต่อ VPN สามแบบ เพียงแค่เปลี่ยนรายการ 192.168.x เป็นที่อยู่เครือข่ายที่แตกต่างกันของ VPN ที่แตกต่างกันของคุณ

พบได้ที่นี่

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