หลังจากอัปเดตเป็น 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 ของคุณและทำงานอีกครั้งหลังจากที่คุณตัดการเชื่อมต่อ (ฉันไม่พบวิธีที่จะทำงานโดยอัตโนมัติ) หมายเหตุเล็กน้อย:
บัญชีของฉันถูกเรียกใช้ในฐานะผู้ดูแลระบบที่มีการตั้งค่าเครือข่ายปลดล็อคดังนั้นฉันไม่แน่ใจว่าสคริปต์นี้จะยุติธรรมกับอะไรบ้าง
คุณต้องตั้งค่า vpn_srvc_name ในสคริปต์เป็นของคุณคุณเดาชื่อชื่อบริการ vpn
ฉันแน่ใจว่าอาจเป็นวิธีที่ง่ายกว่าในการทำเช่นนี้ดังนั้นโปรดโพสต์คำพูดของคุณ
บท:
#!/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
networksetup -setdnsservers "$@"
ควรจะเป็น My Mac Pro มีการเชื่อมต่อ Ethernet สองจุด ("Ethernet 1" และ "Ethernet 2" เป็นชื่อเริ่มต้น) ดังนั้นจึงต้องอ้างอิง แก้ไข: ทำไมต้องทำเช่นนี้