Добрый день, помогите разобраться с непонятками.
Проблема в следующем: подключаюсь с помощью 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`а к провайдеру. Соединение проходит нормально,
>аутентификация, выдача адреса и т.д. Инет пингую и вижу, начинаю юзать
>инет (ходить по сайтам и т.д.)начинают сыпаться ошибки типа этой
>
>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`а к провайдеру. Соединение проходит нормально,
>аутентификация, выдача адреса и т.д. Инет пингую и вижу, начинаю юзать
>инет (ходить по сайтам и т.д.)начинают сыпаться ошибки типа этой
>
>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 в нужный размер, седня уже позно, а завтра с утра посмотрю и напишу здесь это правило, а вообще, подругому проблему решить не удалось.
>Тут не у интерфейса прописывать надо, по крайней мере у меня в
>файре есть специальное правило, которое выставляет 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)?
(ведь канал внутри езернета по определению
>не может иметь mtu=1500)?>Нашел в описании ppp следующую опцию:
>
1500 это максимальный размер, а почему не может то?
>1500 это максимальный размер, а почему не может то?Ну так инкапсуляция-же. Пакет внутри пакета. "Размер пакета внутри" = "максимальный размер пакета снаружи (1500)" - "заголовок пакета снаружи". Так как, размер заголовка всегда больше нуля, максимальный размер инкапсулированного пакета не может быть равен 1500. Ну что-то типа того...
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Как это видно идут и должны идти
>Вот вам пптп интерфейс секите какой у него мту 1400
>У PPPoE будет 1490 если память не изменяет
>А вот пинги через сей итрерфейс
>ping 192.168.2.2 -s 1500
>Как это видно идут и должны идтиНе совсем понял смысл поста... Ну и? У вас мту стоит ниже или равное мту у провайдера. Соответственно каждый пинг, больше 1400 минус заголовок Ip, посылается не одним пакетом, а двумя. Если же увеличить мту (чтобы оно стало больше мту со стороны провайдера), то соответственно и пинги, размер которых будет больше мту прова и меньше мту у вас, перестанут ходить...
В общем-то это все понятно, вопрос в том, как управлять размером мту?
>В общем-то это все понятно, вопрос в том, как управлять размером мту?
>
ifconfig есть такая команда !!!!!!!!!!!
>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 0xffffffffPING ya.ru (213.180.204.8): 1500 data bytes
--- ya.ru ping statistics ---
2 packets transmitted, 0 packets received, 100% packet lossPING 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
А у тебя случайно не асинхронный канал ???
У меня такая тема была с провом
>А у тебя случайно не асинхронный канал ???
>У меня такая тема была с провом
Честно, не знаю. Провайдер состоит из пары человек, поэтому выудить из них какую-то информацию крайне трудно...
Имеется ввиду какой канал? Физический или тот что pptpшный?
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1350
>iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS
>--set-mss 1350А через ipfw как?
>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;
}
>pptp[209]: anon log[decaps_gre:pptp_gre.c:407]: buffering packet 1103 (expecting 1101, lost or reordered)эту ошибку решили?
Всё ещё не решили??
>Всё ещё не решили??Видимо нет, потому как поиск ничего не дает, у мя тож самое
>>Всё ещё не решили??
>
>Видимо нет, потому как поиск ничего не дает, у мя тож самое
>У меня такая же проблема. Только вот у меня в составе канала есть ADSL. Как лечить то? кто может всетаки знает??
>>>Всё ещё не решили??
>>
>>Видимо нет, потому как поиск ничего не дает, у мя тож самое
>>
>
>У меня такая же проблема. Только вот у меня в составе канала
>есть ADSL. Как лечить то? кто может всетаки знает??Вот опции, отключите логи и все. у меня все работает. До этого срало в логи безбожно, просто мегатоннами, ротэйтица не успевало.
config_ppp0=( "ppp" )
link_ppp0=( "pty 'pptp 10.7.15.253 --nolaunchpppd --nobuffer --loglevel 0'" )
>[оверквотинг удален]
>>>
>>
>>У меня такая же проблема. Только вот у меня в составе канала
>>есть ADSL. Как лечить то? кто может всетаки знает??
>
>Вот опции, отключите логи и все. у меня все работает. До этого
>срало в логи безбожно, просто мегатоннами, ротэйтица не успевало.
>
>config_ppp0=( "ppp" )
>link_ppp0=( "pty 'pptp 10.7.15.253 --nolaunchpppd --nobuffer --loglevel 0'" )набрел на это
http://www.gentoo.ru/node/9394#comment-74993
мне помогло
>[оверквотинг удален]
>>
>>Вот опции, отключите логи и все. у меня все работает. До этого
>>срало в логи безбожно, просто мегатоннами, ротэйтица не успевало.
>>
>>config_ppp0=( "ppp" )
>>link_ppp0=( "pty 'pptp 10.7.15.253 --nolaunchpppd --nobuffer --loglevel 0'" )
>
>набрел на это
>http://www.gentoo.ru/node/9394#comment-74993
>мне помоглоа какая разница между правкой файла туннеля и пересборкой пакета?
поправить файл туннеля легче же. да и гибче это.другое дело - аудит можно отключить, но если скорость превысит мегабит 15, клиент туннеля мерзнет, пока его не передернешь, все равно.
> и возникла загвоздка :( Дописываю 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
> У pppd, который как я полагаю вы используете, есть диагностический сервер, вТ. е. извиняюсь, у ppp