ป้องกัน VPN ไม่ให้เปลี่ยน DNS บนหน้าตัวอย่างผู้พัฒนา Windows 7/8


10

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

มีวิธีที่ฉันสามารถป้องกันไม่ให้แอปพลิเคชันแทนที่การตั้งค่า DNS ของฉัน (โดยไม่เปิดใช้งาน UAC) หรือไม่

อีกวิธีหนึ่งคือมีวิธีที่ฉันสามารถตั้งค่าการกำหนดเส้นทางท้องถิ่นบางอย่างที่ระบุว่า 'เมื่อมีการร้องขอ DNS สำหรับที่อยู่ IP A มาใช้ที่อยู่ IP จริงหรือไม่'

ฉันใช้ Windows 8 Developer Preview (แต่ฉันคิดว่ามันน่าจะทำงานได้เหมือน Windows 7)

ขอบคุณ

คำตอบ:


18

ฉันไม่เชื่อว่ามีวิธีการป้องกันไม่ให้เกิดขึ้นนอกเหนือจากการกำหนดเซิร์ฟเวอร์ DNS ในการเชื่อมต่อ VPN แบบคงที่

ในการเปลี่ยนลำดับการสอบถามเซิร์ฟเวอร์ DNS ควรมีการเปลี่ยนลำดับการเชื่อมต่ออินเทอร์เฟซตามhttps://superuser.com/a/314379/120267แต่ดูเหมือนจะไม่มีผลต่อการเชื่อมต่อ VPN ใน การทดสอบส่วนบุคคลของฉันใน Windows 7; ฉันยืนยันว่าการเชื่อมต่อ VPN ของฉันถูกเพิ่มไปยังด้านบนของHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Linkage\Bindรายการอย่างต่อเนื่องโดยไม่คำนึงถึงการตั้งค่าลำดับการเชื่อมโยงของอินเทอร์เฟซ

อย่างไรก็ตามคุณสามารถรีเซ็ตการเปลี่ยนแปลง DNS หลังจากสร้างการเชื่อมต่อ VPN แล้ว

การรวบรวมข้อมูล

เปิดขึ้นพร้อมรับคำสั่ง ( Start-> Run...-> cmd) netsh interface ipv4 show dnsserversและเรียกใช้แล้ว คุณจะเห็นผลลัพธ์คล้ายกับที่แสดงต่อไปนี้:

Configuration for interface "My VPN"
    Statically Configured DNS Servers:    11.22.33.44
                                          55.66.77.88
   ...

Configuration for interface "Local Network Connection"
    DNS servers configured through DHCP:  192.168.0.1
                                          192.168.0.2
    ...

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


การตั้งค่าทั้งหมดขึ้น

ตัวเลือก 1: ปิดการใช้งาน DNS DNS

สมมติว่าคุณไม่ต้องการเซิร์ฟเวอร์ DNS ของ VPN เลยคุณสามารถเรียกใช้สิ่งต่อไปนี้ในพร้อมท์คำสั่ง:

netsh interface ipv4 delete dnsservers name="<Interface Name>" address=all validate=no

Eg: netsh interface ipv4 delete dnsservers name="My VPN" address=all validate=no

หากคุณทำงานnetsh interface ipv4 show dnsserversอีกครั้งคุณจะเห็นว่าเซิร์ฟเวอร์ DNS ที่เชื่อมโยงกับ VPN ถูกลบไปแล้ว เซิร์ฟเวอร์ DNS ของการเชื่อมต่อที่ไม่ใช่ VPN ของคุณจะถูกใช้เพื่อแก้ไขชื่อโฮสต์


ตัวเลือก 2: เสริม DNS DNS

หากคุณต้องการเซิร์ฟเวอร์ DNS ของ VPN เพื่อแก้ไขชื่อโฮสต์ของอินทราเน็ตคุณสามารถเรียกใช้สิ่งต่อไปนี้ในพร้อมท์คำสั่ง:

netsh interface ipv4 add dnsservers name="<Interface Name>" address=<Non-VPN DNS server> index=1 validate=no

Eg: netsh interface ipv4 add dnsservers name="My VPN" address=192.168.0.1 index=1 validate=no

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


คุณเป็นฮีโร่เซอร์ขอบคุณสำหรับคำตอบที่ครอบคลุมดูเหมือนว่าจะทำงานได้ดี! ฉันพยายาม messing รอบกับ netsh แต่ไม่สามารถจัดการได้ไกล ...
Wiebe Tijsma

1

