ชี้ที่อยู่ IP หลายแห่งไปยังชื่อโฮสต์เดียว


25

ในระบบ Windows C:\WINDOWS\system32\drivers\etc\hostsมีไฟล์นี้ที่ ไฟล์นี้ช่วยให้เราสามารถเริ่มต้นที่อยู่ IP เฉพาะกับชื่อโฮสต์

ปัญหาตอนนี้คือว่าฉันสามารถตั้งค่าที่อยู่ IP หลายเป็นชื่อโฮสต์ ตัวอย่างเช่นฉันสามารถทำสิ่งนี้:

192.168.244.128   gateway.net
192.168.226.129   gateway.net

และคาดหวังว่าเบราว์เซอร์สามารถแก้ไขได้ทั้งสองอย่างดูว่าอันไหนจะใช้งานได้และชี้ไปที่อันนั้น?

ถ้าไม่มีวิธีอื่นในการรับพฤติกรรมที่ฉันต้องการหรือไม่

หมายเหตุ: ฉันกำลังปรับใช้แอพนี้ในเครือข่ายท้องถิ่นของฉันเองดังนั้นจึงไม่จำเป็นต้องใช้อินเทอร์เน็ต

คำตอบ:


25

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

สิ่งที่จะทำคือมีการร้องขอครั้งแรกผ่านมาจะได้รับคำขอ192.168.244.128ต่อไปจะได้รับ192.168.226.129เป็นต้นไปเรื่อย ๆ อย่างไรก็ตามตามการออกแบบเครื่องท้องถิ่นของคุณจะแคชการแก้ปัญหา DNS ของมันและมักจะใช้ที่อยู่ IP เดียวกันซ้ำแล้วซ้ำอีกจนกว่าจะหมดอายุ (Time To Live, TTL)


1
แก้ไข: ไม่เป็นไรฉันยืนแก้ไข !! โพสต์ด้านล่าง
MagnaVis

17

ใช่คุณสามารถทำสิ่งนี้ได้ฉันใช้มันเพื่อทดสอบสถานการณ์ DNS แบบปัดวนโดยไม่ต้องป้อนโฮสต์ใน DNS

เมื่อแอปพลิเคชันเรียกใช้ gethostbyname มันจะได้รับรายการที่อยู่ IP ทั้งหมดกลับคืน (อาจเป็นลำดับแบบสุ่ม - ขึ้นอยู่กับไลบรารี / ระบบปฏิบัติการ)


2
+1 สำหรับตอบคำถามจริง
CLF

คุณตั้งใจจะบอกว่าจะเลือกหนึ่งอย่างสุ่ม .. ฉันมี windows server
Lakshay

12

ฉันคิดว่าคุณกำลังทำผิดทางอยู่ แจ้งให้เราทราบหากฉันกำลังตั้งสมมติฐานผิดที่นี่

สถานการณ์:

  • คุณมีเซิร์ฟเวอร์ windows สองเครื่องที่ใช้งานเว็บแอปพลิเคชันเดียวกันอาจอยู่ใน IIS
  • คุณต้องการให้แอปพลิเคชันของคุณทนต่อความผิดพลาดเพื่อที่ว่าหากหนึ่งในเซิร์ฟเวอร์ล้มเหลวแอปพลิเคชันของคุณยังคงพร้อมใช้งาน
  • คุณต้องการให้การยอมรับข้อผิดพลาดนี้โปร่งใสกับเบราว์เซอร์เพื่อให้ผู้ใช้สามารถเข้าถึงแอปพลิเคชันด้วยชื่อโฮสต์เดียวกันเช่น gateway.net

สิ่งที่คุณพยายามทำเรียกว่าround-robin DNS (หรือที่รู้จักในการโหลดบาลานซ์ที่สมดุล) แต่คุณพยายามทำสิ่งนี้จากฝั่งไคลเอ็นต์ ดูเหมือนว่าจะไม่มีผลที่ต้องการ (อย่างน้อยในกล่อง Windows XP ของฉัน) แม้ว่าฉันจะล้างแคช DNS Windows จะแก้ไขเฉพาะ IP แรกในไฟล์เท่านั้น อย่างไรก็ตาม round-robin DNS นั้นไม่สามารถทนต่อความผิดพลาดได้ดังนั้นสิ่งนี้จะไม่ช่วยให้คุณบรรลุสิ่งที่คุณต้องการ

