ไม่สามารถแก้ไขโฮสต์ผ่านการเชื่อมต่อ VPN จาก Mac OS X [ปิด]


10

คำนำ

ฉันตั้งค่าการเชื่อมต่อ VPN จาก Macbook ของฉันและดูเหมือนว่าจะเชื่อมต่อได้สำเร็จ

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 ได้อย่างไร

วิธีแก้ปัญหาเก่า

ฉันพบวิธีแก้ปัญหาชั่วคราวที่อนุญาตให้ฉันเข้าถึงเครือข่ายผ่าน VPN โดยแก้ไขสองตัวเลือก:

ฉันใส่เครื่องหมายถูกในส่งปริมาณการใช้งานทั้งหมดผ่านการเชื่อมต่อ VPN :

ตัวเลือก VPN

ฉันป้อนชื่อโดเมนด้วยตนเองในการตั้งค่า DNS ของอินเทอร์เฟซ VPN:

ป้อนชื่อโดเมนในตัวเลือก VPN

การดำเนินการตามสองขั้นตอนนี้เพียงพอที่จะทำให้คอมพิวเตอร์ที่ใช้การได้ถูก pingable:

$ 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 ให้ถูกต้อง

หากฉันต้องการโพสต์เอาต์พุตคำสั่งคอนโซลใด ๆ ฉันยินดีที่จะทำเช่นนั้นหากคุณแจ้งให้เราทราบอย่างแน่นอน
ความช่วยเหลือใด ๆ ที่ได้รับการชื่นชมอย่างมากเนื่องจากนี่เป็นวิธีหยุดการแสดงสำหรับฉันในตอนนี้

ขอบคุณ!


VPN subnet mask ของคุณคืออะไร? ถ้าเป็น 255.255.255.0 คุณไม่สามารถเข้าถึงเซิร์ฟเวอร์ dns 192.168.10.x ได้เนื่องจาก subnet ของคุณคือ 192.168.7.x
hsmiths

ifconfigเอาท์พุทสำหรับppp0เป็นflags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1396 inet 192.168.7.232 --> 192.168.7.117 netmask 0xffffff00ดังนั้นฉันเดาว่ามันคือ 255.255.255.0 ฉันจะเปลี่ยนได้อย่างไร ขอบคุณ
Dan

@shsmith โปรดดูหัวข้อการแก้ปัญหาใหม่ คุณไม่สามารถเข้าถึงเซิร์ฟเวอร์ DNS ที่ถูกต้องได้ ฉันเคยrouteทำให้มันใช้ได้เพราะฉันไม่พบวิธีเปลี่ยน netmask ฉันจะทำเครื่องหมายเหล่านี้เป็น "DNS สำหรับทุกสิ่งที่เกี่ยวข้องกับ 192.168" ได้อย่างไร
ด่าน

ฉันไม่รู้ว่าคุณมีเซิร์ฟเวอร์ VPN ตัวใดที่อยู่ในระยะไกล แต่ฉันคิดว่านั่นคือสิ่งที่คุณควรมองหาเพื่อแก้ไขปัญหา ดูเหมือนว่า VPN เป็นการตั้งค่าช่องสัญญาณแยกซึ่งหมายถึงการเข้าถึงทั้งสองด้านของ VPN คือผ่าน VPN แต่การเข้าถึงอื่น ๆ (อินเทอร์เน็ต) ผ่านเกตเวย์ปกติของคุณ ควรกำหนดค่าเซิร์ฟเวอร์ VPN เพื่อระบุชื่อเซิร์ฟเวอร์และโดเมนที่ควรใช้ นอกจากนี้คำถามของคุณเกี่ยวกับการทำเครื่องหมายเซิร์ฟเวอร์ DNS ที่จะใช้สำหรับการค้นหา 192.168. คำถามที่เกี่ยวข้องนั้นเป็นวิธีที่ไม่ถูกต้อง - เป็นส่วนของชื่อโดเมนที่ต้อง 'ทำเครื่องหมาย' เพื่อใช้กับเซิร์ฟเวอร์ DNS ภายในไม่ใช่ IP
barryj

@barryj ขอบคุณมากสำหรับข้อมูลของคุณ ฉันจะถามผู้ดูแลระบบ แต่ฉันคิดว่าฉันเป็นคนเดียวที่มีปัญหานี้ดังนั้นฉันไม่ต้องการใช้เวลาของพวกเขาถ้าฉันสามารถทำมันด้วยตัวเอง สำหรับ DNS, ฉันเพียงต้องการที่จะใช้ VPN เพื่อเข้าถึงคอมพิวเตอร์เครื่องอื่น ๆ ในเครือข่ายของ Windows เช่นคอมพิวเตอร์ทำงานของฉันสำหรับ RDC เซิร์ฟเวอร์ฐานข้อมูลสำหรับการพัฒนา ฯลฯ
แดน

