как изменить mss при ошибке unreachable - need to frag

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Wic
рядовой
Сообщения: 32
Зарегистрирован: 2009-02-09 7:51:54
Откуда: Нск
Контактная информация:

как изменить mss при ошибке unreachable - need to frag

Непрочитанное сообщение Wic » 2009-11-25 12:45:56

Из за сложного устройства сети, туннель(mtu 1420) через pppoe(на mpd5 mtu 1460) соединение, стали появляться такие ошибки.

Код: Выделить всё

16:24:33.992091 IP 137.226.18.3.80 > 137.226.12.150.33012: . 2897:5793(2896) ack 114 win 91 <nop,nop,timestamp 63951179 5405908>
16:24:33.992205 IP 137.226.18.1 > 137.226.18.3: ICMP 137.226.12.150 unreachable - need to frag (mtu 1460), length 556
У кого были или есть тот поймет. Свои может позже выложу.
При поиске причины обнаружилось что MSS должен быть равен MTU -40 (иногда даже -60)
Решение для линукса есть почти в каждом втором форуме.

Код: Выделить всё

iptables -A FORWARD -p tcp --syn -s $WINXP_BOX -j TCPMSS --set-mss 1380
А вот как для freebsd изменить MSS?

Код: Выделить всё

sysctl net.inet.tcp.mssdflt=1340
ничего не изменило, пакеты приходили с тем же MSS 1460.
Сейчас прописал в mpd5

Код: Выделить всё

set iface enable tcpmssfix
результат пока проверить не могу.
Хотелось бы знать как можно вручную изменить MSS.

А теперь решение этой проблемы.
Решить как в линуксе в одну строчку не получилось, но всё же цель достигнута пакеты втиснуты в туннель :smile:
Для изменения mss используем packet filter, а в частности packet normalizator.
Для того что бы просто запустить pf, можно выполнить

Код: Выделить всё

kldload pf
А потом желательно пере собрать ядро со следующей строчкой

Код: Выделить всё

device       pf
После этого нормализуем трафик в туннеле следующим правилом

Код: Выделить всё

echo 'scrub on gif0 max-mss 1380' >> /etc/pf.conf
Добавляем pf в запуск системы

Код: Выделить всё

echo 'pf_enable="YES"'>> /etc/rc.conf
запускаем его

Код: Выделить всё

pfctl -e
и всё работает!

Специально написал всё так подробно, потому что приличного решения для ошибки типа unreachable - need to frag для freebsd найти не смог.
Огромное спасибо GRooVE за помощь!
Последний раз редактировалось Wic 2009-11-25 20:44:59, всего редактировалось 2 раза.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Wic
рядовой
Сообщения: 32
Зарегистрирован: 2009-02-09 7:51:54
Откуда: Нск
Контактная информация:

Re: как изменить mss при ошибке unreachable - need to frag

Непрочитанное сообщение Wic » 2009-11-25 18:31:26

решил эту проблему при помощи tcpmssd. при том завернул все пакеты правилом

Код: Выделить всё

ipfw add divert 8001 ip from any to any via rl0
такое решение мне очень не нравится.
Можно ли как нибудь через ipfw сделать это или как нибудь уменьши число пактов что идут через диверт.

Гость
проходил мимо

Re: как изменить mss при ошибке unreachable - need to frag

Непрочитанное сообщение Гость » 2009-11-25 18:36:55

мануальчик по MPD почитайте
и не занимайтесь ерундой

Wic
рядовой
Сообщения: 32
Зарегистрирован: 2009-02-09 7:51:54
Откуда: Нск
Контактная информация:

Re: как изменить mss при ошибке unreachable - need to frag

Непрочитанное сообщение Wic » 2009-11-25 18:46:59

Гость писал(а):мануальчик по MPD почитайте
и не занимайтесь ерундой
доки по мпд я изучил, если есть мысли то конкретней указывайте куда копать. mpd вообще только функцию пппое клиента выполняет, вся информация идет уже по тунелю.

Аватара пользователя
GRooVE
ст. сержант
Сообщения: 309
Зарегистрирован: 2009-01-04 10:33:43
Откуда: Odessa, UA
Контактная информация:

Re: как изменить mss при ошибке unreachable - need to frag

Непрочитанное сообщение GRooVE » 2009-11-25 19:01:12

pf с этим отлично справляется
при чем отлично будет работать даже в связке с ipfw

Код: Выделить всё

# cat /etc/pf.conf
scrub out all max-mss 1400
а для mpd5 должно помочь

Код: Выделить всё

# cat /usr/local/etc/mpd5/mpd.conf | grep mss
        set iface enable tcpmssfix

Wic
рядовой
Сообщения: 32
Зарегистрирован: 2009-02-09 7:51:54
Откуда: Нск
Контактная информация:

Re: как изменить mss при ошибке unreachable - need to frag

Непрочитанное сообщение Wic » 2009-11-25 19:23:39

