Перейти к содержимому
Калькуляторы

странности с яндексом, аськой, MTU, MPD и FreeBSD

Имеется следующая связка ADSL -> (rl1)FreeBSD(rl0) -> клиенты.

В сторону adsl провайдера поднято ПППоЕ.

клиенты подключается посредством ВПН к FreeBSD и получают через нат доступ в интернет.

ВПН реализован на базе MPD. Все клиенты сидят на WinXP и 1 клиент на freebsd

Работало это всё примерно года 2 и не просило каши.

 

Буквально вчера у всех клиентов перестал открываться яндекс и работать аська(весь остальной интернет доступен)

Стал разбираться. В итоге, после двухчасовых плясок с бубном, выясняю следующее:

если натить пакеты на клиентов в обход туннеля, то вуаля -- у всех всё работает.

 

возвращаю MPD на место и смотрю на MTU (в mpd.conf сервера выставлена опция set iface mtu 1500)

 

в ifconfig'e всё красиво:

ng0: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500

ng1: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500

ng2: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500

 

 

НО, когда приходит клиент с виндой, то MTU меняется и выглядит всё так:

ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1396

inet 10.10.0.1 --> 10.10.0.2 netmask 0xffffffff

 

покурил man mpd, добавил еще пару опций в конфиг:

set link mtu 1500

set link mru 1500

 

После этого, о, чудо! У клиента с бсд MTU стал равен 1496, яндекс и аська заработали.

Но на проклятых клиентов с виндой это все равно не подействовало. МТУ у них все равно продолжал меняться на 1396 при подключении.

 

Ладно пошел на микрософт.ком в поисках услады, нашел: http://support.microsoft.com/kb/826159

всё выставил, перегрузился -- не помогло.

 

В конце концов, обматерившись, я пошел смотреть tcpdump'ом, что ж там такого гадкого мне АОЛ с яндексом шлют.

И обнаружил, что и у того и у другого во всех ответных IP-пакетах выставлена опция Don't Fragment и mss равен 1440 :))

 

всё, тут я сдаюсь.

проблему так и не решил, клиенты волнуются :(

кто-нибудь с подобным сталкивался?

 

 

P.S. на tun0 к провайдеру MTU 1492, на езернетах - 1500

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

пропиши в mpd.conf костыль set iface enable tcpmssfix

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

или:

 

cd /usr/ports/net/tcpmssd; make; make install; make clean

 

/usr/local/bin/tcpmssd -b -m 1280 -p 1234

 

ipfw add 1 divert 1234 all from any to any via tun0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

пропиши в mpd.conf костыль set iface enable tcpmssfix

костыль этот есть, не помогает

 

или:

 

cd /usr/ports/net/tcpmssd; make; make install; make clean

 

/usr/local/bin/tcpmssd -b -m 1280 -p 1234

 

ipfw add 1 divert 1234 all from any to any via tun0

так если дивертить всё в tcpmssd первым правилом, то, как я понял, в natd эти пакеты уже не попадут? :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а ADSL провайдер тоже NAT'ит?

Кстати можно рассматривать как одну из палок в колесо перепродавцам трафика - ставь флаги на все пакеты идущие в сторону клиента и веселуха ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а ADSL провайдер тоже NAT'ит?

Кстати можно рассматривать как одну из палок в колесо перепродавцам трафика - ставь флаги на все пакеты идущие в сторону клиента и веселуха ))

нет, провайдер дает реальный ip, без всяких натов.

флаги, всмысле DF? мне вот интересно узнать чем бы этот флаг с проходящих пакетов снимать в условиях ipfw

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я борол эту проблему линухом снимая флаг DF =)

 

http://mordor.strace.net/iptables/

 

