Sau khi cập nhật lên OS X 10.6.5 (từ .4), các ứng dụng dường như không tìm kiếm tên máy chủ theo đúng thứ tự (theo thứ tự dịch vụ trong Tùy chọn mạng) khi VPN của tôi được kết nối.
Thiết lập hiện tại của tôi là dịch vụ VPN IPSec của Cisco trước dịch vụ AirPort. Các máy chủ DNS được tự động thiết lập cho kết nối VPN (không sao) và DNS dịch vụ AirPort đang trỏ đến bộ định tuyến của tôi (192.168.1.1, được trỏ đến các máy chủ OpenDNS).
Khi VPN của tôi được kết nối, trước tiên tôi muốn tìm kiếm DNS thông qua các máy chủ DNS VPN, nhưng tất cả các ứng dụng của tôi (Firefox, Thunderbird, ssh) trước tiên dường như sử dụng máy chủ DNS AirPort của tôi (OpenDNS).
Điều này đã làm việc tốt trước khi cập nhật.
Cảm ơn vì bất kì sự giúp đỡ.
** chỉnh sửa **
Tôi đã xem qua bài đăng này , và chạy các lệnh trong câu trả lời được chấp nhận. Nó dường như không giúp đỡ mặc dù.
Sau khi tìm kiếm thêm một chút, tôi bắt gặp lệnh này: scutil --dns
Đầu ra từ lệnh dưới đây. Mọi thứ đều có vẻ chính xác, ngoại trừ tôi nghĩ rằng trình phân giải số 2 nên được ưu tiên và có một miền tìm kiếm trong trình phân giải số 1 (rõ ràng không phải là foobar.com, mà là miền VPN thực). Tôi nghĩ rằng đây là lỗi (hoặc bất cứ điều gì) nằm. Tôi đã không chỉ định thủ công và nó không nằm trên tab DNS cho kết nối AirPort của tôi. Khi VPN bị ngắt kết nối, miền tìm kiếm đó sẽ không ở đó và trình phân giải # 2 sẽ biến mất.
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
** chỉnh sửa **
Chà, cho đến khi ai đó có thể trả lời câu hỏi của tôi, tôi đã viết một kịch bản để giúp giải quyết vấn đề được đề cập dưới đây. Nó nên được chạy sau khi bạn kết nối VPN và chạy lại sau khi bạn ngắt kết nối (Tôi chưa tìm được cách chạy tự động). Một vài lưu ý:
Tài khoản của tôi được chạy dưới dạng Quản trị viên với Tùy chọn mạng được mở khóa, vì vậy tôi không chắc tập lệnh này sẽ công bằng như thế nào trên mọi thứ.
Bạn cần đặt vpn_srvc_name trong tập lệnh thành của bạn, bạn đoán nó, tên dịch vụ vpn.
Tôi chắc chắn có thể có một cách dễ dàng hơn để làm điều này, vì vậy hãy đăng nhận xét của bạn.
Kịch bản:
#!/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
** chỉnh sửa **
Có vẻ như đây vẫn là một vấn đề trong Lion. Tôi đang cập nhật tiêu đề và thêm một thẻ.
** chỉnh sửa **
Rõ ràng Lion cũng mang đến một số thay đổi không dây, bao gồm đổi tên dịch vụ AirPort thành Wi-Fi. Điều này có thể gây ra sự cố với tập lệnh khắc phục mà tôi đã cung cấp nếu một kết nối với VPN của họ qua kết nối không dây. Lion (vì một số lý do) giữ dịch vụ có tên AirPort bên dưới mui xe. Để khắc phục, bạn cần đổi tên dịch vụ Wi-Fi của mình thành một cái gì đó ngoài AirPort. Nếu bạn muốn giữ tên Wi-Fi, trước tiên bạn phải đổi tên thành tên khác, sau đó đổi tên thành Wi-Fi.
networksetup -setdnsservers "$@"
. Mac Pro của tôi có hai kết nối Ethernet ("Ethernet 1" và "Ethernet 2" là tên mặc định) và do đó chúng phải được trích dẫn. EDIT: tại sao phải làm điều này