dariusii
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Решение проблемы вылета из сетки. У некоторых провайдеров, через некоторое время после подключения, выста теряет соединение с роутером такого провайдера. На каких либо других ОС такого не происходит. Вырезка наблюдений одного человека: Виста регулярно шлет гейту ARP-запросы (судя по всему она так тестирует его жизнеспособность, что подтверждается словами: Vista also resolves the problem of lack of fallback for dead gateway detection in previous versions. Vista uses a similar kind of method that IPv6 uses for detecting unreachable neighbors on IPv4 networks, which essentially involves monitoring TCP sessions and exchanging ARP packets. The upshot of this is that Vista is more efficient than previous platforms in detecting when a remote router goes down. When it detects this situation, the stack switches to the next default gateway in the list, but the stack then continues to monitor the previous gateway and if it returns to life, then Vista switches back to the primary gateway. This makes it easier for enterprises to ensure optimal connectivity with remote branch offices by ensuring that backup routers will only be used when they're needed and not a minute more). При этом ни одного ответа от гейта на эти ARP-запросы я не увидел. Секунд через 30 (видимо это как раз интервал после которого гейт считается мертвым) запись для гейта в кэше ARP превращается в что-то типа: 10.64.1.1 00-00-00-00-00-00 invalid. Все, с этого момента сеть работать перестает. Статическое прописывание ARP для гейта решает проблему. Итак, временный workaround: 0) пока еще работает arp -a -v и записать MAC-адрес модема. 1) ipconfig /release 2) arp -d 10.64.1.1 (подставить тут свой адрес гейта). 3) ipconfig , посмотреть "приватный" адрес интерфейса (что-то типа 169.a.b.c) 4) arp -s <адрес_гейта> <MAC> <приватный_адрес_интрефейса> 5) arp -a -v проверить, что появилась статическая запись для гейта 6) ipconfig /renew Все, можно жить. или же создать js файл следущего содержимого: Код: var shell = new ActiveXObject("WScript.Shell"); //first refresh arp WScript.Echo("Renewing IP address..."); shell.Run("ipconfig /release", 10, true); shell.Run("ipconfig /renew", 10, true); //locate interface with bad arp and save MAC address var exec = shell.Exec("arp -a -v"); while (exec.Status == 0) { WScript.Sleep(100); } var arpData = exec.StdOut.ReadAll(); var arpRx = /^[\s\S]*interface:\s*10\.6.*\s*---\s*([0-9A-Fx]+)[\s\S]*?(10\.6[0-9.]+)\s+([-0-9A-F]+)[\s\S]*$/i var results = arpData.match(arpRx); var itfNum = results[1]; var gateIP = results[2]; var macAddr = results[3]; WScript.Echo("Interface: " + itfNum); WScript.Echo("Gateway: " + gateIP); WScript.Echo("Gateway MAC: " + macAddr); WScript.Echo("Releasing IP address...") shell.Run("ipconfig /release", 10, true); //wait for arp deletion WScript.Echo("Waiting for ARP record deletion..."); var arpCleanRx = new RegExp("^[\\s\\S]*interface:[\\s\\S]*?" + gateIP + "[\\s\\S]*$", "i"); while (true) { shell.Run("arp -d " + gateIP, 10, true); exec = shell.Exec("arp -a -v"); while (exec.Status == 0) { WScript.Sleep(100); } arpData = exec.StdOut.ReadAll(); if (!arpCleanRx.test(arpData)) { break; } WScript.Sleep(5000); } WScript.Echo("Looking up for a private interface IP..."); var newItfAddrRx = new RegExp("^[\\s\\S]*interface:\\s*([0-9\\.]+)\\s*---\\s*" + itfNum + "[\\s\\S]*$", "i"); //wait for interface ip update while (true) { exec = shell.Exec("arp -a -v"); while (exec.Status == 0) { WScript.Sleep(100); } arpData = exec.StdOut.ReadAll(); results = arpData.match(newItfAddrRx); if (results != null) { break; } WScript.Sleep(3000); } var newItfAddr = results[1]; WScript.Echo("Private interface IP: " + newItfAddr); WScript.Echo("Adding static ARP record..."); shell.Run("arp -s " + gateIP + " " + macAddr + " " + newItfAddr, 10, true); WScript.Echo("Renewing IP..."); shell.Run("ipconfig /renew", 10, true); WScript.Echo("All done."); | и положить в c:\windows\system32\ Предположим, файл будет называться arpfix.js Затем, от админа запускать такой файл, при загрузке системы так: cscript arpfix.js все. интерфейс вылечен. Косыль. зато, работает. | Всего записей: 2487 | Зарегистр. 08-11-2003 | Отправлено: 20:37 12-05-2007 | Исправлено: dariusii, 02:36 13-05-2007 |
|