FreeBSD 6.2-RELEASE, настроен NAT через ng_nat с адресом A.B.C.D:
=========Beginning of the citation============== 00100 allow ip from any to any via lo0 00200 deny ip from any to 127.0.0.0/8 00300 deny ip from 127.0.0.0/8 to any 00321 netgraph 321 ip from any to A.B.C.D in via xl0 00322 netgraph 322 ip from 192.168.10.0/24 to any out via xl0 =========The end of the citation================
При попытке соединения из внутренней сети на внешний сервер E.F.G.H в tcpdump на xl0 вижу следующее:
=========Beginning of the citation============== IP (tos 0x10, ttl 64, id 31559, offset 0, flags [DF], proto: TCP (6), length: 64) A.B.C.D.63381 > E.F.G.H.25: S, cksum 0x42c3 (incorrect (-> 0x4cef), 428483941:428483941(0) win 65535 <mss 1460,nop,scale 1,nop,nop, timestamp 270637050 0,sackOK,eol>
IP (tos 0x10, ttl 64, id 31564, offset 0, flags [DF], proto: TCP (6), length: 64) A.B.C.D.63381 > E.F.G.H.25: S, cksum 0x370b (incorrect (-> 0x4137), 428483941:428483941(0) win 65535 <mss 1460,nop,scale 1,nop,nop, timestamp 270640050 0,sackOK,eol> =========The end of the citation================
Понятное дело, что провайдерский гейт эти пакеты с битой чексуммой просто дропает. Осталось выяснить - кто эти чексуммы корёжит? И как можно отследить прохождение пакета через внутренние ноды нетграфа? В общем, буду благодарен, если мне укажут место, где стоит копать...
P.S. С адреса самого интерфейса пакеты уходят с нормальной чексуммой.
В пакетах без IP-опций - чексумма нормальная? Если да, то попробуй обновиться до вчерашнего 6-STABLE, там был MFC фикса подсчета длины заголовка (хотя может, дело и не в этом).
-- WBR, Vadim Goncharov. ICQ#166852181 mailto:vadim_nucli...@mail.ru [Moderator of RU.ANTI-ECOLOGY][FreeBSD][http://antigreen.org][LJ:/nuclight]
Рад видеть тебя, Vadim! Помнится, 27 января 2007 в 14:34 ты писал для Alexey Markov:
VG> В пакетах без IP-опций - чексумма нормальная?
Гм. Что ты имеешь в виду под словами "без IP-опций"? Пакеты, отправленные с реального адреса и через НАТ отличаются только в одном поле - чексумме, все остальные поля и опции у них совпадают. Кстати, ломается только TCP, UDP ходит нормально (предполагаемая причина - ниже).
VG> Если да, то попробуй обновиться до вчерашнего 6-STABLE, там был MFC VG> фикса подсчета длины заголовка (хотя может, дело и не в этом).
Обновил ng_nat.c до 1.4.2.1, 2007/01/25 21:42:47, симптомы не изменились.
Похоже, дело вот в этом куске кода (комментарий Глеба):
/* * Here is our terrible HACK. * * Sometimes LibAlias edits contents of TCP packet. * In this case it needs to recompute full TCP * checksum. However, the problem is that LibAlias * doesn't have any idea about checksum offloading * in kernel. To workaround this, we do not do * checksumming in LibAlias, but only mark the * packets in th_x2 field. If we receive a marked * packet, we calculate correct checksum for it * aware of offloading. * * Why do I do such a terrible hack instead of * recalculating checksum for each packet? * Because the previous checksum was not checked! * Recalculating checksums for EVERY packet will * hide ALL transmission errors. Yes, marked packets * still suffer from this problem. But, sigh, natd(8) * has this problem, too. */
On Mon, 29 Jan 2007 11:05:29 +0000 (UTC); Alexey Markov wrote about 'Re[2]: Нетграф, ng_nat и incorrect checksum в пакетах':
VG>> В пакетах без IP-опций - чексумма нормальная? AM> Гм. Что ты имеешь в виду под словами "без IP-опций"? Пакеты, отправленные AM> с реального адреса и через НАТ отличаются только в одном поле - чексумме, AM> все остальные поля и опции у них совпадают. Кстати, ломается только TCP, AM> UDP ходит нормально (предполагаемая причина - ниже). [...] AM> Осталось понять, почему LibAlias не выставляет th_x2 флаг для отнатленных AM> пакетов, и как это можно исправить. Жаль, что Глеба в эхе нету... :-/
Напиши ему на glebius@ - наверняка ответит...
AM> P.S. Интересно, а кто-нибудь вообще использует ng_nat на боевых серверах?
Вообще, я слышал о боевом использовании, и у кого-то даже успешно (некоторые ругались, что оно память жрет)
-- WBR, Vadim Goncharov. ICQ#166852181 mailto:vadim_nucli...@mail.ru [Moderator of RU.ANTI-ECOLOGY][FreeBSD][http://antigreen.org][LJ:/nuclight]
On Mon, Jan 29, 2007 at 11:05:29AM +0000, Alexey Markov wrote: > Осталось понять, почему LibAlias не выставляет th_x2 флаг для отнатленных > пакетов, и как это можно исправить. Жаль, что Глеба в эхе нету... :-/
13:01 < kyrh> glebius: народ в r.u.b с ng_nat мается. 13:02 <@glebius> пусть к piso обращаются
On Thu, Feb 15, 2007 at 03:31:58PM +0000, Alexey Markov wrote: > DK> 13:01 < kyrh> glebius: народ в r.u.b с ng_nat мается. > DK> 13:02 <@glebius> пусть к piso обращаются
> Да я бы с удовольствием, только кто это - piso? Судя по фамилии, > он не здешний? ;-)