OS X> 10.6.5 VPN ile DNS Arama Sırası


13

OS X 10.6.5'e (.4'ten) güncelledikten sonra, VPN'im bağlandığında uygulamalar ana bilgisayar adlarını doğru sırada (Ağ Tercihlerindeki hizmet sırasına göre) arıyor gibi görünmüyor.

Şu anki kurulumum bir AirPort hizmetinin önündeki Cisco IPSec VPN hizmetidir. DNS sunucuları VPN bağlantısı için otomatik olarak ayarlanır (bu sorun yoktur) ve AirPort hizmeti DNS yönlendiricimi (192.168.1.1, OpenDNS sunucularına işaret eder) işaret eder.

VPN'im bağlandığında, DNS aramalarının önce VPN DNS sunucularından geçmesini istiyorum, ancak tüm uygulamalarım (Firefox, Thunderbird, ssh) önce AirPort DNS sunucumu (OpenDNS) kullanıyor gibi görünüyor.

Bu güncelleme öncesinde gayet iyi çalışıyordu.

Herhangi bir yardım için teşekkürler.

** düzenle **

Ben rastladım bu yazı ve kabul cevap komutları koştu. Yine de yardımcı olmadı.

Biraz daha aradıktan sonra şu komutla karşılaştım: scutil --dns

Komutun çıktısı aşağıdadır. Her şey doğru görünüyor, ancak # 2 numaralı çözümleyicinin önce gelmesi gerektiğini düşünüyoruz ve 1 numaralı çözümleyicide bir arama alanı var (açıkçası foobar.com değil, gerçek VPN alanı). Bence bu hata (ya da her neyse) yatıyor. Manuel olarak belirtmedim ve AirPort bağlantımın DNS sekmesinde değil. VPN bağlantısı kesildiğinde, bu arama alanı orada değildir ve # 2 numaralı çözümleyici olması gerektiği gibi gider.

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

** düzenle **

Birisi sorumu yanıtlayabilene kadar, aşağıda belirtilen geçici çözüme yardımcı olacak bir senaryo yazdım. VPN'inizi bağladıktan sonra çalıştırılmalı ve bağlantıyı kestikten sonra tekrar çalıştırılmalıdır (otomatik olarak çalıştırmanın bir yolunu bulamadım). Birkaç not:

  1. Hesabım Ağ Tercihleri ​​kilidi açık bir Yönetici olarak çalıştırılıyor, bu yüzden bu komut dosyasının nasıl bir şeyle adil olacağından emin değilim.

  2. Komut dosyasında vpn_srvc_name değerini, tahmin ettiğiniz gibi vpn hizmet adına ayarlamanız gerekir.

  3. Eminim bunu yapmanın daha kolay bir yolu vardır, bu yüzden açıklamalarınızı göndermekten çekinmeyin.

Senaryo:

#!/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

** düzenle **

Görünüşe göre bu hala Lion'da bir sorun. Başlığı güncelliyor ve bir etiket ekliyorum.

** düzenle **

Görünüşe göre Lion, AirPort hizmetini Wi-Fi olarak yeniden adlandırmak da dahil olmak üzere bazı kablosuz değişiklikler getirdi. Bu, kablosuz bir bağlantı üzerinden VPN'lerine bağlanırsa sağladığım geçici komut dosyasıyla ilgili sorunlara neden olabilir. Lion (bir nedenden dolayı) AirPort adlı hizmeti kaputun altında tutar. Düzeltmek için Wi-Fi hizmetinizi AirPort dışında bir adla yeniden adlandırmanız gerekir. Wi-Fi adını korumak istiyorsanız, önce farklı bir adla, ardından tekrar Wi-Fi olarak yeniden adlandırmalısınız.


Sistem Tercihleri'ne bakıp ağları tıkladığınızda, sol taraftaki VPN bağlantısı altında gelişmiş'i seçin (sağ alt köşedeki yardımcı). Şimdi üstte bir DNS sekmesi görmelisiniz. Sol tarafta DNS için IP'ler, sağ tarafta ise alan adınızı gösterir. Bunlar doğru mu (VPN DNS sunucusunu gösteriyor)?
Everett