с мпд5 проблем нет.
мне нужно чтобы для определенного адреса в подсети у меня входящие пакеты имели mss 1380.
при это ipfw натит все адреса разом. Можно подробней про связку pf+ipfw подробней

Аватара пользователя
GRooVE
ст. сержант
Сообщения: 309
Зарегистрирован: 2009-01-04 10:33:43
Откуда: Odessa, UA
Контактная информация:

Re: как изменить mss при ошибке unreachable - need to frag

Непрочитанное сообщение GRooVE » 2009-11-25 19:36:40

а что тут подробнее?

Код: Выделить всё

# echo 'pf_enable="YES"' >> /etc/rc.conf
# echo 'scrub out to X.X.X.X max-mss 1380' >> /etc/pf.conf
# pfctl -ef /etc/pf.conf

Wic
рядовой
Сообщения: 32
Зарегистрирован: 2009-02-09 7:51:54
Откуда: Нск
Контактная информация:

Re: как изменить mss при ошибке unreachable - need to frag

Непрочитанное сообщение Wic » 2009-11-25 20:13:38

Благодарю, с pf не разу не работал, по этому не знаю как там и что.
А можно, чтобы только для одного ИП адреса ставился такой mss

Аватара пользователя
GRooVE
ст. сержант
Сообщения: 309
Зарегистрирован: 2009-01-04 10:33:43
Откуда: Odessa, UA
Контактная информация:

Re: как изменить mss при ошибке unreachable - need to frag

Непрочитанное сообщение GRooVE » 2009-11-25 20:39:31

внимательней на предыдущий пост посмотрите

Wic
рядовой
Сообщения: 32
Зарегистрирован: 2009-02-09 7:51:54
Откуда: Нск
Контактная информация:

Re: как изменить mss при ошибке unreachable - need to frag

Непрочитанное сообщение Wic » 2009-11-25 20:44:08

GRooVE , спасибо разобрался!

vasilushechka
проходил мимо
Сообщения: 7
Зарегистрирован: 2010-03-23 10:16:40
Контактная информация:

Re: как изменить mss при ошибке unreachable - need to frag

Непрочитанное сообщение vasilushechka » 2012-11-13 14:51:52

Wic писал(а):Из за сложного устройства сети, туннель(mtu 1420) через pppoe(на mpd5 mtu 1460) соединение, стали появляться такие ошибки.

Код: Выделить всё

16:24:33.992091 IP 137.226.18.3.80 > 137.226.12.150.33012: . 2897:5793(2896) ack 114 win 91 <nop,nop,timestamp 63951179 5405908>
16:24:33.992205 IP 137.226.18.1 > 137.226.18.3: ICMP 137.226.12.150 unreachable - need to frag (mtu 1460), length 556
У кого были или есть тот поймет. Свои может позже выложу.
При поиске причины обнаружилось что MSS должен быть равен MTU -40 (иногда даже -60)
Решение для линукса есть почти в каждом втором форуме.

Код: Выделить всё

iptables -A FORWARD -p tcp --syn -s $WINXP_BOX -j TCPMSS --set-mss 1380
А вот как для freebsd изменить MSS?

Код: Выделить всё

sysctl net.inet.tcp.mssdflt=1340
ничего не изменило, пакеты приходили с тем же MSS 1460.
Сейчас прописал в mpd5

Код: Выделить всё

set iface enable tcpmssfix
результат пока проверить не могу.
Хотелось бы знать как можно вручную изменить MSS.

А теперь решение этой проблемы.
Решить как в линуксе в одну строчку не получилось, но всё же цель достигнута пакеты втиснуты в туннель :smile:
Для изменения mss используем packet filter, а в частности packet normalizator.
Для того что бы просто запустить pf, можно выполнить

Код: Выделить всё

kldload pf
А потом желательно пере собрать ядро со следующей строчкой

Код: Выделить всё

device       pf
После этого нормализуем трафик в туннеле следующим правилом

Код: Выделить всё

echo 'scrub on gif0 max-mss 1380' >> /etc/pf.conf
Добавляем pf в запуск системы

Код: Выделить всё

echo 'pf_enable="YES"'>> /etc/rc.conf
запускаем его

Код: Выделить всё

pfctl -e
и всё работает!

Специально написал всё так подробно, потому что приличного решения для ошибки типа unreachable - need to frag для freebsd найти не смог.
Огромное спасибо GRooVE за помощь!
Возможно я ошибаюсь, но кажется вы идете не верным путем: для начала вам необходимо разрешить ICMP (3 и 4 типов). Когда на интерфейс приходит пакет, размер которого больше, чем MTU, то система отправляет ICMP пакет Destination is unreachable. В ICMP содержится информация о размере MTU. Другая сторона получает это сообщение и уменьшает размер пакета до MTU, заданного в ICMP пакете.

Вы жестко задаете max-mss, это допустимо, но в некоторых ситуациях может привести к проблемам. Например если на одном из промежуточных узлов изменится MTU.

Поправьте если не прав.

PS: Дату сообщения и темы видел, но вопрос актуален и в наши дни :)