การตรวจหาเกตเวย์ที่ไม่ทำงานใน Windows 2008 Server


9

เมื่อเร็ว ๆ นี้เราได้ติดตั้ง HAProxy สำหรับ stackoverflow.com เราตัดสินใจที่จะใช้ TProxy เพื่อรักษาที่อยู่แหล่งที่มาสำหรับลูกค้าที่เชื่อมต่อดังนั้นบันทึกและโมดูล IIS อื่น ๆ ของเราซึ่งขึ้นอยู่กับที่อยู่ IP ของลูกค้าจะไม่ต้องการการแก้ไข ดังนั้นแพ็คเก็ตมาถึงการปลอมแปลงราวกับว่าพวกเขาได้มาจากที่อยู่ IP อินเทอร์เน็ตภายนอก แต่ในความเป็นจริงพวกเขามาจากท้องถิ่น HAProxy IP 192.168.xx IP ในเครือข่ายท้องถิ่นของเรา

เว็บเซิร์ฟเวอร์ของเราทั้งสองมี NIC สองตัว - ที่อยู่หนึ่งคลาส B ที่กำหนดเส้นทางได้บนอินเทอร์เน็ตสาธารณะที่มี IP แบบคงที่, DNS, และเกตเวย์เริ่มต้นและที่อยู่คลาส C ส่วนตัวที่ไม่สามารถกำหนดเส้นทางได้ HAProxy มีสองอินเตอร์เฟส - หนึ่งสาธารณะและหนึ่งส่วนตัวและดำเนินงานของแพ็กเก็ตการเราต์โปร่งใสระหว่างอินเตอร์เฟสและควบคุมทราฟฟิกไปยังเว็บเซิร์ฟเวอร์ที่เหมาะสม

อินเทอร์เน็ตอะแดปเตอร์อีเธอร์เน็ต:

   คำอธิบาย . . . . . . . . . . : การ์ดเครือข่าย # 1
   เปิดใช้งาน DHCP . . . . . . . . . . : ไม่
   เปิดใช้งานการกำหนดค่าอัตโนมัติ . . . : ใช่
   ที่อยู่ IPv4 . . . . . . . . . . : 69.59.196.217 (ที่ต้องการ)
   ซับเน็ตมาสก์ . . . . . . . . . . : 255.255.255.240
   เกตเวย์เริ่มต้น . . . . . . . . : 69.59.196.209
   เซิร์ฟเวอร์ DNS . . . . . . . . . . : 208.67.222.222
                                       208.67.220.220
   NetBIOS ผ่าน Tcpip . . . . . . . : เปิดใช้งานแล้ว

อะแดปเตอร์อีเธอร์เน็ตส่วนตัวในพื้นที่:

   คำอธิบาย . . . . . . . . . . : การ์ดเครือข่าย # 2
   เปิดใช้งาน DHCP . . . . . . . . . . : ไม่
   เปิดใช้งานการกำหนดค่าอัตโนมัติ . . . : ใช่
   ที่อยู่ IPv4 . . . . . . . . . . : 192.168.0.2 (ที่ต้องการ)
   ซับเน็ตมาสก์ . . . . . . . . . . : 255.255.255.0
   เกตเวย์เริ่มต้น . . . . . . . . : 192.168.0.50
   NetBIOS ผ่าน Tcpip . . . . . . . : เปิดใช้งานแล้ว

เราได้ปิดใช้งานการวัดอัตโนมัติในเว็บเซิร์ฟเวอร์แต่ละเครื่องและกำหนดให้คลาสสาธารณะ B ที่กำหนดเส้นทางได้เป็น 10 และอินเทอร์เฟซส่วนตัวของเรามีค่าเท่ากับ 20

เราได้ตั้งค่ารีจิสตรีคีย์ทั้งสองนี้ด้วย:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DeadGWDetectDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"EnableDeadGWDetect"=dword:00000000

