Сегодняшее утро у меня было очень познавательным. Наши, гм, постоянные партнеры проинсталлировали себе новый сервер и перенесли на него свои сайтики.
С вечера проверил — все работает. Радуюсь, ложусь спать. Просыпаюсь от звонка — из офиса мне рассказывают, что сайты из внутренней сети недоступны, а наши, гм, постоянные партнеры объясняют, что у них все работает, проблема в нашем кривом прокси-сервере и поэтому доброе утро, Дмитрий Алексеич.
Начинаю диагностировать проблему и мрачно охуеваю несколько удивляюсь. В DMZ cтоят рядом две однотипные машины, воткнутые в один свитч, с одинаковыми настройками сети и даже IP-адреса у них соседние. С одной — все хорошо. С другой — сайты недоступны. ICMP проходят с обеих машин. Беру в руки tcpdump выясняю, что пакеты уходят нормально, но на одну машину ответы приходят, а на другую — нет.
Выяснилось, в общем, что красавцы, проинсталлировав сервер, решили заняться его оптимизацией и, в частности, выставили net.ipv4.tcp_tw_recycle в 1. Соответственно, клиенты, расположенные за NATом, играют в игру «кто первый встал — того и тапки» — timestamps-то через NAT идут разные, с одного-то ip.
Вежливо интересуюсь, нахуя, собственно, такое счастье с какой великой целью это было сделано, а мне и отвечают человеческим голосом, что, во-первых для борьбы с DDoS-атаками (если всех клиентов за NAT-ами отключить от сервиса — большая выгода будет, ага), а, во-вторых — для экономии памяти. На этом месте впадаю в великое удивление, по сю пору в нем продолжаю быть и из него вам пишу, извините за неровный почерк.
Мораль — если берешь какой-нибудь HOWTO про «настроить сервер против DDoS» — думай, что там написано, а не переписывай конфиги копипейстом.
Когда я спросила у Васи, что же случилось, Вася сделал такое лицо, как будто только что съел живого червяка, и сказал мрачно: «Оптимизировали».
И вот тогда я все поняла.
А вообще для всех твоих постингов о работе есть один универсальный заголовок. «Началось в колхозе утро».
Это отличный тэг, спасибо.
Это отличный тэг, спасибо.
Когда я спросила у Васи, что же случилось, Вася сделал такое лицо, как будто только что съел живого червяка, и сказал мрачно: «Оптимизировали».
И вот тогда я все поняла.
А вообще для всех твоих постингов о работе есть один универсальный заголовок. «Началось в колхозе утро».
Я что-то не въехал, чтО, собственно, произошло.
Насколько я понимаю, tcp_tw_recycle влияет на скорость освобождения сокетов, находящихся в состоянии TIME_WAIT, и таким образом, позволяет избежать исчерапния сокетов, которые злыи хакиры понаоткрывали в большом количестве, не спеша подтверждать закрытие соединений.
Но в это состояние серверный сокет впадает только в процессе закрытия соединения, уже после окончания передачи данных. То есть, максимум, могут не доехать какие-то данные, но не так, чтоб пакеты вообще в клиента не отправлялись..
Или я что-то не так понял?
Оно еще смотрит на timestamp, который, понятно, может быть различным. Особенно тогда, когда на одной из подопытных машин (mea culpa!) отваливается ntp.
А timestamp тут каким боком? Таймауты в сокетах же считаются самим сервером.
А timestamp тут каким боком? Таймауты в сокетах же считаются самим сервером.
Оно еще смотрит на timestamp, который, понятно, может быть различным. Особенно тогда, когда на одной из подопытных машин (mea culpa!) отваливается ntp.
Я что-то не въехал, чтО, собственно, произошло.
Насколько я понимаю, tcp_tw_recycle влияет на скорость освобождения сокетов, находящихся в состоянии TIME_WAIT, и таким образом, позволяет избежать исчерапния сокетов, которые злыи хакиры понаоткрывали в большом количестве, не спеша подтверждать закрытие соединений.
Но в это состояние серверный сокет впадает только в процессе закрытия соединения, уже после окончания передачи данных. То есть, максимум, могут не доехать какие-то данные, но не так, чтоб пакеты вообще в клиента не отправлялись..
Или я что-то не так понял?