คำตอบ:


3

คุณอาจต้องการดูmanpage ตัวแก้ไข

หากต้องการอ้างอิงวิธีแก้ไขปัญหาเดียว:

การกำหนดค่าสำหรับไคลเอนต์ที่เฉพาะเจาะจงอาจจะอ่านจากไฟล์ที่มีรูปแบบที่อธิบายไว้ในหน้าคนนี้ สิ่งเหล่านี้อยู่ในตำแหน่งปัจจุบันโดยระบบในไฟล์ /etc/resolv.conf และในไฟล์ที่พบในไดเร็กทอรี / etc / resolver อย่างไรก็ตามการกำหนดค่าไคลเอนต์ไม่ จำกัด เฉพาะที่จัดเก็บไฟล์ การใช้งานกลยุทธ์การค้นหาหลายไคลเอนต์ DNS อาจค้นหาการกำหนดค่าไคลเอนต์ในแหล่งข้อมูลอื่นเช่นฐานข้อมูลการกำหนดค่าระบบ ผู้ใช้ระบบ DNS ไม่ควรตั้งสมมติฐานเกี่ยวกับแหล่งที่มาของข้อมูลการกำหนดค่า

AFAIK คุณจะต้องใส่ไฟล์ชื่อexample.comใน/etc/resolverมีที่อยู่ IP ของเซิร์ฟเวอร์สำหรับโดเมนว่าถ้าคุณต้องการเซิร์ฟเวอร์พิเศษexample.com- อาจจะเป็นพวกเขาใช้resolv.confไวยากรณ์ผมจำไม่ได้ แต่คุณควรจะคิดออก :)

แก้ไข: ตราบใดที่กระบวนการอัตโนมัติดำเนินไปฉันก็ค่อนข้างมั่นใจว่าสามารถทำได้ด้วย AppleScript หรือ Automator แต่ฉันไม่เคยคิดมากเลยคำถามที่สองในหัวข้อนั้นอาจช่วยได้


ขอบคุณ! ทำงานได้ดี ไวยากรณ์สำหรับไฟล์ใน / etc / resolver นั้นเป็น resolv.conf เช่น "nameserver 1.2.3.4" ทำงานนอกกรอบสำหรับฉัน
ต่อ Lundberg

3

ดูเหมือนว่าจะมีปัญหากับ OSX การตั้งค่า netmask ไม่ถูกต้อง นี่เป็นประสบการณ์ของผมใช้ PPTP VPN ทั้งเสือดาวหิมะและ Mountain Lion และได้รับการสนับสนุนโดยหัวข้อนี้ที่นี่

ฉันพบวิธีแก้ปัญหาที่นี่ซึ่งเกี่ยวข้องกับการตั้งค่ากฎการกำหนดเส้นทางสำหรับการรับส่งข้อมูล 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


2

ความละเอียด DNS ของ Mac OSX นั้นสนุกดี นี่คือการแก้ไขด่วน

  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 ที่เกี่ยวข้องกับการเชื่อมต่อเครือข่าย 'หลัก' ของคุณเท่านั้น รหัสด้านบนเพิ่มเซิร์ฟเวอร์ DNS ของการเชื่อมต่อ VPN ของคุณไปยังการเชื่อมต่อเครือข่ายหลัก (เช่นปกติคือ Wi-Fi หรืออีเธอร์เน็ต) เพื่อให้เซิร์ฟเวอร์ VPN DNS ของคุณจะถูกใช้ก่อนจากนั้นเซิร์ฟเวอร์ DNS การเชื่อมต่อหลักที่สอง

รันreset_dnsคำสั่งอีกครั้งหลังจากยกเลิกการเชื่อมต่อกับ VPN ของคุณเพื่อลบรายการและเรียกคืนการกำหนดค่าเซิร์ฟเวอร์ DNS ดั้งเดิม สิ่งนี้เป็นตัวเลือกเนื่องจากโดยปกติแล้วจะไม่เจ็บอะไรเลยเพียงแค่ให้เซิร์ฟเวอร์ DNS เชื่อมโยงกัน


0

ฉันมีปัญหาเดียวกัน ปรากฎว่าเราเตอร์ที่บ้านของฉันอยู่ในช่วง IP เดียวกันกับระบบงานของฉัน เมื่อฉันเปลี่ยนเราเตอร์ที่บ้านของฉันเป็นช่วงที่แตกต่างกันฉันก็สามารถที่จะเชื่อมต่อ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.