URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 66187
[ Назад ]

Исходное сообщение
"pptpclient и mtu/mru"

Отправлено Slonic , 09-Май-06 18:45 
Добрый день, помогите разобраться с непонятками.
Проблема в следующем: подключаюсь с помощью pptpclient`а к провайдеру. Соединение проходит нормально, аутентификация, выдача адреса и т.д. Инет пингую и вижу, начинаю юзать инет (ходить по сайтам и т.д.)начинают сыпаться ошибки типа этой

pptp[209]: anon log[decaps_gre:pptp_gre.c:407]: buffering packet 1103 (expecting 1101, lost or reordered)

Увеличив размер пакета пинга выяснил, что при 1432 байтах пинги уже не проходят. Решил уменьшить значение mtu для канала до прова, вот тут-то и возникла загвоздка :( Дописываю  set mtu 1000 в ppp.conf, но канал поднимается с mtu 1500 :( В чем проблема? Может его не туда дописывать надо??? Или я не правильно понял проблему?

PS: FreeBSD 4.11, pptpclient-1.7.0

ppp.conf
THEOFFICE:
set log Phase Chat LCP IPCP CCP tun command
set authname login
set authkey password
set mtu 1400
set mru 1400
set timeout 0
set ifaddr 0 0
alias enable yes
add default HISADDR


Содержание

Сообщения в этом обсуждении
"pptpclient и mtu/mru"
Отправлено Заноза , 09-Май-06 19:15 
>Добрый день, помогите разобраться с непонятками.
>Проблема в следующем: подключаюсь с помощью pptpclient`а к провайдеру. Соединение проходит нормально,
>аутентификация, выдача адреса и т.д. Инет пингую и вижу, начинаю юзать
>инет (ходить по сайтам и т.д.)начинают сыпаться ошибки типа этой
>
>pptp[209]: anon log[decaps_gre:pptp_gre.c:407]: buffering packet 1103 (expecting 1101, lost or reordered)
>
>Увеличив размер пакета пинга выяснил, что при 1432 байтах пинги уже не
>проходят. Решил уменьшить значение mtu для канала до прова, вот тут-то
>и возникла загвоздка :( Дописываю  set mtu 1000 в ppp.conf,
>но канал поднимается с mtu 1500 :( В чем проблема? Может
>его не туда дописывать надо??? Или я не правильно понял проблему?
>
>
>PS: FreeBSD 4.11, pptpclient-1.7.0
>
>ppp.conf
>THEOFFICE:
> set log Phase Chat LCP IPCP CCP tun command
> set authname login
> set authkey password
> set mtu 1400
> set mru 1400
> set timeout 0
> set ifaddr 0 0
> alias enable yes
> add default HISADDR


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


"pptpclient и mtu/mru"
Отправлено satelit , 09-Май-06 19:35 
>Добрый день, помогите разобраться с непонятками.
>Проблема в следующем: подключаюсь с помощью pptpclient`а к провайдеру. Соединение проходит нормально,
>аутентификация, выдача адреса и т.д. Инет пингую и вижу, начинаю юзать
>инет (ходить по сайтам и т.д.)начинают сыпаться ошибки типа этой
>
>pptp[209]: anon log[decaps_gre:pptp_gre.c:407]: buffering packet 1103 (expecting 1101, lost or reordered)
>
>Увеличив размер пакета пинга выяснил, что при 1432 байтах пинги уже не
>проходят. Решил уменьшить значение mtu для канала до прова, вот тут-то
>и возникла загвоздка :( Дописываю  set mtu 1000 в ppp.conf,
>но канал поднимается с mtu 1500 :( В чем проблема? Может
>его не туда дописывать надо??? Или я не правильно понял проблему?
>
>
>PS: FreeBSD 4.11, pptpclient-1.7.0
>
>ppp.conf
>THEOFFICE:
> set log Phase Chat LCP IPCP CCP tun command
> set authname login
> set authkey password
> set mtu 1400
> set mru 1400
> set timeout 0
> set ifaddr 0 0
> alias enable yes
> add default HISADDR

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


"pptpclient и mtu/mru"
Отправлено Slonic , 09-Май-06 19:52 
>Тут не у интерфейса прописывать надо, по крайней мере у меня в
>файре есть специальное правило, которое выставляет send-mss в нужный размер, седня
>уже позно, а завтра с утра посмотрю и напишу здесь это
>правило, а вообще, подругому проблему решить не удалось.

Нашел в описании ppp следующую опцию:
             [tcp]mssfixup
         Default: Enabled.    This option tells ppp to adjust TCP SYN pack-
         ets so that the maximum receive segment size is not greater than
         the amount allowed by the interface MTU.

Может дело в этом? Не из-за этого ли игнорируются настройки mtu для канала и выставляются неправильные праметры (ведь канал внутри езернета по определению не может иметь mtu=1500)?


"pptpclient и mtu/mru"
Отправлено Заноза , 09-Май-06 20:39 
(ведь канал внутри езернета по определению
>не может иметь mtu=1500)?

>Нашел в описании ppp следующую опцию:
>            


1500 это максимальный размер, а почему не может то?


"pptpclient и mtu/mru"
Отправлено Slonic , 09-Май-06 21:03 
>1500 это максимальный размер, а почему не может то?

Ну так инкапсуляция-же. Пакет внутри пакета. "Размер пакета внутри" = "максимальный размер пакета снаружи (1500)" - "заголовок пакета снаружи". Так как, размер заголовка всегда больше нуля, максимальный размер инкапсулированного пакета не может быть равен 1500. Ну что-то типа того...


"pptpclient и mtu/mru"
Отправлено ru , 10-Май-06 03:27 
ppp2      Link encap:Point-to-Point Protocol
          inet addr:192.168.2.1  P-t-P:192.168.2.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1400  Metric:1
          RX packets:3504 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3885 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:552142 (539.2 Kb)  TX bytes:2713565 (2.5 Mb)

Вот вам пптп интерфейс секите какой у него мту 1400
У PPPoE будет 1490 если память не изменяет
А вот пинги через сей итрерфейс
ping 192.168.2.2 -s 1500
PING 192.168.2.2 (192.168.2.2) 1500(1528) bytes of data.
1508 bytes from 192.168.2.2: icmp_seq=1 ttl=128 time=1.11 ms
1508 bytes from 192.168.2.2: icmp_seq=2 ttl=128 time=1.09 ms
1508 bytes from 192.168.2.2: icmp_seq=3 ttl=128 time=1.14 ms

Как это видно идут и должны идти


"pptpclient и mtu/mru"
Отправлено Slonic , 10-Май-06 06:37 
>Вот вам пптп интерфейс секите какой у него мту 1400
>У PPPoE будет 1490 если память не изменяет
>А вот пинги через сей итрерфейс
>ping 192.168.2.2 -s 1500
>Как это видно идут и должны идти

Не совсем понял смысл поста... Ну и? У вас мту стоит ниже или равное мту у провайдера. Соответственно каждый пинг, больше 1400 минус заголовок Ip, посылается не одним пакетом, а двумя. Если же увеличить мту (чтобы оно стало больше мту со стороны провайдера), то соответственно и пинги, размер которых будет больше мту прова и меньше мту у вас, перестанут ходить...
В общем-то это все понятно, вопрос в том, как управлять размером мту?


"pptpclient и mtu/mru"
Отправлено ru , 10-Май-06 08:06 

>В общем-то это все понятно, вопрос в том, как управлять размером мту?
>


ifconfig есть такая команда !!!!!!!!!!!


"pptpclient и mtu/mru"
Отправлено Slonic , 10-Май-06 09:27 
>ifconfig есть такая команда !!!!!!!!!!!

хммм, странности продолжаются... уменьшил mtu, результат тотже :( Пинги до 1432 идут, потом нет. Пробовал mtu 1400,1432 и 1440...

tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1400
        inet 192.168.1.1 --> 172.16.0.2 netmask 0xffffffff

PING ya.ru (213.180.204.8): 1500 data bytes
--- ya.ru ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss

PING ya.ru (213.180.204.8): 1432 data bytes
1440 bytes from 213.180.204.8: icmp_seq=0 ttl=60 time=57.852 ms
1440 bytes from 213.180.204.8: icmp_seq=1 ttl=60 time=58.031 ms


"pptpclient и mtu/mru"
Отправлено ru , 10-Май-06 10:24 
А у тебя случайно не асинхронный канал ???
У меня такая тема была с провом

"pptpclient и mtu/mru"
Отправлено Slonic , 10-Май-06 11:59 
>А у тебя случайно не асинхронный канал ???
>У меня такая тема была с провом
Честно, не знаю. Провайдер состоит из пары человек, поэтому выудить из них какую-то информацию крайне трудно...
Имеется ввиду какой канал? Физический или тот что pptpшный?

"pptpclient и mtu/mru"
Отправлено satelit , 10-Май-06 03:31 
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1350

"pptpclient и mtu/mru"
Отправлено Slonic , 10-Май-06 06:31 
>iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS
>--set-mss 1350

А через ipfw как?


"pptpclient и mtu/mru"
Отправлено sw , 09-Ноя-08 11:55 
>iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS
>--set-mss 1350

если не добавлять это правило, то соединения с некоторыми серверами не устанавливаются вообще, например с mail.ru

с этим правилом соединения устанавливаются но сообщение "anon log[decaps_gre:pptp_gre.c:407]: buffering packet 5636 (expecting 5632, lost or reordered)
" все равно сыпятся и заметно меньше скорость соединений, замерял на speedtest.net на винде pptp-соединение в 10 раз быстрее чем на linux (

вот исходники этой части в pptp, может что-то здесь можно поправить...
decaps_gre:pptp_gre.c


/*** decaps_gre ***************************************************************/
int decaps_gre (int fd, callback_t callback, int cl)
{
    unsigned char buffer[PACKET_MAX + 64 /*ip header*/];
    struct pptp_gre_header *header;
    int status, ip_len = 0;
    static int first = 1;
    unsigned int headersize;
    unsigned int payload_len;
    u_int32_t seq;

    if ((status = read (fd, buffer, sizeof(buffer))) <= 0) {
        warn("short read (%d): %s", status, strerror(errno));
        stats.rx_errors++;
        return -1;
    }
    /* strip off IP header, if present */
    if ((buffer[0] & 0xF0) == 0x40)
        ip_len = (buffer[0] & 0xF) * 4;
    header = (struct pptp_gre_header *)(buffer + ip_len);
    /* verify packet (else discard) */
    if (    /* version should be 1 */
            ((ntoh8(header->ver) & 0x7F) != PPTP_GRE_VER) ||
            /* PPTP-GRE protocol for PPTP */
            (ntoh16(header->protocol) != PPTP_GRE_PROTO)||
            /* flag C should be clear   */
            PPTP_GRE_IS_C(ntoh8(header->flags)) ||
            /* flag R should be clear   */
            PPTP_GRE_IS_R(ntoh8(header->flags)) ||
            /* flag K should be set     */
            (!PPTP_GRE_IS_K(ntoh8(header->flags))) ||
            /* routing and recursion ctrl = 0  */
            ((ntoh8(header->flags)&0xF) != 0)) {
        /* if invalid, discard this packet */
        warn("Discarding GRE: %X %X %X %X %X %X",
                ntoh8(header->ver)&0x7F, ntoh16(header->protocol),
                PPTP_GRE_IS_C(ntoh8(header->flags)),
                PPTP_GRE_IS_R(ntoh8(header->flags)),
                PPTP_GRE_IS_K(ntoh8(header->flags)),
                ntoh8(header->flags) & 0xF);
        stats.rx_invalid++;
        return 0;
    }
    /* silently discard packets not for this call */
    if (ntoh16(header->call_id) != pptp_gre_call_id) return 0;
    /* test if acknowledgement present */
    if (PPTP_GRE_IS_A(ntoh8(header->ver))) {
        u_int32_t ack = (PPTP_GRE_IS_S(ntoh8(header->flags)))?
            header->ack:header->seq; /* ack in different place if S = 0 */
        ack = ntoh32( ack);
        if (ack > ack_recv) ack_recv = ack;
        /* also handle sequence number wrap-around  */
        if (WRAPPED(ack,ack_recv)) ack_recv = ack;
        if (ack_recv == stats.pt.seq) {
            int rtt = time_now_usecs() - stats.pt.time;
            stats.rtt = (stats.rtt + rtt) / 2;
        }
    }
    /* test if payload present */
    if (!PPTP_GRE_IS_S(ntoh8(header->flags)))
        return 0; /* ack, but no payload */
    headersize  = sizeof(*header);
    payload_len = ntoh16(header->payload_len);
    seq         = ntoh32(header->seq);
    /* no ack present? */
    if (!PPTP_GRE_IS_A(ntoh8(header->ver))) headersize -= sizeof(header->ack);
    /* check for incomplete packet (length smaller than expected) */
    if (status - headersize < payload_len) {
        warn("discarding truncated packet (expected %d, got %d bytes)",
                payload_len, status - headersize);
        stats.rx_truncated++;
        return 0;
    }
    /* check for expected sequence number */
    if ( first || (seq == seq_recv + 1)) { /* wrap-around safe */
        if ( log_level >= 2 )
            log("accepting packet %d", seq);
        stats.rx_accepted++;
        first = 0;
        seq_recv = seq;
        return callback(cl, buffer + ip_len + headersize, payload_len);
    /* out of order, check if the number is too low and discard the packet.
     * (handle sequence number wrap-around, and try to do it right) */
    } else if ( seq < seq_recv + 1 || WRAPPED(seq_recv, seq) ) {
        if ( log_level >= 1 )
            log("discarding duplicate or old packet %d (expecting %d)",
                seq, seq_recv + 1);
        stats.rx_underwin++;
    /* sequence number too high, is it reasonably close? */
    } else if ( seq < seq_recv + MISSING_WINDOW ||
                WRAPPED(seq, seq_recv + MISSING_WINDOW) ) {
        stats.rx_buffered++;
        if ( log_level >= 1 )
            log("%s packet %d (expecting %d, lost or reordered)",
                disable_buffer ? "accepting" : "buffering",
                seq, seq_recv+1);
        if ( disable_buffer ) {
            seq_recv = seq;
            stats.rx_lost += seq - seq_recv - 1;
            return callback(cl, buffer + ip_len + headersize, payload_len);
        } else {
            pqueue_add(seq, buffer + ip_len + headersize, payload_len);
        }
    /* no, packet must be discarded */
    } else {
        if ( log_level >= 1 )
            warn("discarding bogus packet %d (expecting %d)",
                 seq, seq_recv + 1);
        stats.rx_overwin++;
    }
    return 0;
}


"pptpclient и mtu/mru"
Отправлено Евгений , 29-Авг-07 12:46 
>pptp[209]: anon log[decaps_gre:pptp_gre.c:407]: buffering packet 1103 (expecting 1101, lost or reordered)

эту ошибку решили?


"pptpclient и mtu/mru"
Отправлено Мо имя , 24-Апр-08 12:11 
Всё ещё не решили??

"pptpclient и mtu/mru"
Отправлено чичако , 28-Июн-08 04:04 
>Всё ещё не решили??

Видимо нет, потому как поиск ничего не дает, у мя тож самое


"pptpclient и mtu/mru"
Отправлено Yaten , 05-Дек-08 15:44 
>>Всё ещё не решили??
>
>Видимо нет, потому как поиск ничего не дает, у мя тож самое
>

У меня такая же проблема. Только вот у меня в составе канала есть ADSL. Как лечить то? кто может всетаки знает??


"pptpclient и mtu/mru"
Отправлено AdviZzzor , 12-Май-09 19:11 
>>>Всё ещё не решили??
>>
>>Видимо нет, потому как поиск ничего не дает, у мя тож самое
>>
>
>У меня такая же проблема. Только вот у меня в составе канала
>есть ADSL. Как лечить то? кто может всетаки знает??

Вот опции, отключите логи и все. у меня все работает. До этого срало в логи безбожно, просто мегатоннами, ротэйтица не успевало.

config_ppp0=( "ppp" )
link_ppp0=( "pty 'pptp 10.7.15.253 --nolaunchpppd --nobuffer --loglevel 0'" )


"pptpclient и mtu/mru"
Отправлено v , 01-Сен-09 01:15 
>[оверквотинг удален]
>>>
>>
>>У меня такая же проблема. Только вот у меня в составе канала
>>есть ADSL. Как лечить то? кто может всетаки знает??
>
>Вот опции, отключите логи и все. у меня все работает. До этого
>срало в логи безбожно, просто мегатоннами, ротэйтица не успевало.
>
>config_ppp0=( "ppp" )
>link_ppp0=( "pty 'pptp 10.7.15.253 --nolaunchpppd --nobuffer --loglevel 0'" )

набрел на это
http://www.gentoo.ru/node/9394#comment-74993
мне помогло


"pptpclient и mtu/mru"
Отправлено EsTaF , 17-Фев-10 00:09 
>[оверквотинг удален]
>>
>>Вот опции, отключите логи и все. у меня все работает. До этого
>>срало в логи безбожно, просто мегатоннами, ротэйтица не успевало.
>>
>>config_ppp0=( "ppp" )
>>link_ppp0=( "pty 'pptp 10.7.15.253 --nolaunchpppd --nobuffer --loglevel 0'" )
>
>набрел на это
>http://www.gentoo.ru/node/9394#comment-74993
>мне помогло

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

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


"pptpclient и mtu/mru"
Отправлено netmaster aka Грозный Ламер , 01-Дек-10 07:20 
> и возникла загвоздка :( Дописываю  set mtu 1000 в ppp.conf,
> но канал поднимается с mtu 1500 :( В чем проблема? Может
> его не туда дописывать надо??? Или я не правильно понял проблему?

Попробуйте set mtu maximum 1400

Если я правильно понял, set mtu 1400 запрашивает (или устанавливает) mtu 1400, если сервер предлагает меньше. А set mtu max 1400 устанавливает максимально допустимый mtu, с которым серверу приходится согласиться.

У pppd, который как я полагаю вы используете, есть диагностический сервер, в котором команды доступны с интерактивной подсказкой (set mtu ?). Пример включения сервера на прослушивание локального сокета:
default:
set socket /var/run/ppp/ctl ppp

Подключение по pppctl /var/run/ppp/ctl с паролем ppp


"pptpclient и mtu/mru"
Отправлено netmaster aka Грозный Ламер , 01-Дек-10 07:25 
> У pppd, который как я полагаю вы используете, есть диагностический сервер, в

Т. е. извиняюсь, у ppp