ฉันมีปัญหาที่คล้ายกัน การเชื่อมต่อกับเซิร์ฟเวอร์ VPN จะแทนที่ DNS (ไคลเอนต์ VPN ระยะไกล) ของเวิร์กสเตชันของฉันเพื่อที่ DNS ท้องถิ่นจะถูกบดบัง ฉันอธิบายปัญหาในรายละเอียดเพิ่มเติมทางด้าน Stackoverflowก่อนที่ฉันจะถูกชี้ให้เห็นว่าฉันควรโพสต์ไว้ที่นี่แทน

เมื่ออ่านผ่านเธรดนี้จะเห็นได้ว่าการแทนที่ไม่สามารถป้องกันได้โดยใช้การกำหนดค่าไคลเอนต์ OpenVPN วิธีแก้ไขของฉันคือการเพิ่มแบตช์ไฟล์ในไดเรกทอรีกำหนดค่า OpenVPN ที่ดำเนินการเมื่อมีการเชื่อมต่อ OpenVPN หากไฟล์ OVPN ชื่อ company.ovpn ไฟล์ที่รันบนการเชื่อมต่อจำเป็นต้องมีชื่อว่า company_up.bat

ฉันได้เพิ่มไฟล์บางส่วนตั้งแต่รุ่นที่ฉันโพสต์คำถามของฉันใน StackOverflow คืนนี้ก่อนหน้านี้ ตอนนี้ดูเหมือนว่านี้:

1: ping 127.0.0.1 -n 2 > nul
2: netsh interface ip set dns "Local Area Connection 4" static 127.0.0.1
3: route delete 0.0.0.0
4: route add -p 0.0.0.0/0 172.20.20.1 metric 1000
5: exit 0

1:แฮ็คที่จะรอสองสามวินาทีก่อนดำเนินการต่อ เวอร์ชันล่าสุด (2.3) ของไคลเอนต์ OpenVPN จะเพิกเฉยต่อ DNS และการเปลี่ยนเส้นทางหากดำเนินการโดยไม่ล่าช้า

2:ตั้งค่า DNS ของการเชื่อมต่อ VPN ให้ชี้ไปที่ localhost ฉันมีตัวแก้ไข (ฉันใช้SimpleDNS Plus ) ทำงานบน localhost ที่ส่งต่อการสืบค้นไปยังโดเมน บริษัท ไปยังเซิร์ฟเวอร์ DNS ของ บริษัท ผ่าน VPN และทุกอย่างอื่นไปยังเซิร์ฟเวอร์ LAN DNS ในพื้นที่ โปรดทราบว่าฉันไม่สามารถใช้ตัวแก้ไข LAN ภายในเพื่อส่งต่อการสอบถามสำหรับโดเมนของ บริษัท ไปยัง DNS ของ บริษัท ผ่าน VPN ได้เนื่องจากจุดสิ้นสุด VPN อยู่บนโลคัลโฮสต์ ชื่อการเชื่อมต่อ ("การเชื่อมต่อเครือข่ายท้องถิ่น 4") ถูกกำหนดที่หน้าจอพร้อมรับคำสั่งผ่าน "ipconfig / all"

3:เซิร์ฟเวอร์ VPN ของ บริษัท ถูกกำหนดค่าให้กำหนดเส้นทางการรับส่งข้อมูลขาออกทั้งหมดผ่าน VPN ในขณะเดียวกันก็ จำกัด การเชื่อมต่อ SSH ขาออก (ไปยังอินเทอร์เน็ต) สิ่งนี้ขัดแย้งกับเวิร์กโฟลว์ของฉันและฉันจะลบเส้นทาง "0.0.0.0 netmask 0.0.0.0" เป็นครั้งแรก ...

4: .. จากนั้นฉันเพิ่มเส้นทาง 0.0.0.0/0 อีกครั้งเพื่อชี้ไปที่เกตเวย์ LAN ในพื้นที่และตั้งค่าตัวชี้วัด (น้ำหนัก) เป็น 1,000 เป็น catch-all สำหรับทราฟฟิกทั้งหมดที่ไม่ได้กำหนดเส้นทางเป็นอย่างอื่น

5:ไม่มี "exit 0" OpenVPN คายคำเตือนข้อผิดพลาดของสคริปต์ล้มเหลว (ด้วยสถานะออก 1)

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


0

มีวิธีที่ฉันสามารถป้องกันไม่ให้แอปพลิเคชันแทนที่การตั้งค่า DNS ของฉัน (โดยไม่เปิดใช้งาน UAC) หรือไม่

อย่างน้อยก็ไม่มีวิธีที่ง่ายในการทำเช่นนั้น

