OS X 10.6.5 Ordem de pesquisa de DNS com VPN

13

Após atualizar para o OS X 10.6.5 (de .4), os aplicativos não parecem procurar nomes de host na ordem correta (de acordo com a ordem de serviço em Preferências de rede) quando minha VPN está conectada.

Minha configuração atual é um serviço Cisco IPSec VPN na frente de um serviço AirPort. Os servidores DNS são configurados automaticamente para a conexão VPN (o que é OK) e o DNS do serviço AirPort está apontando para o meu roteador (192.168.1.1, que é apontado para os servidores OpenDNS).

Quando minha VPN está conectada, gostaria que as pesquisas de DNS passassem pelos servidores DNS da VPN primeiro, mas todas as minhas aplicações (Firefox, Thunderbird, ssh) parecem estar usando primeiro o servidor AirPort DNS (OpenDNS).

Isso estava funcionando bem antes da atualização.

Obrigado por qualquer ajuda.

** editar **

Me deparei com este post e executei os comandos em a resposta aceita. Não parece ajudar embora.

Depois de pesquisar um pouco mais, deparei com este comando: scutil --dns

A saída do comando está abaixo. Tudo parece correto, exceto que eu acho que o resolvedor # 2 deve vir primeiro, e há um domínio de busca no resolver # 1 (obviamente não é foobar.com, mas o domínio VPN real). Eu acho que isso é porque o bug (ou seja lá o que for) está. Não especifiquei manualmente, e não está na guia DNS da minha conexão AirPort. Quando a VPN é desconectada, esse domínio de pesquisa não está lá, e o resolvedor # 2 sumiu, como deveria ser.

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

** editar **

Bem, até que alguém seja capaz de responder à minha pergunta, escrevi um script para ajudar com a solução alternativa mencionada abaixo. Ele deve ser executado depois que você conectar sua VPN e executá-la novamente depois de ter desconectado (não encontrei uma maneira de executá-la automaticamente). Algumas notas:

  1. Minha conta é administrada como um administrador com preferências de rede desbloqueadas, por isso não tenho certeza de como esse script seria justo em nada.

  2. Você precisa definir vpn_srvc_name no script para o seu, você adivinhou, nome do serviço vpn.

  3. Tenho certeza de que provavelmente existe uma maneira mais fácil de fazer isso, por isso, sinta-se à vontade para postar suas observações.

O script:

#!/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-]+) *//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.]+) *//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

** editar **

Parece que isso ainda é um problema no Lion. Estou atualizando o título e adicionando uma tag.

** editar **

Aparentemente, a Lion também trouxe algumas alterações sem fio, incluindo renomear o serviço AirPort para Wi-Fi. Isso pode causar problemas com o script de solução de contorno que forneci se alguém se conectar à VPN por meio de uma conexão sem fio. Lion (por algum motivo) mantém o serviço chamado AirPort sob o capô. Para corrigi-lo, você precisa renomear seu serviço Wi-Fi para algo além do AirPort. Se quiser manter o nome da Wi-Fi, você deve renomeá-lo para algo diferente primeiro e depois renomeá-lo para Wi-Fi.

    
por citrusmoose 18.11.2010 / 23:33

2 respostas

1

No meu caso, as solicitações do FQDN não estavam sendo resolvidas para o endereço interno correto. Em vez disso, eles estavam apontando para o endereço externo.

Eu me conecto ao Cisco ASA via IPsec. Enquanto o pedido está configurado corretamente na conexão de rede, as solicitações de DNS não seguem o pedido desde a atualização para o 10.6.5.

Para contornar isso, eu atribuí manualmente o servidor DNS para minha VPN na conexão do aeroporto (desde que eu sou sem fio). Depois que eu terminar com a conexão VPN, removerei o endereço DNS adicionado manualmente.

    
por 24.11.2010 / 05:00
1

Para impedir que o OS X 10.8 crie uma rota padrão para sua conexão VPN, abra o Internet Connect (em Aplicativos). Escolha Opções no menu Conectar e desmarque a opção "Enviar todo o tráfego pela conexão VPN". Clique em OK e pronto.

Para criar uma rota personalizada para a sub-rede no outro lado da conexão VPN, leia o restante da dica ...

Como root, crie / etc / ppp / ip-up e coloque o seguinte código:

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

Notas:

  1. Depois de criar o arquivo, faça um chmod u+x /etc/ppp/ip-up .
  2. A variável $ 5 é o seu endereço IP remoto (seu endereço IP na rede remota).
  3. Na primeira instrução case, altere a entrada 192.168.x para os primeiros três octetos da sua rede remota. Neste caso, o IP remoto é 192.168.3.1, e a rede remota é 192.168.30.0/24 (a caixa VPN remota está fazendo o roteamento - isso é para que o SAMBA funcione sem a necessidade de proxy ARP).
  4. Descomente (remova as ##s) das linhas de depuração para ver o que esse script está fazendo. A saída será gravada no arquivo /tmp/ip-up-debug.txt. Lembre-se de colocar o ## de volta quando você terminar de testar.
  5. Este script tem opções para três conexões VPN diferentes. Basta alterar as entradas 192.168.x para os diferentes endereços de rede de suas diferentes VPNs.

Encontrado aqui

    
por 26.11.2012 / 22:32