OS X> 10.6.5 VPNでのDNSルックアップ順序


13

OS X 10.6.5(.4から)に更新した後、VPNが接続されていると、アプリケーションは(ネットワーク環境設定のサービス順序に従って)正しい順序でホスト名を検索していないようです。

現在の設定は、AirMacサービスの前にあるCisco IPSec VPNサービスです。DNSサーバーはVPN接続用に自動的にセットアップされ(これは問題ありません)、AirMacサービスのDNSはルーター(OpenDNSサーバーを指す192.168.1.1)を指します。

VPNが接続されている場合、DNSルックアップが最初にVPN DNSサーバーを通過するようにしますが、すべてのアプリケーション(Firefox、Thunderbird、ssh)は最初にAirMac DNSサーバー(OpenDNS)を使用しているようです。

これは、更新前は正常に機能していました。

助けてくれてありがとう。

** 編集 **

私はこの投稿に出会い、受け入れられた答えでコマンドを実行しました。しかし、それは役に立たなかったようです。

もう少し検索した後、このコマンドに遭遇しました:scutil --dns

コマンドからの出力は次のとおりです。リゾルバ#2が最初に来ると思うことを除いて、すべてが正しく見えます。リゾルバ#1に検索ドメインがあります(明らかにfoobar.comではなく、実際のVPNドメインです)。これはバグ(またはそれが何であれ)の嘘だったと思います。手動で指定しなかったので、AirMac接続の[DNS]タブにありません。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の問題でもあるようです。タイトルを更新し、タグを追加しています。

** 編集 **

どうやらライオンは、AirMacサービスの名前をWi-Fiに変更するなど、いくつかのワイヤレスの変更も行ったようです。これにより、ワイヤレス接続を介してVPNに接続する場合に提供した回避策スクリプトで問題が発生する可能性があります。Lionは(何らかの理由で)AirPortという名前のサービスをボンネットの下に置いています。修正するには、Wi-Fiサービスの名前をAirMac以外のものに変更する必要があります。Wi-Fi名を保持する場合は、最初に別の名前に変更してから、Wi-Fiに戻す必要があります。


[システム環境設定]を見て、ネットワークをクリックすると、左側のVPN接続の下で[詳細設定](右下のコアナー)を選択します。上部に[DNS]タブが表示されます。左側にはDNSのIPがあり、右側にはドメインが表示されます。これらは正しいですか(VPN DNSサーバーを指しています)?
エベレット

はい、正しいです。
シトラスムース

set_dns_ipsの行はnetworksetup -setdnsservers "$@"。私のMac Proには2つのイーサネット接続(「イーサネット1」と「イーサネット2」がデフォルト名です)があるため、引用符で囲む必要があります。編集:これを行う理由
クリスR.ドネリー

そう、@ chris。スクリプトを更新しました。「これを行う理由」の意味がわかりません。
シトラスムース

すみません、@ citrusmoose。私がコメントを編集した理由をただ言おうとしていました。私はサブミットを押して、それを変更する理由を言わず、正当な理由なしに変更を主張するだけで抜けたくないことに気付きました。
クリスR.ドネリー

回答:


1

私の場合、FQDN要求は正しい内部アドレスに解決されませんでした。代わりに、外部アドレスを指していました。

IPsecを介してCisco ASAに接続します。ネットワーク接続で順序が正しく設定されている間、DNS要求は10.6.5に更新されてから順序に従いません。

この問題を回避するために、VPNのDNSサーバーを手動で空港接続に割り当てました(ワイヤレスなので)。VPN接続が完了したら、手動で追加したDNSアドレスを削除します。


はい、これも私の回避策です(しかし、非常に迷惑です)。他の誰かがこの問題を抱えているのはうれしいです。内部ドメインのほとんどの検索は失敗し、正しいDNSサーバーにフォールバックするため、他の人は気付かないかもしれません。しかし、私の場合、外部DNSサーバーに(何らかの理由で)エントリを持つ内部ドメインはほとんどありません。
シトラスムース

これよりも優れたアプローチが必要です@Citrusmoose、手作業が少なくて堅牢なものに幸運がありましたか?
MightyE

いいえ、まだ何も見つかりませんでした。
シトラスムース

1

OS X 10.8がVPN接続へのデフォルトルートを作成しないようにするには、インターネット接続(アプリケーション内)を開きます。[接続]メニューから[オプション]を選択し、[VPN接続を介してすべてのトラフィックを送信する]オプションをオフにします。[OK]をクリックすると、完了です。

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エントリをリモートネットワークの最初の3オクテットに変更します。この例では、リモートIPは192.168.3.1、リモートネットワークは192.168.30.0/24です(リモートVPNボックスがルーティングを行っています-これにより、SAMBAはARPをプロキシすることなく機能します)。
  4. デバッグ行のコメントを外し(##を削除)、このスクリプトが何をしているかを確認します。出力は/tmp/ip-up-debug.txtファイルに書き込まれます。テストが終了したら、忘れずに##を入力してください。
  5. このスクリプトには、3つの異なるVPN接続のオプションがあります。192.168.xエントリを異なるVPNの異なるネットワークアドレスに変更するだけです。

発見ここに

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.