ประมาณสองครั้งต่อวันเราพบปัญหาที่หนึ่งในเว็บเซิร์ฟเวอร์ไม่สามารถติดต่อ DNS หรือทำการเชื่อมต่อกับเซิร์ฟเวอร์อื่น ๆ บนอินเทอร์เน็ตสาธารณะ

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

  1. มีวิธีที่จะทราบว่าการตรวจจับเกตเวย์ที่ทำงานหรือแม้กระทั่งตัวเลือกในเซิร์ฟเวอร์ Windows 2008 หรือไม่?

  2. ถ้าเป็นเช่นนั้นมีวิธีปิดการใช้งานการตรวจหาเกตเวย์ที่ไม่ทำงานในเซิร์ฟเวอร์ Windows 2008 หรือไม่?

  3. หากไม่มีเหตุผลอื่นที่ทำให้เราขาดความสามารถในการแก้ไข DNS หรือเชื่อมต่อในช่วงเวลาสั้น ๆ


1
ในขณะที่การตั้งค่านี้ถูกขมวดคิ้วบางครั้ง (ดูblogs.technet.com/timmcmic/archive/2009/04/26/ … ) มันทำงานได้ดีมากสำหรับเรา - การรับส่งข้อมูลทั้งหมดมาจาก HAProxy ไปยังไซต์ IIS ของเราดูเหมือนว่ายังมาจาก ที่อยู่ IP ดั้งเดิม วิธีนี้ช่วยประหยัดเวลาได้มากเนื่องจากเราต้อง (ค้นหาวิธีการ) กำหนดค่า IIS และปลั๊กอินจำนวนมหาศาลเพื่อใช้ส่วนหัว HTTP_X_FORWARDED_FOR
Jarrod Dixon

1
ทำไมคุณถึงตั้งค่าเกตเวย์บนอินเตอร์เฟส 192.168.0.2 คุณสามารถกำหนดค่าเกตเวย์เริ่มต้นที่ว่างเปล่า (และอันที่จริงนี่คือสิ่งที่ Windows แจ้งให้คุณทำเมื่อคุณมีสองอินเตอร์เฟส)
Portman

@Portman - เนื่องจากกล่องเว็บของเราเห็นการรับส่งข้อมูลด้วย IP ที่มาจากลูกค้าไม่เสียหายการตอบสนองจะไม่ถูกส่งไปยังเครือข่ายของเรา - นั่นคือสาเหตุที่เราต้องมีเกตเวย์เริ่มต้นไปยังกล่อง HAProxy ของเรา
Jarrod Dixon

@Jarrod - การกำหนดค่านั้นดูน่าสงสัย ถ้าคุณต้องการเรียกใช้เว็บไซต์ที่ไม่สมดุลบนเว็บเซิร์ฟเวอร์นั้น การตอบสนองจะถูกส่งผ่าน HAProxy? คุณจะจัดการกับบางสิ่งเช่นเดสก์ท็อประยะไกลได้อย่างไร ฉันรู้ว่าสิ่งนี้ไม่ได้ตอบคำถาม แต่ดูเหมือนว่าคุณกำลังทำผิดซึ่งเป็นสิ่งที่ daivdsmalley พูดอย่างสุภาพ
Portman

4
@ Jeff / Geoff / Jarrod - ฉันเกลียดที่จะระบุชัดเจน แต่พวกคุณเป็น devs ซอฟต์แวร์ทำไมไม่จ้างคนที่เป็นผู้เชี่ยวชาญสำหรับวันเพื่อแก้ไข? ทุกอย่างดีมากที่จะทำให้มือของคุณสกปรก แต่มีช่องว่างความรู้ที่ชัดเจนที่นี่มันส่งผลกระทบต่อธุรกิจเป็นระยะ ๆ และคุณได้ใช้เวลาอันมีค่าของคุณอย่างชัดเจนโดยไม่ต้องใช้ทักษะหลักของคุณซึ่งเป็นการพัฒนา เชื่อฉันเถอะหาคนที่จะแก้ไขแล้วเลือกสมองของเขา / เธอหลังจากที่คุณใช้งานได้แล้ว แม้ในขณะที่ webhosters เราจำเป็นต้องนำผู้คนเข้ามาเชื่อมช่องว่างเหล่านี้เมื่อภารกิจสำคัญ / ส่งผลกระทบต่อบริการ
เคฟ

