ipfw + natd - обрывы tcp сессий, куда копать?

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение neko » 2009-06-17 19:36:20

Имееться 2 хоста freebsd 6.2-6.4 со связкой ipfw+natd периодически замечаю обрывы сессий сквозь нат. Тобишь выкачать с фтп изошку куском более 120-170 мег без докачки практически невозможно. Также дружно начинают жаловаться геймеры с одинаковым симптомом "рвет каждых 10-15-20 минут". На фоне этого пакетлоза нету - пускаем пинг подальше на несколько суток - максимум пара пакетов теряеться что считаю отличным показателем. Пока что на скорую руку поднял по несколько экземпляров natd на алиасах и свободных сетевухах и рассовываю туда дивертами особо чувствительный траффик типа всяких мморпг итд на которые более всего жалуються юзера. Но это естественно не вариант и конечно же плохо.

Среднестатистический load averages: 0.13, 0.23, 0.35 тобишь не зашкаливают как таковые, natd кудою ходит большинство траффика тоже в топе не проявляют чудес нагруженности. Ладно. Раньше списывал на здоровый поток (на каждом из хостов в среднем 20-30 мбит трафика при 300-500 юзерами за этим же натом) и славу natd(все понимаю, юзерспейс, переключение контекста итд..).

Все это можно было объяснить до того момента когда пришло время выносить на новый хост небольшой сегмент сети. Для начала переехало туда около сотни пользователей для долизывания нового биллинга, из них 20-30 постоянно онлайн (читай видим их деятельность в trafshow). Казалось бы все должно быть отлично хоть тут (юзеров немного, чистым интернетом там ходит 2-5 мбит/с, весь остальной траффик не существенен так как ходит не сквозь нат, да и его не много). Теперь сижу изумляюсь тому как даже при таких условиях докачать без докачки изошку (принял для себя как тест) более чем до 90-120 мег невозможно.

Гуглил - sysctl кручен во все стороны - абсолютно никакого видимого еффекта.
Теперь изгуглил весь гугл, обчитался много-много "умных советов" про "переходи на ipnat/ng_nat/pfnat - natd зло итд". Но практической возможности вот так вот просто "взять и перейти" на pfnat как минимум на одном из хостов допустим попросту нету - себестоимость такого перехода и сложность реализации в силу наличия клозедсорцного биллинга для одного из сегментов сети будет мягко говоря очень неприятной. Естественно что при скоростях выше 30-40 мбит/с я вижу единственный способ - заиметь АС и вообще отказаться от ната. Но это в ближайших перспективах. С другой стороны я просто не понимаю - что связка ipfw+natd не способна вытянуть 2-5 мбит живого траффика при 20-30 пользователях? Естественно способна, причем по заверениям умных людей конец ей приходит при тех же 35-40 мбитах потока. Итого вопрос - что я делаю не так? И в каком направлении следует порыть причину _внезапных_ дропов сессий?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение hizel » 2009-06-17 21:03:41

пахнет хреновым аплинком
няшный natd работает как швейцарские часы, гарантирую :-)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение neko » 2009-06-17 21:41:23

пахнет хреновым аплинком
- отказываюсь верить :)

Без НАТа единичный виндовый хост воткнутый на прямую на сим аплинке с назначенной реальной айпишкой отлично льет на предельной скорости изошки любого размера ясно без обрывов. Кроме того няшные natd которые понаподнимались рядышком проблеме не подвержены практически - тудою тожно можно комфортно лить изошки :)
няшный natd работает как швейцарские часы, гарантирую :-)
Ну это зависит думаю от руконогости - в данном случае грешу на собственную. Только банально не понимаю где может быть подвох.

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение neko » 2009-06-18 14:31:20

Посидел, мыслей воообще нету - изошки далее не качаються :\

Все конструктивно вроде, бы безупречно

cat /etc/rc.conf | grep default
defaultrouter="192.168.3.1"
#(читаем резервный канал)


NATD висят следующим образом:

/sbin/natd -u -p 8671 -a xxx.xxx.xxx.122 - основной канал
/sbin/natd -u -p 8673 -a 192.168.1.3 - все тот же основной канал но сквозь другой хост
/sbin/natd -u -p 8672 -a 192.168.3.5 - резервный канал


FwCMD="/sbin/ipfw -q"

${FwCMD} -f flush


# Networks define

# тут живут юзера
${FwCMD} table 2 add 172.90.0.0/21

