web-dev-qa-db-ja.com

Mac OS XからのVPN接続を介してホストを解決できない

プリアンブル

MacbookからVPN接続を設定したところ、正常に接続されているようです。

working VPN

ただし、ホスト名が解決されないため、仕事用のコンピューターにアクセスできません:

$ ping myusername
ping: cannot resolve myusername: Unknown Host

新しい回避策

できる限りのことを試したところ、このコマンドを実行すると、VPNネットワークとインターネットの両方を利用できるようになります。

Sudo route add -net 192.168.7.218 192.168.7.117 255.255.0.0

会社のDNSサーバーはIPでアクセスできます。 192.168から始まるすべてにそれらを使用するようにネットワークを構成するにはどうすればよいですか

古い回避策

2つのオプションを変更して、VPN経由でネットワークにアクセスできる一時的な回避策を見つけました。

VPN接続を介してすべてのトラフィックを送信にチェックマークを付けます:

VPN options

VPNインターフェイスのDNS設定に検索ドメイン名を手動で入力します。

entering domain name in VPN options

これらの2つの手順を実行するだけで、私の作業中のコンピューターをping可能にするのに十分です。

$ nslookup myusername
Server:     192.168.10.16
Address:    192.168.10.16#53

Name:   myusername.universe.mycompany
Address: 192.168.11.56

$ ping myusername
PING myusername.universe.mycompany (192.168.11.56): 56 data bytes
64 bytes from 192.168.11.56: icmp_seq=0 ttl=126 time=126.164 ms

ただし、VPNを通過するようにすべてのトラフィックをトンネリングしたため、インターネットにアクセスできなくなりました

$ ping google.com
PING google.com (74.125.232.48): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1

質問

VPNを通過するタイミングと通常の接続を使用するタイミングを理解できるように、ネットワークを正しく設定するにはどうすればよいですか? Windowsサーバー名を正しく解決するために必要です。

コンソールコマンドの出力を投稿する必要がある場合は、正確にお知らせいただければ、喜んでそれを行います。
これは現在私にとって一種のショーストッパーであるため、どんな助けも高く評価されます。

ありがとう!

10
Dan

OSXによるネットマスクの設定に問題があるようです。これは、Snow LeopardとMountain Lionの両方でPPTP VPNを使用した私の経験であり、このスレッド here によってサポートされています。

私は解決策を見つけました ここ 、これはppp0トラフィックのルーティングルールを設定することを含みます。

基本的に:

$ Sudo <your_text_editor_of_choice> /etc/ppp/ip-up

    #!/bin/sh
    /sbin/route add -net 192.168 -interface ppp0

$ Sudo chmod 755 /etc/ppp/ip-up

これにより、VPNに接続するたびにルーティングルールが設定されます。

3
Dean

resolverのマンページ を見たいと思うかもしれません

1つのソリューションを引用するには:

特定のクライアントの構成は、このマニュアルページで説明されている形式のファイルから読み取ることができます。これらは現在、システムによって/etc/resolv.confファイルと/ etc/resolverディレクトリにあるファイルにあります。ただし、クライアント構成はファイルストレージに限定されません。 DNSマルチクライアント検索戦略の実装では、システム構成データベースなどの他のデータソースでクライアント構成を見つけることもできます。 DNSシステムのユーザーは、構成データのソースについて想定しないでください。

私の知る限り、example.comに特別なネームサーバーが必要な場合は、/etc/resolverという名前のファイルをそのドメインのネームサーバーのIPとともにexample.comに配置する必要があります--resolv.confを使用できます構文、覚えていません。しかし、あなたはそれを理解することができるはずです:)

編集:プロセスの自動化に関する限り、AppleScriptまたはAutomatorでそれが可能であると確信しています。しかし、私はそれについて頭に浮かぶことは決してないので、そのトピックに関する2番目の質問が役立つかもしれません。

3
Martin M.

Mac OSX DNS解決は面白いです。これがクイックフィックスです。

  1. 次のコードをファイル名reset_dnsに入れます。

    #!/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='MY VPN'
    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")
      setup_vpn_ips=$(get_dns_ips "$vpn_srvc_name" "Setup")
      state_vpn_ips=$(get_dns_ips "$vpn_srvc_name" "State")
    
      echo "set_dns_ips $pri_srvc_name $setup_vpn_ips $state_vpn_ips $setup_dns_ips $state_dns_ips"
      set_dns_ips "$pri_srvc_name" $setup_vpn_ips $state_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)
    
      echo "set_dns_ips $pri_srvc_name $setup_dns_ips"
      set_dns_ips "$pri_srvc_name" $setup_dns_ips
    
      rm $ip_file
    fi
    
  2. 「MY VPN」という単語をVPN接続の名前に置き換えます。

  3. VPNに接続したら、ターミナルウィンドウからreset_dnsを実行します

Mac OSXは、「プライマリ」ネットワーク接続に関連付けられたDNSサーバーのみを使用します。上記のコードは、VPN接続のDNSサーバーをプライマリネットワーク接続(通常はWi-Fiまたはイーサネット)に追加するため、VPN DNSサーバーが最初に使用され、次にプライマリ接続DNSサーバーが使用されます。

VPNから切断した後、reset_dnsコマンドを再度実行して、エントリを削除し、元のDNSサーバー構成を復元します。ただし、これはオプションであり、通常はDNSサーバーを関連付けたままにしておくだけでは何の問題もありません。

2
parleer

同じ問題がありました。私のホームルーターが私の仕事用システムと同じIP範囲にあることがわかりました。ホームルーターを別の範囲に変更したら、接続できました。

0
user174089