วิธีแก้ปัญหาที่แนะนำ:

ตัวโหลดบาลานซ์ของฮาร์ดแวร์:บางยี่ห้อเป็น Alteon, Big-IP, Barracuda สิ่งนี้จะเป็นเพียงการนำเสนอ IP เดียวสำหรับผู้ใช้ของคุณเพื่อเชื่อมต่อ & มันจะส่งต่อการร้องขอไปยังเว็บเซิร์ฟเวอร์ หากเซิร์ฟเวอร์ตัวใดตัวหนึ่งไม่สามารถใช้งานได้จะไม่มีการส่งต่อการรับส่งข้อมูลอีกต่อไป นี่คือตัวเลือกที่แพง

Network Load Balancing Services:นี่คือเทคโนโลยีของ Microsoft ที่มีอยู่บน windows server ซึ่งจะให้ IP แบบคลัสเตอร์เดียวแก่คุณ มันบรรลุผลเช่นเดียวกับ load balancer ฮาร์ดแวร์ แต่ในวิธีที่ต่างกัน ทั้งหมดที่คุณต้องทำคือการกำหนดค่า


1
ZEN-LBเป็นเครื่องถ่วงโหลดที่เรียบง่ายและใช้งานง่าย เราได้มีจำนวนมากของความสำเร็จกับมันและรักมันเพราะเปิดแหล่งที่มาของมัน (ฟรี.)
ปั้นจั่น

2

จากhttp://www.unc.edu/atn/lsf/docs/7.0.5/lsf_config_ref/index.htm?hosts.5.html~main

ตัวอย่าง IPv4

192.168.1.1 hostA hostB 192.168.2.2 hostA hostC host-C

ในตัวอย่างนี้ hostA มี 2 ที่อยู่ IP และ 3 ชื่อแทน alias hostB ระบุที่อยู่แรกและ aliases hostC และ host-C ระบุที่อยู่ที่สอง LSF ใช้ชื่อโฮสต์อย่างเป็นทางการ hostA เพื่อระบุว่าที่อยู่ IP ทั้งสองเป็นของโฮสต์เดียวกัน


1
"รูปแบบของ LSF_CONFDIR / โฮสต์คล้ายกับรูปแบบของไฟล์ / etc / hosts บนเครื่อง UNIX" เช่น: แหล่งที่มาไม่เกี่ยวกับไฟล์โฮสต์ปกติ
gertvdijk

1

ข้อเสนอแนะของฉันคือการใช้เซิร์ฟเวอร์ DNS ภายในกับ DNS round-robin และ TTL = 0 หากคุณอัปเดตระเบียน DNS (เช่นเดียวกับระบบตรวจสอบ ip อัตโนมัติ) เมื่อ IP / เซิร์ฟเวอร์ไม่ทำงานคุณสามารถมีระบบความพร้อมใช้งานสูง


นี่ไม่ใช่ทางออกสำหรับความพร้อมใช้งานสูง DNS ไม่ได้ถูกออกแบบมาสำหรับสิ่งนี้และควรใช้ร่วมกับวิธีการอื่น ๆ ที่ล้มเหลวเท่านั้น ตัวแก้ปัญหาจำนวนมากเพิกเฉยแคช TTL เช่นกันทำให้วิธีนี้ไม่น่าเชื่อถือ
Mark Henderson

1

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


1

จาก http://www.unc.edu/atn/lsf/docs/7.0.5/lsf_config_ref/index.htm?hosts.5.html~main

ตัวอย่าง IPv4

192.168.1.1 hostA hostB 192.168.2.2 hostA hostC host-C

ในตัวอย่างนี้ hostA มี 2 ที่อยู่ IP และ 3 ชื่อแทน alias hostB ระบุที่อยู่แรกและ aliases hostC และ host-C ระบุที่อยู่ที่สอง LSF ใช้ชื่อโฮสต์อย่างเป็นทางการ hostA เพื่อระบุว่าที่อยู่ IP ทั้งสองเป็นของโฮสต์เดียวกัน

จากตัวอย่างนี้ฉันทำ 10.18.yx 192.168.zx hostA ต่อไปนี้