# Это наши реальные и нереальные айпишки с сервисами
# к которым не будем натить
${FwCMD} table 9 add xxx.xxx.xxx.116
${FwCMD} table 9 add xxx.xxx.xxx.120
${FwCMD} table 9 add xxx.xxx.xxx.115
${FwCMD} table 9 add xxx.xxx.xxx.117
${FwCMD} table 9 add xxx.xxx.xxx.118
${FwCMD} table 9 add xxx.xxx.xxx.119
${FwCMD} table 9 add xxx.xxx.xxx.121
${FwCMD} table 9 add xxx.xxx.xxx.122
${FwCMD} table 9 add 192.168.0.0/24

#security
${FwCMD} add 101 allow all from 172.90.0.1 to any
${FwCMD} add 101 allow all from any to 172.90.0.1
${FwCMD} add 101 allow all from 172.16.0.1 to any
${FwCMD} add 101 allow all from any to 172.16.0.1
${FwCMD} add 102 deny all from table\(2\) to 192.168.0.0/24
${FwCMD} add 102 deny all from 192.168.0.0/24 to table\(2\)

# ну мы же хотим чтобы пользователи могли свою статистику проверить даже если денег нету
${FwCMD} add 103 allow all from table\(2\) to me dst-port 80
${FwCMD} add 103 allow all from table\(2\) to me dst-port 53
${FwCMD} add 104 deny all from table\(2\) to me dst-port 139
${FwCMD} add 104 deny all from me to table\(2\) dst-port 139


#internet natting and preserving

# Категория пользователей которые живут перманентно в резервном канале - table(5)
# - всякие спонсорские, и ультрадешевые промо-пакеты
${FwCMD} add 1700 divert 8672 ip from table\(5\) to not table\(9\) out via xl1

# в 8671 сворачиваеться весь траффик собственно к интернетам, в 1800 оное не попадает что логично

${FwCMD} add 1799 divert 8671 ip from table\(2\) to not table\(9\)

# если основной аплинк скончался просто убиваеться предыдущее правило и весь траффик из юзерской сети
# уходит в резервный канал (диверт 8672), также убиваеться форвард 1849 и обратный диверт 2099
${FwCMD} add 1800 divert 8672 ip from table\(2\) to not table\(9\) out via xl1

# прокидываем хост по которому от себя контролируем скриптом живость основного аплинка строго в него
${FwCMD} add 1847 fwd xxx.xxx.xxx.113 ip from me to 213.180.204.8

# далее идут форварды собственно куда надо
${FwCMD} add 1849 fwd xxx.xxx.xxx.113 ip from xxx.xxx.xxx.122 to not table\(9\)
${FwCMD} add 1850 fwd 192.168.3.1 ip from 192.168.3.5 to not table\(9\)
${FwCMD} add 1851 fwd 192.168.1.2 ip from 192.168.1.3 to not table\(9\)

# ... и обратные диверты
${FwCMD} add 2099 divert 8671 ip from any to xxx.xxx.xxx.122 in via xl0
${FwCMD} add 2100 divert 8672 ip from any to 192.168.3.5 in via xl1

..... вот здесь уже идут allow и шейпера к table(2) ......

${FwCMD} add 65533 deny all from table\(2\) to any
${FwCMD} add 65534 deny all from any to table\(2\)
${FwCMD} add 65535 allow all from any to any

Вопрос знатокам: что я делаю не так?

tmp
рядовой
Сообщения: 16
Зарегистрирован: 2009-05-10 7:02:03

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение tmp » 2009-06-18 15:36:50

natd использовал как стартовый опыт, pfnat, ngnat, ipfw nat ^__^

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение schizoid » 2009-06-18 15:54:27

а чем именно natd так критичен? если ОС 7.х - можно попробовать nat , который в ядре уже...
переделывать особо ничего не нужно...теже таблицы, тот же аля диверт на нат...
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение neko » 2009-06-18 15:56:46

pf ng... так и не прочитали почему этого не будет даже в теории. Разве что на органы пол колектива продать чтобы это окупилось.

Нет не 7, переустановка продакшн серверов тоже не рассматриваеться как возможная. Вобще не вижу смысла в замене ната под небольшими нагрузками.
Последний раз редактировалось neko 2009-06-18 16:02:53, всего редактировалось 2 раза.

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение schizoid » 2009-06-18 15:58:16

ну у меня с натд тоже приколы, из-за долгой работы переполняется место в /var
почему - хз, приходится раз в неделю рестартовывать ночью.
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение neko » 2009-06-18 16:00:43

ну у меня с натд тоже приколы, из-за долгой работы переполняется место в /var
Вобще не вижу связи переполнения места в var и natd. Поубирать нафиг log со всех рулесов не пробывали? ;-)