Evet, haklılar.
citrusmoose

Set_dns_ips içindeki satır olmalıdır networksetup -setdnsservers "$@". Mac Pro'mda iki Ethernet bağlantısı var ("Ethernet 1" ve "Ethernet 2" varsayılan adlardır) ve bu nedenle tırnak içine alınmaları gerekir. EDIT: neden bunu
Chris R. Donnelly

Haklısın @chris. Senaryoyu güncelledim. "Bunu neden yapmalı" ile ne demek istediğinden emin değilim.
citrusmoose

Üzgünüm, @ citrusmoose. Sadece yorumu neden düzenlediğimi söylemeye çalışıyordum; Gönderiyi vurdum ve bunu neden değiştirdiğimi söylemediğimi fark ettim ve sadece iyi bir neden olmadan değişikliği savunmak istemiyorum.
Chris R. Donnelly

Yanıtlar:


1

Benim durumumda, FQDN istekleri doğru dahili adrese çözümlenmiyordu. Bunun yerine, dış adresi işaret ediyorlardı.

Cisco ASA'ma IPsec aracılığıyla bağlanıyorum. Sipariş ağ bağlantısında doğru şekilde kurulurken, DNS istekleri 10.6.5 sürümüne güncelleme yapıldığından bu sırayı izlemez.

Bu sorunu çözmek için VPN'im için DNS sunucusunu Havaalanı bağlantısına el ile atadım (kablosuz olduğum için). VPN bağlantısını tamamladıktan sonra, elle eklenen DNS adresini kaldırırım.


Evet, bu da benim geçici çözümüm (ama çok sinir bozucu). Başka biri bu sorunu yaşıyor sevindim, çünkü ben sadece biri gibi görünüyor. İç etki alanlarına ilişkin çoğu arama başarısız olacağından ve doğru DNS sunucularına geri döneceğinden başkalarının fark etmeyebileceğini düşünüyorum. Ancak benim durumumda, (nedense) harici DNS sunucularında girişleri olan az sayıda dahili alan vardır.
citrusmoose

Bundan daha iyi bir yaklaşım olmalı, @Citrusmoose, daha az manuel ve daha sağlam bir şeyle şansınız oldu mu?
MightyE

Hayır, henüz hiçbir şeyle karşılaşmadım.
citrusmoose

1

OS X 10.8'in VPN bağlantınıza varsayılan bir rota oluşturmasını durdurmak için Internet Connect'i açın (Uygulamalarda). Bağlan menüsünden Seçenekler'i seçin, ardından "Tüm trafiği VPN bağlantısı üzerinden gönder" seçeneğinin işaretini kaldırın. Tamam'ı tıkladığınızda işiniz bitti.

VPN bağlantısının diğer tarafındaki alt ağa özel bir rota yapmak için ipucunun geri kalanını okuyun ...

Kök olarak, / etc / ppp / ip-up oluşturun ve aşağıdaki kodu girin:

#!/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

Notlar:

  1. Dosyayı oluşturduktan sonra, bir chmod u+x /etc/ppp/ip-up.
  2. 5 $ değişkeni uzak IP adresinizdir (uzak ağdaki IP adresiniz).
  3. İlk vaka deyiminde, 192.168.x girişini uzak ağınızın ilk üç sekizli olarak değiştirin. Bu durumda, uzak IP 192.168.3.1 ve uzak ağ 192.168.30.0/24'tür (uzak VPN kutusu yönlendirme yapıyor - bu, SAMBA'nın ARP proxy'sine gerek kalmadan çalışacağı şekilde).
  4. Bu komut dosyasının ne yaptığını görmek için hata ayıklama satırlarından gelenleri kaldırın (## 'ları kaldırın). Çıktı /tmp/ip-up-debug.txt dosyasına yazılır. Test işlemini tamamladığınızda ## 'ları geri koymayı unutmayın.
  5. Bu komut dosyasının üç farklı VPN bağlantısı için seçenekleri vardır. 192.168.x girişlerini farklı VPN'lerinizin farklı ağ adresleriyle değiştirmeniz yeterlidir.

Burada bulundu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.