คำตอบ:


5

การตรวจจับ Dead Gateway DWORDs เหล่านั้นไร้ประโยชน์ใน Windows Server 2008 เหตุผลเดียวที่มีคือเหตุผลด้านความเข้ากันได้ ไดรเวอร์ TCP / IP และส่วนประกอบเราเตอร์ Windows จะไม่ค้นหาค่าเหล่านี้อีกต่อไป

ฉันสงสัยว่าฟีเจอร์นี้จะถูกนำไปใช้ในการปรับอัตโนมัติซึ่งเปิดตัวใน Windows Vista ลองใช้คำสั่งต่อไปนี้ในพร้อมท์คำสั่งแบบยกระดับ (และรีบูต):

netsh int tcp ตั้งค่า global autotuninglevel = ถูกปิดใช้งาน


อัปเดต ( เพิ่ม 13 กันยายน 2009 @ 7: 58PM EST )

หากไม่ได้ผลเราจะต้องใช้เอาต์พุตการวิเคราะห์เพิ่มเติม เริ่มการติดตาม (แบบวงกลม) ด้วยสถานการณ์ NetConnection หรือ LAN และปล่อยให้มันทำงานต่อไปจนกว่าปัญหาจะเกิดขึ้น

สถานการณ์เริ่มต้นการติดตาม netsh = NetConnection maxSize = 512

(ตัวอย่าง: เริ่มสถานการณ์จำลองการติดตาม NetConnection ด้วยขนาดบันทึกการติดตามสูงสุด 512MB)

คุณสามารถเปิดการติดตามผลในการตรวจสอบเครือข่าย 3.3เพียงให้แน่ใจว่าคุณติดตั้งparsers ล่าสุด


เป็นความคิดที่ดี แต่ก็ไม่ได้ผลเช่นกัน .. เพิ่งประสบปัญหาจราจรติดขัด 5 นาทีซึ่งแก้ไขได้เองอย่างลึกลับ
Jeff Atwood

@ เจฟฟ์: อืมเราต้องการข้อมูลเพิ่มเติมกัปตัน! ดูการแก้ไขด้านบน
Rafael Rivera

5

เราไม่สามารถบรรลุผลสรุปได้ว่าทำไมเราไม่สามารถควบคุมพฤติกรรมของการตรวจจับ Dead Gateway

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

  [ soweb1 ] 69.59.196.220, GW=69.59.196.211 [haproxy]
       |
       +---- [haproxy] 69.59.196.211, GW 69.59.196.209
       |
    [ gw ] 69.59.196.209

ขณะนี้มีเพียงเกตเวย์เริ่มต้นเดียวเท่านั้นที่ขจัดปัญหาของเราเนื่องจากการตรวจหาเกตเวย์เริ่มต้นที่ตายแล้วไม่ได้ใช้งานอีกต่อไป


4