ПС ах да еще ж вербоуз лимит 8)

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение schizoid » 2009-06-18 16:07:15

ну как бы траблу решал довольно таки долго. НАТ держит файл, который удален. его реально нет, а место занимает.
тут именно с НАТом дело
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение ProFTP » 2009-06-18 16:10:39

sysctl.conf ничего не ставил, скорее всего там рубит
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение schizoid » 2009-06-18 16:14:07

Код: Выделить всё

[root@stl /home/eugene]# ps -aux| grep natd
root    33470  2,8  0,9  5128  1152  ??  Ss   пн04    154:27,61 /sbin/natd -f /etc/natd.conf -n vlan113
root    34870  0,0  0,7  1604   852  p1  S+   16:11     0:00,01 grep --color natd
[root@stl /home/eugene]# lsof -p 33470
COMMAND   PID USER   FD   TYPE     DEVICE  SIZE/OFF   NODE NAME
natd    33470 root  cwd   VDIR       0,74       512      2 /
natd    33470 root  rtd   VDIR       0,74       512      2 /
natd    33470 root  txt   VREG       0,74     23616   8317 /sbin/natd
natd    33470 root  txt   VREG       0,74    158712   8402 /libexec/ld-elf.so.1
natd    33470 root  txt   VREG       0,74     48260  16666 /lib/libalias.so.5
natd    33470 root  txt   VREG       0,74    922668  16691 /lib/libc.so.6
natd    33470 root    0u  VCHR       0,10       0t0     10 /dev/null
natd    33470 root    1u  VCHR       0,10       0t0     10 /dev/null
natd    33470 root    2u  VCHR       0,10       0t0     10 /dev/null
natd    33470 root    3u  IPv4 0xc1780e10       0t0 DIVERT *:8668
natd    33470 root    4w  VREG       0,83 230272251 212194 /var (/dev/ad2s2)
natd    33470 root    5u   rte 0xc21e7020       0t0
natd    33470 root    6u  IPv4 0xc1782000       0t0   ICMP *:*
natd    33470 root    7u  unix 0xc1a2e42c       0t0        ->0xc17476f4
[root@stl /home/eugene]# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad0s1a    248M     64M    164M    28%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ad2s2     2.0G    794M    1.0G    43%    /var
/dev/ad0s1e    248M    3.5M    224M     2%    /tmp
/dev/ad0s1f     15G     10G    3.1G    77%    /usr
/dev/ad0s1g     57G     55G    983M    98%    /work
/dev/ad2s1      47G     33G     13G    71%    /work/public/music
/dev/ad2s4      17G    1.8G     15G    11%    /work/public/trash
/dev/ad2s3     159G     82G     75G    52%    /work/public/video
devfs          1.0K    1.0K      0B   100%    /var/named/dev
[root@stl /home/eugene]# du -d 1 -h /var/
2,0K    /var/.snap
2,0K    /var/account
6,0K    /var/at
2,0K    /var/audit
 18K    /var/backups
4,0K    /var/cache
4,0K    /var/crash
6,0K    /var/cron
272M    /var/db
2,0K    /var/empty
 72K    /var/ftp
2,0K    /var/games
2,0K    /var/heimdal
8,0K    /var/lib
203M    /var/log
4,0K    /var/msgs
 67K    /var/named
6,0K    /var/net-snmp
 68K    /var/netams
2,0K    /var/preserve
104K    /var/run
2,0K    /var/rwho
412K    /var/spool
8,4M    /var/tmp
 22K    /var/yp
485M    /var/
после рестарта ната, все становится на свои места
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение neko » 2009-06-18 17:20:04

#lsof | grep natd | grep var
#

даже не осмеливаюсь предположить какие же он у вас логи там пишет :)

А то что после перезапуска процесса освобождаеться место это понятно - банально поубивать кеш сквида, или логи апача - будет тот же еффект. Не пробывали вдуматься какой же он лог ведет и кому он нужен?

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение paradox » 2009-06-18 17:40:15

кто мешает для тестов прописать одну строку ната
и заюзать ipnat,pfnat
дабы понять где проблема
?
а потом уже думать

потому как
"рвет каждых 10-15-20 минут".
настораживает что это проблема где то вне сервера
кабель, провайдер итд

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение neko » 2009-06-18 18:02:32

кто мешает для тестов прописать одну строку ната
собственно подымается еще один нат на алиасе(вверху реализация), сворачиваеться туда единичного пользователя (допустим меня) и все летает отлично.

