OS X> 10.6.5 VPN을 사용한 DNS 조회 순서


13

OS X 10.6.5 (.4부터)로 업데이트 한 후 VPN이 연결되어있을 때 응용 프로그램이 네트워크 환경 설정의 서비스 순서에 따라 올바른 순서로 호스트 이름을 찾지 않는 것 같습니다.

현재 설정은 AirPort 서비스 앞의 Cisco IPSec VPN 서비스입니다. DNS 서버는 VPN 연결 (확인)에 대해 자동으로 설정되며 AirPort 서비스 DNS는 내 라우터 (192.168.1.1, 이는 OpenDNS 서버를 가리킴)를 가리 킵니다.

VPN이 연결되면 DNS 조회가 VPN DNS 서버를 먼저 통과하고 싶지만, 모든 응용 프로그램 (Firefox, Thunderbird, ssh)이 AirPort DNS 서버 (OpenDNS)를 먼저 사용하는 것으로 보입니다.

이것은 업데이트 직전에 잘 작동했습니다.

도움을 주셔서 감사합니다.

** 편집 **

내가 건너 온 이 게시물 및 허용 대답의 명령을 실행했습니다. 그래도 도움이되지 않는 것 같습니다.

조금 더 검색 한 후 scutil --dns 명령을 사용했습니다.

명령 출력은 다음과 같습니다. 리졸버 # 2가 먼저 나오고 리졸버 # 1에 검색 도메인이 있다는 것을 제외하고는 모든 것이 올바르게 보입니다 (foobar.com이 아니라 실제 VPN 도메인 임). 나는 이것이 버그 (또는 그것이 무엇이든)라고 생각합니다. 수동으로 지정하지 않았으며 AirPort 연결을위한 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은 AirPort 서비스 이름을 Wi-Fi로 변경하는 등 일부 무선 변경 사항을 가져 왔습니다. 무선 연결을 통해 VPN에 연결 한 경우 제공 한 해결 방법 스크립트에 문제가 발생할 수 있습니다. Lion은 어떤 이유로 AirPort라는 서비스를 후드 아래에 유지합니다. 문제를 해결하려면 Wi-Fi 서비스의 이름을 AirPort 이외의 이름으로 바꿔야합니다. Wi-Fi 이름을 유지하려면 먼저 다른 이름으로 바꾸고 Wi-Fi로 다시 이름을 바꿔야합니다.


시스템 환경 설정에서 네트워크를 클릭하면 왼쪽의 VPN 연결 아래에서 고급 (오른쪽 하단 코어 너)을 선택하십시오. 이제 상단에 DNS 탭이 나타납니다. 왼쪽에는 DNS의 IP가 있고 오른쪽에는 도메인이 표시됩니다. VPN DNS 서버를 가리키는 것이 맞습니까?
Everett

예, 맞습니다.
citrusmoose가

set_dns_ips의 행은이어야합니다 networksetup -setdnsservers "$@". 나의 Mac Pro에는 두 개의 이더넷 연결 ( "이더넷 1"및 "이더넷 2"가 기본 이름 임)이 있으므로 인용해야합니다. 편집 : 왜해야
크리스 R. 도넬리

맞습니다, @chris. 스크립트를 업데이트했습니다. "이 작업을 수행하는 이유"가 무엇을 의미하는지 잘 모르겠습니다.
citrusmoose 2016 년

죄송합니다, @citrusmoose. 내가 왜 댓글을 편집했는지 말하려고했습니다. 제출을 누른 다음 변경 해야하는지 말하지 않았으며 정당한 이유없이 변경을 옹호하는 것에서 벗어나고 싶지 않다는 것을 깨달았습니다 .
Chris R. Donnelly

답변:


1

필자의 경우 FQDN 요청이 올바른 내부 주소로 확인되지 않았습니다. 대신 그들은 외부 주소를 가리키고있었습니다.

IPsec을 통해 Cisco ASA에 연결합니다. 네트워크 연결에서 순서가 올바르게 설정되어 있지만 10.6.5로 업데이트 한 이후 DNS 요청이 순서를 따르지 않습니다.

이 문제를 해결하려면 VPN 연결을 위해 DNS 서버를 공항 연결에 수동으로 할당했습니다 (무선이므로). VPN 연결을 마친 후 수동으로 추가 한 DNS 주소를 제거합니다.


예, 이것은 내 해결 방법이기도합니다 (그러나 매우 성가시다). 내가 유일한 사람 인 것처럼 다른 누군가 가이 문제를 겪고있어 기쁘다. 내부 도메인에 대한 대부분의 조회가 실패하고 올바른 DNS 서버로 대체되기 때문에 다른 사람들이 알지 못할 것이라고 생각합니다. 그러나 필자의 경우 외부 DNS 서버에 항목이있는 내부 도메인이 거의 없습니다.
citrusmoose

@Citrusmoose, 이보다 더 나은 접근 방법이 있어야합니다.
MightyE

아니, 나는 아직 아무것도 겪지 않았습니다.
citrusmoose

1

OS X 10.8이 VPN 연결에 대한 기본 경로를 만들지 못하게하려면 응용 프로그램에서 인터넷 연결을 엽니 다. 연결 메뉴에서 옵션을 선택한 다음 "VPN 연결을 통해 모든 트래픽 보내기"옵션을 선택 취소하십시오. 확인을 클릭하면 완료됩니다.

VPN 연결의 다른 쪽에서 서브넷으로 사용자 지정 경로를 만들려면 나머지 힌트를 읽으십시오 ...

루트로 / 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. 첫 번째 경우에서 192.168.x 항목을 원격 네트워크의 처음 세 옥텟으로 변경하십시오. 이 경우 원격 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.