Deteksi gateway mati pada Windows 2008 Server

9

Kami baru-baru ini mengimplementasikan HAProxy untuk stackoverflow.com. Kami memutuskan untuk menggunakan TProxy untuk mempertahankan alamat sumber untuk koneksi klien sehingga log kami dan modul IIS lainnya yang bergantung pada alamat IP klien tidak akan memerlukan modifikasi. Jadi paket-paket itu tiba dipalsukan seolah-olah mereka datang dari alamat IP internet eksternal, padahal sebenarnya mereka datang dari IP HAProxy 192.168.xx lokal di jaringan lokal kami.

Kedua server web kami memiliki dua NIC - satu alamat kelas B yang dapat dirutekan di internet publik dengan IP statis, DNS, dan gateway standar dan satu alamat private class C unroutable yang dikonfigurasi dengan gateway default yang diarahkan ke IP pribadi untuk HAProxy. HAProxy memiliki dua antarmuka - satu publik dan satu pribadi dan melakukan pekerjaan paket routing secara transparan antara antarmuka dan mengarahkan lalu lintas ke server web yang sesuai.

Internet adapter ethernet:

   Deskripsi . . . . . . . . . . : kartu jaringan # 1
   DHCP Diaktifkan. . . . . . . . . . . : Tidak
   Konfigurasi Otomatis Diaktifkan. . . . : Iya
   Alamat IPv4. . . . . . . . . . . : 69.59.196.217 (Lebih disukai)
   Subnetmask . . . . . . . . . . . : 255.255.255.240
   Gateway Default. . . . . . . . . : 69.59.196.209
   Server DNS. . . . . . . . . . . : 208.67.222.222
                                       208.67.220.220
   NetBIOS melalui Tcpip. . . . . . . . : Diaktifkan

Adaptor Ethernet Private Local:

   Deskripsi . . . . . . . . . . : kartu jaringan # 2
   DHCP Diaktifkan. . . . . . . . . . . : Tidak
   Konfigurasi Otomatis Diaktifkan. . . . : Iya
   Alamat IPv4. . . . . . . . . . . : 192.168.0.2 (Lebih disukai)
   Subnetmask . . . . . . . . . . . : 255.255.255.0
   Gateway Default. . . . . . . . . : 192.168.0.50
   NetBIOS melalui Tcpip. . . . . . . . : Diaktifkan

Kami telah menonaktifkan metrik otomatis pada masing-masing server web dan menetapkan metrik 10 kelas publik B yang dapat dialihkan dan antarmuka pribadi kami metrik 20.

Kami juga telah menetapkan kedua kunci registri ini:

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

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

Sekitar dua kali per hari kami melihat masalah di mana salah satu server web tidak dapat menghubungi DNS atau membuat koneksi ke server lain di internet publik.

Kami menduga deteksi gateway mati secara palsu mendeteksi pemadaman pada gateway publik dan mengalihkan semua lalu lintas ke gateway pribadi yang tidak memiliki akses DNS pada saat ini tetapi tidak memiliki cara untuk memverifikasi ini.

  1. Apakah ada cara untuk mengetahui apakah deteksi gerbang mati berjalan atau bahkan opsi di server Windows 2008?

  2. Jika demikian, apakah ada cara untuk menonaktifkan deteksi gerbang mati di server Windows 2008?

  3. Jika tidak, adakah alasan lain mengapa kita kehilangan kemampuan untuk menyelesaikan DNS atau terhubung untuk waktu yang singkat?

Geoff Dalgas
sumber
1
Meskipun pengaturan ini kadang-kadang tidak disukai (lihat blogs.technet.com/timmcmic/archive/2009/04/26/… ), itu bekerja sangat baik bagi kami - semua lalu lintas yang datang dari HAProxy ke situs IIS kami sepertinya masih berasal dari alamat IP asli. Ini menghemat waktu yang tidak terhitung, karena kami harus (mencari tahu cara) mengonfigurasi IIS dan plug-in yang sangat banyak untuk menggunakan header HTTP_X_FORWARDED_FOR.
Jarrod Dixon
1
Mengapa Anda memiliki gateway yang dikonfigurasi pada antarmuka 192.168.0.2? Anda dapat mengkonfigurasi gateway default kosong (dan sebenarnya inilah yang Windows minta Anda lakukan ketika Anda memiliki dua antarmuka).
Portman
@ Portman - karena kotak web kami melihat lalu lintas dengan IP klien asal berasal, respons tidak akan dikirim ke jaringan kami - itulah sebabnya kami harus memiliki gateway default ke kotak HAProxy kami.
Jarrod Dixon
@Jarrod - konfigurasi itu tampak mencurigakan. Bagaimana jika Anda ingin menjalankan situs web yang tidak seimbang di server web itu? Respons akan dialihkan melalui HAProxy? Bagaimana Anda menangani sesuatu seperti desktop jarak jauh? Saya menyadari ini tidak menjawab pertanyaan, tetapi sepertinya ini adalah kasus You're Doing It Wrong, yang dikatakan daivdsmalley (dengan sopan).
Portman
4
@ Jeff / Geoff / Jarrod - Saya benci menyatakan yang sudah jelas, tetapi Anda adalah pengembang perangkat lunak, mengapa tidak menyewa seseorang yang spesialis untuk memperbaiki satu hari? Ini semua sangat bagus untuk membuat tangan Anda kotor tetapi ada kesenjangan pengetahuan yang jelas di sini, itu sebentar-sebentar memengaruhi bisnis dan Anda jelas menghabiskan cukup banyak waktu berharga tanpa memanfaatkan keterampilan inti Anda yang merupakan pengembangan. Percayalah, mintalah seseorang untuk memperbaikinya dan kemudian pilih otaknya setelah Anda berhasil. Sial, bahkan sebagai hosting web kita perlu mengajak orang-orang untuk menjembatani kesenjangan ini ketika itu mempengaruhi misi / layanan.
Kev