настораживает что это проблема где то вне сервера
физиологические проблемы и провайдер исключены так как если паралельно воткнуть еще один хост - на нем тоже работает все отлично, строим на этом хосте нат по аналогичному методу - ну как минимум для одного пользователя тобишь меня - все тоже отлично. Естественно это все на фоне стоящих рядышком двух хостов на которых методично обрываються сессии.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение paradox » 2009-06-18 18:11:35

собственно подымается еще один нат на алиасе(вверху реализация), сворачиваеться туда единичного пользователя (допустим меня) и все летает отлично
предлагаю попробовать pfnat
с одним правилом
токо не на одного пользователя
а на всех
в конфигурации когда рветься tcp сессия у natd
и тогда станет ясно хотя бы куда копать

вариант
попробовать ядреный natd

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение neko » 2009-06-18 18:19:42

это вы серьезно про переход на pf?

я про те 4 мбит потока которые сейчас на втором хосте при активных на данный момент 6 пользователях + моем тестовом аккаунте?

Не могу ниразу назвать это пределом natd

# ps aux | grep natd
root 649 1.0 0.3 11636 11036 ?? Rs 31May09 380:42.16 /sbin/natd -u -p 8671 -a ххх.ххх.ххх.122
root 651 0.0 0.1 3556 2948 ?? Ss 31May09 3:59.51 /sbin/natd -u -p 8672 -a 192.168.3.5
root 653 0.0 0.0 1704 1092 ?? Ss 31May09 46:41.51 /sbin/natd -u -p 8673 -a 192.168.1.3

тем более учитывая ночной тест какраз на разгруженном хосте когда закачка шириной в 256к тянулась всего от одного пользователя.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение paradox » 2009-06-18 18:32:57

я не говорил про пределы и про переход
я сказал что вам нужно локализовать проблему
поскоку вы щас даже приблизительно незнаете где проблема - так?
вот и поеспериментируйте
если будет глючить на всех pfnat и ipnat
тогда и будет смотреть дальше

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение neko » 2009-06-18 18:52:54

поскоку вы щас даже приблизительно незнаете где проблема - так?
в конкретном экземпляре natd, которым ломиться весь траффик, причем идентично на двух разных хостах с совершенно разной нагрузкой.

можно далеко не ходить - думаю образцово поднятый еще один natd ликвидирующий на себе проблему говорит что рыть следует таки в сторону natd а не сетевух (em/xl/fxp кстати всюду) итд.


Еще с более веселым выражением лица представил себе приостановку 2 продакшн серверов на период "пересобрать ядро/переписать 2 разных биллинга один из которых без сорцов и намертво прибит гвоздями к ipfw/поиграться (а вдруг получиться)" лично этого "попробовать просто так" я себе не представляю.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение paradox » 2009-06-18 19:03:06

pf.ko и ipf.ko
в пересборки ядра не нуждаються
это к примеру

но насчет ядреного natd
это уж вам виднее

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение neko » 2009-06-18 19:38:28

ipfw add 1796 divert 8673 tcp from any to any dst-port 80

вот и чудо - качнул без обрывов и проблем изошку фри по хттп на скорости 20-25 мбит

Идей вообще никаких, канал тот же, юзера все теже, просто диверт соседний.
Хотя всеже есть идея относительно количества сессий, а как можно нежно ограничить их для table(2)?

Аватара пользователя
armadex
мл. сержант
Сообщения: 111
Зарегистрирован: 2007-11-07 21:29:33
Откуда: Ukraine, Кривой Рог
Контактная информация:

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение armadex » 2009-06-18 19:48:14

http://subnets.ru/blog/?tag=ng_nat рекомендую! или ipfw nat
Автор благодарит алфавит за любезно предоставленные буквы!

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение neko » 2009-06-18 20:04:31

люблю повторяться:
вот так вот просто "взять и перейти" на pfnat как минимум на одном из хостов допустим попросту нету - себестоимость такого перехода и сложность реализации в силу наличия клозедсорцного биллинга для одного из сегментов сети будет мягко говоря очень неприятной.

я тоже могу взять и порекомендовать пятициферную циску и автономку /21 - в чем проблема?

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение paradox » 2009-06-18 20:35:25

локализуй проблему на своем сервере
а не повторяя такие же операции на других серверах

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: ipfw + natd - обрывы tcp сессий, куда копать?

Непрочитанное сообщение neko » 2009-06-18 20:37:05

Что значит на "своем"? Если имееться в виду тестовая машина повторяющая набор сервисов и конфигурацию продакшнов так - давно уже. Проблемы там нет так каковой думаю изза отсутствия живых пользователей за спиной.

Чем можно посмотреть общее количество активных tcp сессий висящих сквозь nat и количество активных/wait сессий от каждого пользователя в частности?