Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Alexey Markov                        2:5020/400     29 Jan 2007  15:05:29
 To : Vadim Goncharov
 Subject : Re[2]: Hетграф, ng_nat и incorrect checksum в пакетах
 -------------------------------------------------------------------------------- 
 
 Рад видеть тебя, Vadim!
 Помнится, 27 января 2007 в 14:34 ты писал для Alexey Markov:
 
 VG> В пакетах без IP-опций - чексумма нормальная?
 
 Гм. Что ты имеешь в виду под словами "без IP-опций"? Пакеты, отправленные
 с реального адреса и через HАТ отличаются только в одном поле - чексумме,
 все остальные поля и опции у них совпадают. Кстати, ломается только TCP,
 UDP ходит нормально (предполагаемая причина - ниже).
 
 VG> Если да, то попробуй обновиться до вчерашнего 6-STABLE, там был MFC
 VG> фикса подсчета длины заголовка (хотя может, дело и не в этом).
 
 Обновил ng_nat.c до 1.4.2.1, 2007/01/25 21:42:47, симптомы не изменились.
 
 Похоже, дело вот в этом куске кода (комментарий Глеба):
 
     if ((ip->ip_off & htons(IP_OFFMASK)) == 0 &&
         ip->ip_p == IPPROTO_TCP) {
             struct tcphdr *th = (struct tcphdr *)((caddr_t)ip +
                 (ip->ip_hl << 2));
 
             /*
              * 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.
              */
 
             if (th->th_x2) {
                 th->th_x2 = 0;
                 ip->ip_len = ntohs(ip->ip_len);
                 th->th_sum = in_pseudo(ip->ip_src.s_addr,
                     ip->ip_dst.s_addr, htons(IPPROTO_TCP +
                     ip->ip_len - (ip->ip_hl << 2)));
                 if ((m->m_pkthdr.csum_flags & CSUM_TCP) == 0) {
                     m->m_pkthdr.csum_data = offsetof(struct tcphdr,th_sum);
                     in_delayed_cksum(m);
                 }
                 ip->ip_len = htons(ip->ip_len);
             }
         }
 
 Осталось понять, почему LibAlias не выставляет th_x2 флаг для отнатленных
 пакетов, и как это можно исправить. Жаль, что Глеба в эхе нету... :-/
 
 P.S. Интересно, а кто-нибудь вообще использует ng_nat на боевых серверах?
 
 -- 
 С уважением, Алексей Марков. 
 
 --- ifmail v.2.15dev5.3
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Hетграф, ng_nat и incorrect checksum в пакетах   Alexey Markov   26 Jan 2007 19:30:49 
 Re: Hетграф, ng_nat и incorrect checksum в пакетах   Vadim Goncharov   27 Jan 2007 15:34:29 
 Re[2]: Hетграф, ng_nat и incorrect checksum в пакетах   Alexey Markov   29 Jan 2007 15:05:29 
 Re: Hетграф, ng_nat и incorrect checksum в пакетах   Vadim Goncharov   30 Jan 2007 21:22:56 
 Re: Hетграф, ng_nat и incorrect checksum в пакетах   Dmitriy Kirhlarov   15 Feb 2007 17:17:47 
 Re[2]: Hетграф, ng_nat и incorrect checksum в пакетах   Alexey Markov   15 Feb 2007 19:31:58 
 Re: Hетграф, ng_nat и incorrect checksum в пакетах   Dmitriy Kirhlarov   15 Feb 2007 19:55:39 
Архивное /ru.unix.bsd/9379e1c79f53.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional