Страница 1 из 1

Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-10 14:17:18
Dmitry122
Привет!

Не могу разобраться я с проблемой, помогите пожалуйста.
Есть сервер FreeBSD8.2, одной картой (fxp0) смотрит в internet, другой (fxp1) - в сетку с приватными IP.

nat висит на внешнем интерфейсе fxp0, натит
внутренюю приватную подсеть 192.168.0/24 и все вроде работает.
Но если из интернета качать большой файл (10-20мб) по http например, связь
рвется через 1-2 мегабайта
То же самое с pop3.

правила ipfw ---

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

00100   104    14122 allow ip from any to any via lo0
00200 28499 29678320 nat 100 ip from any to any via fxp0
00300 50209 46517793 allow ip from any to any

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

#ipfw nat show config
ipfw nat 100 config if fxp0 unreg_only reset
Никак не могу понять в чем дело.
Думал проблема в линке, но если добавить правило в обход nat

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

ipfw add 11 allow tcp from any to me 80 keep-state
то проблема исчезает.

Помогите пожалуйста разобраться.

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-10 14:19:31
Dmitry122
Вот так выглядит сбой
На удаленном компе запускаю

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

#wget -t 1 nnn.phys.msu.ru/tmp/test
--2011-11-09 17:41:20--  http://nnn.phys.msu.ru/tmp/test
Resolving nnn.phys.msu.ru (nnn.phys.msu.ru)... 93.180.51.14
Connecting to nnn.phys.msu.ru (nnn.phys.msu.ru)|93.180.51.14|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 20480000 (20M) [text/plain]
Saving to: `test'

0% [                                                                         ] 98,893       147K/s   in 0.7s    

2011-11-09 17:41:21 (147 KB/s) - Connection closed at byte 98893. Giving up.

А вот так выглядит tcpdump на компе о котором идет речь

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

17:44:38.186726 IP 93.180.51.14.80 > 78.107.11.34.24281: Flags [.], ack 126, win 8326, options [nop,nop,TS val 1781071408 ecr 3472289116], length 1448
17:44:38.194812 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 575308, win 8145, options [nop,nop,TS val 3472289161 ecr 1781071354], length 0
17:44:38.194851 IP 93.180.51.14.80 > 78.107.11.34.24281: Flags [.], ack 126, win 8326, options [nop,nop,TS val 1781071416 ecr 3472289161], length 1448
17:44:38.194855 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 576756, win 8326, options [nop,nop,TS val 3472289162 ecr 1781071405], length 0
17:44:38.194879 IP 93.180.51.14.80 > 78.107.11.34.24281: Flags [.], ack 126, win 8326, options [nop,nop,TS val 1781071416 ecr 3472289162], length 1448
17:44:38.194884 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 579652, win 8145, options [nop,nop,TS val 3472289165 ecr 1781071405], length 0
17:44:38.194906 IP 93.180.51.14.80 > 78.107.11.34.24281: Flags [FP.], seq 602820:602888, ack 126, win 8326, options [nop,nop,TS val 1781071416 ecr 3472289165], length 68
17:44:38.195784 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 581100, win 8326, options [nop,nop,TS val 3472289166 ecr 1781071405], length 0
17:44:38.198219 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 583996, win 8145, options [nop,nop,TS val 3472289168 ecr 1781071405], length 0
17:44:38.199409 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 585444, win 8326, options [nop,nop,TS val 3472289170 ecr 1781071405], length 0
17:44:38.205475 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 588340, win 8145, options [nop,nop,TS val 3472289176 ecr 1781071408], length 0
17:44:38.206676 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 589788, win 8326, options [nop,nop,TS val 3472289177 ecr 1781071408], length 0
17:44:38.209469 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 592684, win 8145, options [nop,nop,TS val 3472289180 ecr 1781071408], length 0
17:44:38.210427 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 594132, win 8326, options [nop,nop,TS val 3472289181 ecr 1781071408], length 0
17:44:38.213044 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 597028, win 8145, options [nop,nop,TS val 3472289183 ecr 1781071408], length 0
17:44:38.214509 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 598476, win 8326, options [nop,nop,TS val 3472289185 ecr 1781071416], length 0
17:44:38.216805 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 601372, win 8145, options [nop,nop,TS val 3472289187 ecr 1781071416], length 0
17:44:38.218029 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 602820, win 8326, options [nop,nop,TS val 3472289188 ecr 1781071416], length 0
17:44:38.218043 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 602889, win 8317, options [nop,nop,TS val 3472289189 ecr 1781071416], length 0
17:44:38.219115 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [F.], seq 126, ack 602889, win 8326, options [nop,nop,TS val 3472289190 ecr 1781071416], length 0
17:44:38.219143 IP 93.180.51.14.80 > 78.107.11.34.24281: Flags [.], ack 127, win 8325, options [nop,nop,TS val 1781071440 ecr 3472289190], length 0
17:44:42.849132 IP 78.107.11.34.55266 > 93.180.51.14.25: Flags [S], seq 2121977761, win 65535, options [mss 1460,nop,wscale 3,sackOK,TS val 3472293819 ecr 0], length 0
17:44:42.849195 IP 93.180.51.14.25 > 78.107.11.34.55266: Flags [S.], seq 257921642, ack 2121977762, win 65535, options [mss 1460,nop,wscale 3,sackOK,TS val 36964927 ecr 3472293819], length 0
17:44:42.861307 IP 78.107.11.34.55266 > 93.180.51.14.25: Flags [.], ack 1, win 8326, options [nop,nop,TS val 3472293822 ecr 36964927], length 0
17:44:42.967534 IP 93.180.51.14.25 > 78.107.11.34.55266: Flags [P.], ack 1, win 8326, options [nop,nop,TS val 36965046 ecr 3472293822], length 38
17:44:42.970086 IP 78.107.11.34.55266 > 93.180.51.14.25: Flags [P.], ack 39, win 8326, options [nop,nop,TS val 3472293940 ecr 36965046], length 15
17:44:42.970194 IP 93.180.51.14.25 > 78.107.11.34.55266: Flags [P.], ack 16, win 8326, options [nop,nop,TS val 36965048 ecr 3472293940], length 24
17:44:42.971940 IP 78.107.11.34.55266 > 93.180.51.14.25: Flags [P.], ack 63, win 8326, options [nop,nop,TS val 3472293942 ecr 36965048], length 6
17:44:42.972398 IP 78.107.11.34.55266 > 93.180.51.14.25: Flags [F.], seq 22, ack 63, win 8326, options [nop,nop,TS val 3472293942 ecr 36965048], length 0
17:44:42.972430 IP 93.180.51.14.25 > 78.107.11.34.55266: Flags [P.], ack 22, win 8326, options [nop,nop,TS val 36965051 ecr 3472293942], length 15
17:44:42.972469 IP 93.180.51.14.25 > 78.107.11.34.55266: Flags [F.], seq 78, ack 22, win 8326, options [nop,nop,TS val 36965051 ecr 3472293942], length 0
17:44:42.974602 IP 78.107.11.34.55266 > 93.180.51.14.25: Flags [R], seq 2121977783, win 0, length 0
17:44:42.974638 IP 78.107.11.34.55266 > 93.180.51.14.25: Flags [R], seq 2121977783, win 0, length 0

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-10 23:05:25
Проходил мимо
Проверь, отправка больших файлов тоже обрывается?

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-11 12:09:35
koklushkin
Dmitry122 писал(а):Привет!
То же самое с pop3.
походу нат тут не причем. fxp0 напрямую к провайдеру или через железку?

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-11 14:07:19
Dmitry122
Проходил мимо писал(а):Проверь, отправка больших файлов тоже обрывается?
Поразительно, но обрыв идет только при загрузке с сервера. При загрузке НА СЕРВЕР например по ftp обрывов нет.
Я поражен!

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-11 14:12:06
Dmitry122
koklushkin писал(а): походу нат тут не причем. fxp0 напрямую к провайдеру или через железку?
Напрямую к свичу провайдера по UTP.
Все работало много лет, пока не понадобился NAT.
Сначала поставил user mode natd - он стал грузить проц на 50-60% и дико тормозить сервер.
Я переставил на ipfw nat - стало с загрузкой проца все нормально, но пользователи стали жаловаться на обрывы связи при получении
больших писем по pop3.
Ну а потом я сделал тест через http с большим файлом на 20мб и обнаружилось что связь рвется и на нем.

ПРИЧЕМ! Если обойти nat правилом в начале списка allow tcp from any to me 80 - никаких обрывов нет!
Т.е. наводит на мысль что дело не в железе.

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-11 17:05:04
koklushkin
ядро для нат пересобрал или подрузил? попробуй PF изменится что то или нет

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-11 22:54:27
Dmitry122
koklushkin писал(а):ядро для нат пересобрал или подрузил? попробуй PF изменится что то или нет
Ядро пересобрал. Разбираться с pf не очень хочется, уде пробовал natd и ipfw nat.
Завтра махну сетевуху.

Интересно, что в другую сторону обрывов нет, - при загрузке файла не с сервера а на сервер.

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-14 10:18:27
Dmitry122
Замена сетевой карты ситуацию не изменила.
Видимо глюк ipfw nat

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-14 10:42:58
snorlov
Карту на такую же менял или на другую? Имеется в виду может глюк драйвера...

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-14 11:53:32
Dmitry122
Менял на точно такую же, так что может быть и глюк.
А по tcpdump можно что то интересное сказать, я не очень его понимаю.
кажется в какой то момент сервер 93.180.51.14 закрывает коннект,

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

17:44:38.194906 IP 93.180.51.14.80 > 78.107.11.34.24281: Flags [FP.], seq 602820:602888, ack 126, win 8326, options [nop,nop,TS val 1781071416 ecr 3472289165], length 68
а клиент еще надеется на ответы ???

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

17:44:38.195784 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 581100, win 8326, options [nop,nop,TS val 3472289166 ecr 1781071405], length 0
17:44:38.198219 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 583996, win 8145, options [nop,nop,TS val 3472289168 ecr 1781071405], length 0
17:44:38.199409 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 585444, win 8326, options [nop,nop,TS val 3472289170 ecr 1781071405], length 0
17:44:38.205475 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 588340, win 8145, options [nop,nop,TS val 3472289176 ecr 1781071408], length 0
17:44:38.206676 IP 78.107.11.34.24281 > 93.180.51.14.80: Flags [.], ack 589788, win 8326, options [nop,nop,TS val 3472289177 ecr 1781071408], length 0

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-14 12:36:34
LimpTeaM
попробуй ipnat
kldload ipfilter

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

 cat /etc/ipnat.conf
map ae0 from 192.168.77.0/24 to any -> 192.168.0.90
ipnat -f /etc/ipnat.conf
и всё

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-14 15:25:38
Dmitry122
LimpTeaM писал(а):попробуй ipnat
kldload ipfilter

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

 cat /etc/ipnat.conf
map ae0 from 192.168.77.0/24 to any -> 192.168.0.90
ipnat -f /etc/ipnat.conf
и всё
Спасибо, попробую.
А ipfw правил никаких писать не надо, только все разрешить?
Заворачивать трафик никуда не надо?

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2011-11-14 15:35:57
LimpTeaM
Dmitry122 писал(а):
LimpTeaM писал(а):попробуй ipnat
kldload ipfilter

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

 cat /etc/ipnat.conf
map ae0 from 192.168.77.0/24 to any -> 192.168.0.90
ipnat -f /etc/ipnat.conf
и всё
Спасибо, попробую.
А ipfw правил никаких писать не надо, только все разрешить?
Заворачивать трафик никуда не надо?
в принципе нет. эот самый банальный и простейший нат на pf. (сам pf я сам незнаю), но этот нат показал себя хорошо в разных боевых условиях и глюков я пока не видел.

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2012-02-04 23:51:51
gardener
Похоже что проблема таки в ipfw nat.
У меня та-же проблема на двух разных машинах с разными карточками (intel - fxp и asus - stge).
FreeBSD 8.2-RELEASE.
Проблема не аппаратная, проблема софтовая.

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2012-02-05 2:20:20
Dmitry122
Я решил ее у себя. Переписал правила.
Это некий хак, он помогает обойти проблему.
Но проблема есть.

Вот ее временное решение. Все начинает работать нормально.

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

NatIP="93.xxx.xx.14"

ipfw -f flush

ipfw nat 123 config ip ${NatIP} log

ipfw add nat 123 ip from 192.168.0.0/16 to any
ipfw add nat 123 ip from any to ${NatIP}

ipfw add allow all from any to any


Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2012-02-05 14:52:45
gardener
То есть проблема решается указанием вместо имени интерфейса значения адреса?

Пробую....

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2012-02-05 15:50:50
gardener
Не работает.

Некоторое улучшение есть, в том смысле что скачалось не 1,5 Мб, а 9, но все равно не работает.

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2012-02-05 17:33:33
Dmitry122
gardener писал(а):То есть проблема решается указанием вместо имени интерфейса значения адреса?

Пробую....
Нет, фишка именно в использовании 2 строк вместо одной.
в первой заворачиваем исходящий трафик, во второй- входящий.

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

ipfw add nat 123 ip from 192.168.0.0/16 to any
ipfw add nat 123 ip from any to ${NatIP}
Прописывание только IP вместо имени интерфейса у меня проблему тоже не решило.

Re: Обрыв связи. Проблема с kernel nat Freebsd 8.2

Добавлено: 2012-02-15 18:33:49
gardener
Оказалось что в моем случае НАТ ни при чем.
Просто у меня классический вариант FreeBSD8.2 + ipfw2 + nat + mpd5.
Еще раз внимательно пересобрал ядро, перепроверил rc.conf и mpd5.conf, отключил аппаратный подсчет сумм (-rxcsum) и TCP Segmentation Offload (-tso) на интерфейсе и все заработало.

P.S. Нашел интересные моменты, на которые мало где обращается внимание. Как нуб, я по крайней мере нигде до этого не встречал. Делюсь: http://bsdportal.ru/viewtopic.php?p=145 ... 96e#145464