ฉันจะถามว่าทำไมคุณถึงต้องเปลี่ยนเกตเวย์เริ่มต้นให้เป็น HAproxy เลย โดยทั่วไปคุณไม่ควรเปลี่ยนเกตเวย์เริ่มต้นเลยเว้นแต่ว่าคุณกำลังชี้ไปที่การตั้งค่า N + 1 ที่มีความสามารถสูงซึ่ง IP เกตเวย์สามารถ failover ไปยังเราเตอร์ / เครื่องอื่นในกรณีที่เกิดเหตุการณ์ไม่ดีขึ้น หากมีสิ่งใดเกิดขึ้นกับเครื่อง HAproxy ของคุณและคุณไม่มีการเข้าถึงนอกแถบความถี่เว็บเซิร์ฟเวอร์ก็จะส่งอินเทอร์เน็ต

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

  1. เพิ่ม "option forwardfor ... " ในการกำหนดค่า HAproxy ของคุณ
  2. ติดตั้งตัวกรอง x-forwarded-for ISAPI
  3. ลบ tproxy ออกจากการตั้งค่าของคุณ
  4. เปลี่ยนเกตเวย์เริ่มต้นกลับไปเป็นเกตเวย์เดียวกันกับที่คุณใช้ก่อนหน้านี้ด้วยการเชื่อมต่ออินเทอร์เน็ตโดยตรง

ฉันไม่มีเครื่อง Windows ที่จะทดสอบสิ่งนี้ แต่ฉันเชื่อว่ามันน่าจะส่งผลที่ต้องการโดยไม่ต้องสูญเสียการเชื่อมต่อที่ไม่พึงประสงค์


ฉันแค่เห็นความคิดเห็นของคุณกับคำถามดั้งเดิมเกี่ยวกับการตั้งค่านี้ แต่ผมจะสงสัย "มันทำงาน awesomely สำหรับเรา" ถ้าเซิร์ฟเวอร์ของคุณจะสูญเสียการเชื่อมต่ออินเทอร์เน็ต :)
davidsmalley

3
อีกวิธีหนึ่งคุณสามารถดูโซลูชันที่มีประสิทธิภาพมากขึ้นเช่น ldirectord + heartbeat ซึ่งเพิ่งเปลี่ยนเส้นทางการรับส่งข้อมูลในระดับเคอร์เนลเนื่องจากไม่มีพร็อกซี่เกี่ยวข้องเลย ฉันใช้การตั้งค่านี้อย่างกว้างขวางและใช้งานได้ดี linuxvirtualserver.org/docs/ha/heartbeat_ldirectord.html
davidsmalley

เราได้ดูที่การใช้x-forwarded-forส่วนหัวและตัวกรอง IIS เพื่อแก้ไขบันทึก แต่เราไม่ทราบว่า (หรือถ้า) โมดูล IIS ทางเลือกอื่น ๆ ของเรายังใช้ส่วนหัวในการดำเนินการของพวกเขาได้อย่างไร
Jarrod Dixon

ขอบคุณสำหรับลิงค์linuxvirtualserver.org/HighAvailability.html - ข้อมูลที่น่าทึ่ง! ฉันไม่รู้เรื่องเหล่านี้ (ซึ่งเป็นเหตุผลว่าทำไมฉันไม่ได้เป็นคนตั้งค่าทั้งหมดนี้!) แต่ฉันพยายามเรียนรู้ให้เร็วที่สุด บางทีเราสามารถใช้ heartbeat + ldirectord คล้ายกับวิธีlinuxvirtualserver.org/docs/ha/ultramonkey.htmlทำกับ HAProxy ที่เราโปรดปราน
Jarrod Dixon

-1

เมื่อมีการเชื่อมต่ออินเทอร์เน็ต (โดยปกติ) จากนั้นเกตเวย์เริ่มต้นควรใช้เพื่อแสดงเส้นทางไปยังอินเทอร์เน็ตเท่านั้น หากคุณมีเกตเวย์เริ่มต้นหลายรายการที่กำหนดไว้เราเตอร์ OS จะไม่สามารถตัดสินใจได้ว่าจะใช้เกตเวย์ใดและหากเกตเวย์เริ่มต้นตัวใดตัวหนึ่งชี้ไปที่ Cul-de-Sac (เช่น LAN หลายส่วนของคุณ) แพ็กเก็ตที่ส่งต่อไปที่นั่น จะไม่ทำให้มัน

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