Jawaban:

5

Mereka DWORD Deteksi Gateway Mati tidak berguna pada Windows Server 2008. Satu-satunya alasan mereka ada adalah karena alasan kompatibilitas. Driver TCP / IP dan komponen router Windows tidak mencari nilai-nilai ini lagi.

Saya menduga fitur ini dimasukkan ke Auto-Tuning, yang memulai debutnya di Windows Vista. Coba jalankan berikut ini di prompt perintah yang ditinggikan (dan reboot):

netsh int tcp set global autotuninglevel = dinonaktifkan


Pembaruan ( ditambahkan 13 September 2009 @ 7: 58PM EST )

Jika itu tidak berhasil, kami akan membutuhkan lebih banyak hasil diagnostik. Mulai jejak (melingkar) dengan skenario NetConnection atau LAN dan biarkan terus berjalan sampai masalah terjadi.

skenario mulai netsh trace = NetConnection maxSize = 512

(Contoh: Memulai skenario pelacakan NetConnection, dengan ukuran log jejak maksimum 512MB)

Anda dapat membuka jejak yang dihasilkan di Network Monitor 3.3 , pastikan Anda menginstal parser terbaru .

Rafael Rivera
sumber
ide yang bagus, tetapi sepertinya juga tidak berhasil .. baru saja mengalami outage lalu lintas keluar 5 menit - yang secara misterius memperbaiki sendiri.
Jeff Atwood
@ Jeff: Hmm, kami membutuhkan lebih banyak data Kapten! Lihat edit di atas.
Rafael Rivera
5

Kami tidak dapat mencapai hasil konklusif mengapa kami tidak dapat mengontrol perilaku Deteksi Gateway Mati.

Daripada menghabiskan banyak waktu untuk memecahkan masalah ini, kami memilih untuk membuat lalu lintas rute instance HAProxy kami ke gateway keluar dan mengatur kedua server web gateway default ke IP haproxy dan menghapus alamat gateway internal.

  [ 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

Sekarang hanya ada satu gateway default yang menghilangkan masalah kami karena deteksi gateway default mati tidak lagi digunakan.

Geoff Dalgas
sumber
4

Saya akan mempertanyakan mengapa Anda bahkan perlu mengubah gateway default menjadi HAproxy sama sekali. Secara umum Anda tidak boleh mengubah gateway default Anda sama sekali kecuali Anda mengarahkannya pada pengaturan N + 1 yang sangat tersedia di mana IP gateway dapat failover ke router / mesin lain jika terjadi sesuatu yang buruk. Jika sesuatu terjadi pada mesin HAproxy Anda dan Anda tidak memiliki akses out-of-band, maka server web hanya akan turun dari internet.

Karena saya percaya alasan Anda mungkin melakukan ini adalah karena Anda menggunakan Tproxy dalam pengaturan Anda untuk membuat alamat IP klien muncul di log Anda dan bukan IP server proxy, dapatkah saya menyarankan Anda melakukan ini sebagai gantinya

  1. Tambahkan "opsi forwardfor ..." ke konfigurasi HAproxy Anda
  2. Instal filter ISAPI x-forwarded-for
  3. Hapus tproxy dari pengaturan Anda
  4. Ubah gateway default kembali ke gateway yang sama yang Anda gunakan sebelumnya dengan koneksi langsung internet

Saya tidak memiliki mesin Windows untuk menguji ini, tetapi saya percaya ini akan menghasilkan efek yang diinginkan tanpa kehilangan konektivitas yang tidak diinginkan.

davidsmalley
sumber
Saya baru saja melihat komentar Anda pada pertanyaan awal mengenai pengaturan ini. Namun, saya akan ragu "bekerja awesomely bagi kita" jika server Anda kehilangan konektivitas internet :)
davidsmalley
3
Atau, Anda bisa melihat solusi yang jauh lebih kuat seperti ldirectord + heartbeat yang baru saja mengalihkan lalu lintas di tingkat kernel, karena itu tidak ada proxy yang terlibat sama sekali. Saya menggunakan pengaturan ini secara luas dan berfungsi dengan baik. linuxvirtualserver.org/docs/ha/heartbeat_ldirectord.html
davidsmalley
Kami telah melihat penggunaan x-forwarded-forheader itu dan filter IIS untuk mengubah log, tetapi kami tidak tahu bagaimana (atau jika) modul IIS opsional kami yang lain juga menggunakan header itu dalam operasinya.
Jarrod Dixon
Terima kasih untuk tautan linuxvirtualserver.org/HighAvailable.html - informasi di sana luar biasa! Saya sangat tidak tahu tentang hal-hal ini (itulah sebabnya saya bukan orang yang mengatur semua ini!), Tetapi saya mencoba untuk belajar secepat mungkin. Mungkin kita bisa menggunakan heartbeat + ldirectord mirip dengan bagaimana linuxvirtualserver.org/docs/ha/ultramonkey.html melakukannya dengan HAProxy favorit kami.
Jarrod Dixon
-1

Ketika akses internet terlibat (biasanya) maka gateway default seharusnya hanya digunakan untuk menunjukkan jalur ke INTERNET. Jika Anda memiliki beberapa gateway default yang ditentukan, router OS tidak dapat memutuskan mana yang akan digunakan, dan jika satu gateway default menunjukkan cul-de-sac (mis. LAN multi-segmen Anda) maka paket yang diteruskan ke sana untuk internet adalah tidak akan berhasil.

Adrien
sumber