Хотя почему яндекс ставит флаг DF мне так и не ясно =(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

судя по инфе с форумов этот флаг любит ставить винда(1).

ограничением на клиент PPTP VPN в реализации майкрософт является тот самый MTU. Вроде не исправимо. Проще на сервере доступа(в MPD) выставить 1460(в примере конфига для MS-совместимого VPN-сервера не просто так сказно avoid GRE-packet fragmentation). Головная боль должна подрассосаться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4 недели назад появилась похожая проблема... перестали открываться некотрые сайты (microsoft.com e-mail.ru .... перестали работать программы "Банк-Клиент") причём, только на реальных IP адресах выданных провайдером. адрес используемый для NAT не входящий ни в одну из этих сетей, работал прекрасно.... пришлось для "клиент банка" диверт делать, стит freebsd 6.2 ....кувыркались 4 с лишним недели, нашли 2 косяка с маршрутизацией (оба у провайдера), но ничего не помогало.... клиенты были готовы порвать нас....

проверили всё что только можно, изнасиловали поддержку провайдера полностью....

вобщем когда дело дошло уже до гл. инженера провайдера, проблема была решена за 10 минут...... :( :(

4 недели назад нас переключили на новый канал(upgrade скорости)и чегото намутил провайдер с MTU гдето на своих рутерах.......... поменяли MTU и всё заработало :)

 

попросите провайдера проверить с своей стороны может у них чего....

Изменено пользователем witch

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я борол эту проблему линухом снимая флаг DF =)

 

http://mordor.strace.net/iptables/

 

Хотя почему яндекс ставит флаг DF мне так и не ясно =(

http://www.freebsd.org/cgi/query-pr.cgi?pr=103454 патч для ipfw

pf умеет снимать DF без патча

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Система FreeBSD 6.0, mpd 3.18, ipfw из портов

 

Проблема так и не решена, на интерфейсах ng mtu стоит 1500 ровно до тех пор пока виндовая машина не зацепится...

т.е. сразу после подключения по VPN на фряху виндового клиента, интерфейс ng сразу же получает MTU 1396

руками запросто могу переделать на 1500...типа ifconfig ng0 mtu 1500

 

Весь инет перерыл,

Уже ставил и убирал и в комбинации пробовал

mpd.conf

set iface mtu 1500

set link mtu 1500

и так пробовал

mpd.conf

set iface enable tcpmssfix

и опять же в комбинации..

 

Знающие люди откликнитесь пожалуста... что я делаю нетак?

 

[b]
mpd.conf
[/b]
default:
        load pptp1
        load pptp2
        load pptp3
        load pptp4
        load pptp5

pptp1:
        new -i ng01 pptp1 pptp1
        load pptp_standart

pptp2:
        new -i ng02 pptp2 pptp2
        load pptp_standart

pptp3:
        new -i ng03 pptp3 pptp3
        load pptp_standart

pptp4:
        new -i ng04 pptp4 pptp4
        load pptp_standart

pptp5:
        new -i ng05 pptp5 pptp5
        load pptp_standart

pptp_standart:

        set iface disable on-demand
        set iface enable proxy-arp
        set iface enable tcpmssfix

        set bundle disable multilink
        set bundle enable compression
#       set bundle enable noretry
#       set bundle yes crypt-reqd

        set link yes acfcomp protocomp
        set link no pap chap
        set link enable chap-msv2
        set link keep-alive 60 180

        set ipcp yes vjcomp
        set ipcp dns xxxxxxx

        set ccp yes mppc
        set ccp yes mpp-e40
        set ccp yes mpp-e128
        set ccp yes mpp-stateless

        set pptp self 192.168.1.254 1723
        set pptp enable always-ack
        set pptp disable delayed-ack
        set pptp disable windowing
        set pptp enable incoming
        set pptp disable originate

        set iface mtu 1500
        set link mtu 1500
        set link mru 1500

        set radius config /etc/radius.conf
        set radius retries 3
        set radius timeout 5
        set radius server 10.1.1.2 xcxcxcxc 1812 1813
        set radius acct-update 300

        set ipcp enable radius-ip
        set bundle enable radius-auth radius-fallback
        set bundle enable radius-acct
#       set iface enable radius-idle radius-session radius-route
#       set iface enable radius-idle radius-session radius-mtu radius-route
        set ccp enable radius
[b]
тут я уже пробую раные комбинации... типа вдруг где то правильно...
т.е. показываю вам какие варианты уже перепробовал

mpd.link
[/b]

pptp1:
        set link type pptp
        set pptp enable incoming
        set pptp disable originate
        set pptp disable windowing
        set pptp enable always-ack

pptp2:
        set link type pptp
        set pptp enable incoming
        set pptp disable originate
        set pptp disable windowing
        set pptp enable always-ack

pptp3:
        set link type pptp
        set pptp enable incoming
        set pptp disable originate

pptp4:
        set link type pptp
        set pptp enable originate incoming outcall

pptp5:
        set link type pptp
        set pptp enable incoming
        set pptp disable originate

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Система FreeBSD 6.0, mpd 3.18, ipfw из портов

я проблему так и не решил. просто поднял PPPoE на MPD вместо PPTP. и проблема ушла.

set link mtu 1492

set link mru 1492

set iface mtu 1500

 

mtu, когда цепляется винда: 1476

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

set iface mtu 1500

set link mtu 1450 (3 версия с 1460 подымает НГ на 1400) !!!

Это при ППтП и ГРЕ инкапсуляцией, компресия работать не будет !!!! Пинг бегает а странички не отключаються

Изменено пользователем PeterPen

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сорри это я для ГРЕ писал, попробуйте 1485 или 1480. Или перебирайтесб на 4 МПД

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

в mpd.conf у интерфейсов пропиши

 

эти трис трочки

 

set iface mtu 1500

set link mtu 1500

set iface enable tcpmssfix

 

у меня так:

 

pptp0:

new -i ng0 pptp0 pptp0

set iface mtu 1500

set link mtu 1500

set iface enable tcpmssfix

set ipcp ranges x.x.x.x/32 x.x.x.x/32

load pptp_standart

 

и все прекрасно работает!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Целый год мучился с этой проблемой и в конце концов получился вот такой конфиг (точнее кусочек от него), версия MPD 4.1, может вам поможет:

 

pptp_standart:
        set link mtu 1300
        set link mru 1300
        set iface mtu 1300
        set iface enable tcpmssfix
        set bundle disable multilink
        set iface disable on-demand
        set iface disable proxy-arp
        set iface idle 0
        set link yes acfcomp protocomp
        set link no pap chap
        set link enable chap
        set link keep-alive 10 60
        set ipcp yes vjcomp
        set ipcp dns x.x.x.x y.y.y.y

        set iface up-script "/usr/local/abills/libexec/linkupdown mpd up"
        set iface down-script "/usr/local/abills/libexec/linkupdown mpd down"

#
# The five lines below enable Microsoft Point-to-Point encryption
# (MPPE) using the ng_mppc(8) netgraph node type.
#
        set bundle enable compression
        set ccp yes mppc
#       set ccp yes mpp-compress
        set ccp yes mpp-e40
        set ccp yes mpp-e128
        set ccp yes mpp-stateless

        set pptp enable incoming
        set pptp disable originate
        set link max-redial -1

        set auth enable radius-auth
        set auth enable radius-acct
        set auth acct-update 10
        set auth max-logins 1

        set radius server localhost testing123 1812 1813
        set radius me 127.0.0.1
        set radius timeout 10
        set radius retries 3

Значение 1300 взял из оффициальной документации MPD - Раздел траблшутинг, предпоследний пункт:

 

I'm using mpd as PPTP server for Windows XP clients, when accessing bigger websites, or listing larger ftp directories, then the connection seems to hang.

Windows XP insists on a very low MTU (usualy 1396 Bytes), this needs fragmentation, if bigger packets should be transmited over the link. Fragmentation is negotiated at ICMP level, if there is a bad router somewhere in the network, who drops such packets, then the connection seems to hang. The first thing what you can try is reducing mpd's MTU value, by setting: set link mtu 1300 and set bundle disable multilink, this should help in most cases. For TCP connections it's possible enabling the TCP-MSS-Fix: set iface enable tcpmssfix (available since mpd-3.15).

Изменено пользователем eddy_mut

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у меня такая же байда была

прошил D-link-500 в акорп и там MTU выставил вроде помогло :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

то же самое было. Только сервер под linux. Модем dsl-500t. Видимо некоторые нехорошие adsl провы ставят флаг DF чтобы их траф не перепродавали. Нашел патч для ядра который этот DF убирает. Работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.