โดยที่ hostA เป็นชื่อโฮสต์ของเซิร์ฟเวอร์ที่ฉันต้องการเข้าถึงจากทั้งเครือข่ายภายใน (192.168.yx) และ VPN (10.8.zx)

ping hostA
sending 'ping' on 192.168.y.x [10.8.z.x]
Answer from 10.8.z.x : bytes=32 time=98 ms TTL=64
Answer from 10.8.z.x : bytes=32 time=78 ms TTL=64
Answer from 10.8.z.x : bytes=32 time=111 ms TTL=64
Answer from 10.8.z.x : bytes=32 time=136 ms TTL=64

มันใช้งานได้ดีและฉันสามารถทำให้แซมบ้าทำงานผ่าน VNP โดยใช้ชื่อโฮสต์ได้ดีสำหรับฉันที่จะมีไดรฟ์ที่เชื่อมต่ออยู่ใน windows ทั้งสองกรณี (เชื่อมต่อ LAN หรือ VPN)

ด้วยความเคารพ.


0

@ Plamen Dimitrov คุณจะต้องใช้อุปกรณ์ในการจัดการกับความสมดุลเช่นนั้นอาจเป็นสวิตช์ที่สามารถจัดการ BGP ต่อหน้า FW ของคุณหรือใช้ FW ของคุณได้ถ้ามันมีความสามารถ หาก Ciscos ของคุณจัดการกับ BGP ให้มองหาการใช้ วิธีนี้คุณสามารถมีทั้ง ISPs IP ของคุณไปยัง Cisco / หรือสวิตช์และเซิร์ฟเวอร์เป้าหมายจะมี IP ที่ถูกต้องของ IP สาธารณะ 24 บิต (แตกต่างจาก IP ISP 2 ตัว) ณ จุดนี้ (คุณกำลังใช้บล็อก IP สาธารณะที่แตกต่างกัน 3 ตัวบล็อกสำหรับเซิร์ฟเวอร์ของคุณต้องมี 24 BIT) คุณจะต้องให้ ISP ของคุณแต่ละคนรู้เกี่ยวกับโซลูชันนี้และพวกเขาจะต้องยินดีที่จะสนับสนุน โซลูชัน BGP ระหว่างพวกเขาซึ่งส่วนใหญ่จะทำ ตอนนี้เมื่อ FQDN ของคุณได้รับการแก้ไขแล้วมันจะแก้ไขเป็นบล็อก 24 บิตของ IP ของคุณแม้ว่า 1 ISP จะลดลงก็ตาม เป้าหมายคือ ที่อยู่ 24 บิตของคุณจะสามารถใช้งานได้เสมอเนื่องจาก ISP ของคุณตกลงที่จะกำหนดเส้นทางที่อยู่ 24 บิตผ่านสายของพวกเขา สิ่งนี้ใช้ได้กับ VPN ด้วยเช่นกันเนื่องจากสิ่งที่คุณใช้สำหรับ VPN เป็นที่อยู่ 24 บิตไม่ใช่ IP อย่างใดอย่างหนึ่งจาก ISP ที่คุณเสียบเข้ากับซิสโก้ / หรือสวิตช์ของคุณ ณ จุดนั้นคุณจะต้องระวัง BGP FLAPPING โดยที่หากสายของคุณขึ้นและลงมากเนื่องจากมีสายรับ DOS ที่อยู่ DNS จะเปลี่ยนไปมากบนอินเทอร์เน็ตเซิร์ฟเวอร์ DNS จะทำการลบ IP โดยอัตโนมัติ นั่นนำไปสู่การบล็อก IP ของคุณ 24 บิต นั่นคือการโจมตี DOS ในโซลูชั่น BGP ณ จุดนั้นคุณจะต้องระวัง BGP FLAPPING โดยที่หากสายของคุณขึ้นและลงมากเนื่องจากมีสายรับ DOS ที่อยู่ DNS จะเปลี่ยนไปมากบนอินเทอร์เน็ตเซิร์ฟเวอร์ DNS จะทำการลบ IP โดยอัตโนมัติ นั่นนำไปสู่การบล็อก IP ของคุณ 24 บิต นั่นคือการโจมตี DOS ในโซลูชั่น BGP ณ จุดนั้นคุณจะต้องระวัง BGP FLAPPING โดยที่หากสายของคุณขึ้นและลงมากเนื่องจากมีสายรับ DOS ที่อยู่ DNS จะเปลี่ยนไปมากบนอินเทอร์เน็ตเซิร์ฟเวอร์ DNS จะทำการลบ IP โดยอัตโนมัติ นั่นนำไปสู่การบล็อก IP ของคุณ 24 บิต นั่นคือการโจมตี DOS ในโซลูชั่น BGP