อีกวิธีหนึ่งคือมีวิธีที่ฉันสามารถตั้งค่าการกำหนดเส้นทางท้องถิ่นบางอย่างที่ระบุว่า 'เมื่อมีการร้องขอ DNS สำหรับที่อยู่ IP A มาใช้ที่อยู่ IP จริงหรือไม่'

คุณสามารถเพิ่มรายการในไฟล์โฮสต์ ( C:\Windows\System32\drivers\etc\hosts) ไฟล์นี้มีการแมปจากชื่อโฮสต์ไปยังที่อยู่ IP และเป็นที่ต้องการมากกว่าคำขอ DNS


ดีฉันรู้เกี่ยวกับไฟล์โฮสต์ แต่นี่คือทั้งหมดที่อยู่ IP ตามเพื่อให้ไม่ทำงานน่าเสียดาย ...
วิบบ์ Tijsma

โอ้ตกลงตอนนี้ฉันได้รับคำถามของคุณ และไม่คุณไม่สามารถเปลี่ยนเส้นทางคำขอจาก IP หนึ่งไปยังอีก
ไมเคิล

0

คุณสามารถตรวจสอบสถานะของช่องทำเครื่องหมาย 'ใช้เกตเวย์เริ่มต้นบนเครือข่ายระยะไกล' ได้หรือไม่ พบได้โดยการเปิดคุณสมบัติของการเชื่อมต่อ VPN ของคุณและไปที่แท็บเครือข่ายแล้วเลือก TCP / IP v4 หรือ TCP / IP V6 จากนั้นเลือกคุณสมบัติแล้วเลือกขั้นสูง นี่อาจเปิดใช้งานซึ่งอาจหมายความว่าปริมาณการใช้อินเทอร์เน็ตทั้งหมดจะถูกกำหนดเส้นทางผ่านการเชื่อมต่อ VPN ไม่สามารถปิดการใช้งานนี้ได้ตลอดเวลาและยังคงทำตามที่คุณต้องการด้วย VPN แต่ก็สามารถปิดการใช้งานได้

หากวิธีนี้ไม่ได้ผลจะมีแท็บ DNS อยู่ตรงนั้นและคุณสามารถลองเพิ่มเซิร์ฟเวอร์ DNS ของคุณได้ ฉันได้ลองแล้ว แต่ฉันคาดว่าการตั้งค่าเหล่านี้จะแทนที่การตั้งค่าอัตโนมัติ


ไม่ได้ตรวจสอบดังนั้นจึงไม่ได้กำหนดเส้นทางการรับส่งข้อมูลอินเทอร์เน็ตทั้งหมดผ่าน VPN (เมื่อชื่อได้รับการแก้ไขในที่สุดการเชื่อมต่อนั้นเร็วพอ) ฉันพยายามเปลี่ยนการตั้งค่า DNS ที่นั่น แต่น่าเสียดายที่มันเปลี่ยนกลับไปเป็นค่า DNS ที่ไม่ถูกต้องโดยอัตโนมัติเมื่อฉันเริ่มการเชื่อมต่อใหม่ :(
Wiebe Tijsma

หากคุณไม่สามารถหยุด DNS ที่กำลังเปลี่ยนแปลงเป็นไปได้หรือไม่ที่จะทำให้ล้มเหลวเร็วขึ้นโดยใช้ไฟร์วอลล์เพื่อบล็อกการร้องขอ DNS ไปยังที่อยู่นี้
sgmoore

0

น่าเสียดายที่ netsh ไม่สามารถลบเซิร์ฟเวอร์ dns ที่กำหนดโดย dhcp แต่สามารถทำได้โดยการล้างพารามิเตอร์ DhcpNameServer

HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\{id}

รหัสรีจิสตรี


0

ณ ปี 2560 สิ่งนี้สามารถเกิดขึ้นได้หากใช้OpenVPN

เพิ่มบรรทัดลงในไฟล์กำหนดค่าไคลเอนต์ของคุณ

ตัวกรองแบบดึงละเว้น "dhcp-option DNS"

และมันจะไม่สนใจบรรทัดการกำหนดค่าที่พุชทั้งหมดที่เริ่มต้นด้วยข้อความที่ยกมา

accept ignore rejectสามคำหลักที่มีการดำเนินการ ฉันยังไม่ได้ค้นพบกรณีการใช้งานเพื่อปฏิเสธ


0

ฉันเพียงแค่ลบตัวเลือกนี้ออกจากการกำหนดค่าไคลเอนต์ VPN

setenv เลือกบล็อกนอก -dns

มันแก้ไขปัญหา

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