По данной проблеме в результате поиска по инету нашел такие статьи:
http://weblogs.asp.net/pleloup/archive/2003/07/23/10451.aspx
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q229/5/64.asp&NoWebContent=1
http://sqljunkies.com/WebLog/orfda/archive/2003/10/22/295.aspxОказывается, это трабла не из-за ipnat или ФАЙРВОЛА, а проблема MS SQL и коннектов к нему. ASP юзает ADO connection, которое по умолчанию все коннекты запихивает в пул и потом их юзает, а не создает новые. Когда же мы долго коннект не используем, он закрывается (ms sql сервером, или в моем случае ipnat-ом).
Когда же яя перегружаю правила
ipnat -CF -f /etc/ipnat.rules
у меня все коннекты обрываются, а ASP же считает, что коннект установлен, и шлет по нему пакетики, которые разумеется не доходят до адресата (правила ipnat то уже нет). Отсюда и косяк. Принудительная перезагрузка страницы Ctrl+F5 несколько раз подряд спасала, но это не есть гуд.
Даже если правила ipnat не перегружать, через некоторое время бездействия правила правила трансляции из таблицы ipnat исчезали, и в самый неподходящий момент пользователь мог получить некрасивый дебаг вместо странички.
Как решить проблему? В вышеуказанных статьях есть много способов (или попыток). Я добавил параметр pooling=false в connction string. Теперь при создании коннекта asp не пытается использовать старый коннект, а создает новый. Все работает (пока тестировал мало, с 2-мя клиентами одновременно). Но вот что беспокоит: раньше таблица ipnat -l содержала немного правил (до 15), а сейчас они разрастаются (до 50 для 2-ух клиентов). Хотя у меня для маппинга выделено 10000 портов, не будет ли это недостаточным для нескольких десятков одновременных подключений? Вот например, была активность, потом бездействие:
[root@~]# ipnat -l | grep -c мой_порт
24
[root@~]# ipnat -l | grep -c мой_порт
9
[root@~]# ipnat -l | grep -c мой_порт
0
потом была активность на сайте:
[root@~]# ipnat -l
List of active sessions:
MAP xxxxxxxxxx 4601 <- -> yyyyyyyyyyy 20097 [zzzzzzzzzzz МОЙ_порт]
MAP xxxxxxxxxx 4600 <- -> yyyyyyyyyyy 20096 [zzzzzzzzzzz МОЙ_порт]
MAP xxxxxxxxxx 4599 <- -> yyyyyyyyyyy 20095 [zzzzzzzzzzz МОЙ_порт]
новые правила назначаются не с первого разрешенного порта (20000), а с какого то зафиксированнного значения (20097), хотя предыдущий ipnat -l / grep -c мой_порт говорил 0...
не заткнется ли ipnat ???