0

ความกระจ่างเล็กน้อยที่นี่อย่างน้อยที่สุดในโลก Windows: คุณสามารถมีที่อยู่ IP ได้สองชื่อเป็นชื่อเดียวในไฟล์โฮสต์ เมื่อสอบถามที่อยู่ทั้งหมดจะถูกส่งกลับ แอป (เช่นเบราว์เซอร์) จะพยายามเชื่อมต่อกับแต่ละแอปจนกว่าจะทำการเชื่อมต่อ IOW มันจะลองใช้ที่อยู่ทั้งหมดก่อนหมดเวลา (นี่เป็นความเข้าใจผิดทั่วไปที่หลายคนเชื่อว่าจะลองที่อยู่ "ครั้งแรก" เท่านั้น)

คุณสามารถยืนยันสิ่งนี้ได้ด้วยการทดลองต่อไปนี้:

เพิ่มที่อยู่สองรายการขึ้นไปสำหรับโฮสต์ในไฟล์โฮสต์หนึ่งของจริงและของปลอมอื่น ๆ (ทำให้ที่อยู่ปลอมมีขนาดเล็กลงตามตัวอักษร) เปิดเบราว์เซอร์แล้วลองเชื่อมต่อกับชื่อโฮสต์ เรียกใช้ netstat - ไม่ในเวลาเดียวกัน คุณควรเห็นความพยายามเชื่อมต่อไปยังที่อยู่ปลอม (ค้างอยู่ใน SYN_SENT) ในที่สุดเบราว์เซอร์จะไปถึงที่อยู่ที่ดีและจะเชื่อมต่อ มีความล่าช้าในการเชื่อมต่อ แต่มันจะทำงาน


ไม่ได้บอกว่าคุณผิด แต่ฉันเพิ่งลองใช้งานบน Win 10 Pro โดยใช้ Chrome และมันไม่ทำงาน ฉันปรับแต่งไฟล์โฮสต์ของฉัน (และบันทึกไว้) จากนั้นจึงวิ่งipconfig /flushdnsเพื่อให้แน่ใจว่าการแก้ไขก่อนหน้านี้ถูกลืม พยายามเปิดเว็บไซต์ (ภายในเครื่องของฉัน) ในหน้าต่างที่ไม่ระบุตัวตนใน Chrome เพื่อป้องกันผลการแคช มันล้มเหลว (และฉันรอหลายนาทีเพื่อดูว่ามันจะทำงานได้หรือไม่) กดรีเฟรชเพื่อให้แน่ใจ จากนั้นฉันแสดงความคิดเห็น bogus IP จากไฟล์โฮสต์ของฉัน ฉันรีเฟรชหน้าเว็บและใช้งานได้ สิ่งเดียวกันกับ Firefox
Andrew Steitz

ดังนั้นมันอาจทำงานได้ตามแอปพลิเคชัน แต่ไม่สามารถใช้งานได้ในเบราว์เซอร์ที่ทันสมัยสองแห่ง
Andrew Steitz

-1

คุณไม่สามารถทำได้ด้วยไฟล์โฮสต์

คุณไม่สามารถทำได้ด้วย DNS อย่างใดอย่างหนึ่ง: คุณสามารถให้บริการหลาย IP สำหรับชื่อเดียว แต่เบราว์เซอร์จะเลือกหนึ่งในหลาย ๆ IP ลองและถ้าโฮสต์นี้หยุดทำงานเบราว์เซอร์จะแสดงข้อผิดพลาดการเชื่อมต่อ .

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


ไม่เป็นความจริงเกี่ยวกับ round robin: www-archive.mozilla.org/docs/netlib/dns.html โปรดทราบว่าไลค์ของ google จะส่งคืนระเบียน DNS หลายรายการ แม้จะมีการจัดลำดับใหม่ RFC3484 แต่ก็เห็นได้ชัดว่าช่วยส่งคืน IP หลาย ๆ รายการเป็นกลยุทธ์การเข้าแทนที่
BrianEss

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