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

Снять флаг DF (dont fragment)

Суть проблемы:

1. Некоторые сервера в инете (yandex, например) отсылают все пакеты с установленным флагом DF, что запрещает их фрагментацию.

2. Туннели VPN идут с MTU<1500.

3. Отсюда проблема - пакеты не проходят, сайты не открываются.

 

Пути решения:

Cisco умеет снимать DF у проходящего трафика.

 

Вопрос:

Как это сделать на Linux?

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


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

есть патч на ядро+модуль к iptables, ищется гуглем

но на новые ядра не накладывается (старше 2.6.13 по моему)

Работает сносно, проверял.

 

Если не найдешь - я покопаюсь у себя и выложу.

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


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

это я находил, спасибо.

но там и iptables нужен не первой свежести...

 

неужели у всех фрагментация в VPN работатет без проблем?

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


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

dan

Он простой, я думал попробовать переделать его под новые ядра, но ИМХО должен быть и другой спопсоб.

 

Кстати, проблема у меня было с GRE тунелем а не с VPN

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


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

кому интересно - http://mordor.strace.net/iptables/

проблема-то не на моей стороне а на серверной. напол ставить флаг DF в Интернете?

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

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

 

PS: откатился iptables 1.2.9. пропатчил. все работает нормально.

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


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

Гость
есть патч на ядро+модуль к iptables, ищется гуглем

но на новые ядра не накладывается (старше 2.6.13 по моему)

 

вернее начиная с 2.6.13.6 (кажется). уже оказывается не надо nfcache-у говорить, что пакет изменен. изменил модуль. если кому надо могут забирать с http://mordor.strace.net/iptables/

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


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

Гость

Спасибо!Полезный модуль.

Буду апдейтится!

Куда высылать пиво?

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


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

А если немного с другой стороны зайти?

 

iptables, TCPMSS, --set-mss

 

И патчить не нужно, правда только tcp, но, по опыту, этого хватает.

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


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

А если немного с другой стороны зайти?

 

iptables, TCPMSS, --set-mss

 

И патчить не нужно, правда только tcp, но, по опыту, этого хватает.

 

тогда можно сделать и ifconfig ethx mtu 1476, по опыту этого тоже хватает для борьбы с тунелями.

А изменение mss действительно проблематично из-за того, что это tcp only.

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


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

Гость

Спасибо!Полезный модуль.

Буду апдейтится!  

Куда высылать пиво?

 

пожалуста. долго не апдейтил, бо не думал, что в кернеле так оперативно api сменят :)

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


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

А если немного с другой стороны зайти?

 

iptables, TCPMSS, --set-mss

 

И патчить не нужно, правда только tcp, но, по опыту, этого хватает.

 

именно так лучше и делать, а снятие флага плохой путь.

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

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


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

Со свежими ядрами Linux и tc, можно снять флаг DF с пакета, который должен быть инкапсулирован в IPIP и тогда DF не перенесется в заголовок IPIP пакета.

tc q add dev eth1 ingress

tc f add dev eth1 \
parent ffff: pref 10 protocol ip \
handle ::1 u32 \
match ip df \
action pedit munge offset 6 u8 set 0x00 retain 0xbf \
pipe action csum ip

eth1 - интерфейс, через который пакеты с флагом DF попадают в роутер

 

В rfc2003 "IP Encapsulation within IP" написано:

...
if the "Don't Fragment" bit is set in the inner IP header, it MUST be set in the outer IP header;
if the "Don't Fragment" bit is not set in the inner IP header, it MAY be set in the outer IP header
...

И не было бы никаких проблем, если бы не негодяи, которые блокируют ICMP сообщения "Destination Unreachable" c "Fragmentation required, and DF flag set" которые шлет Linux, когда не может запихнуть пакет в интерфейс c меньшим MTU.

 

Cisco и FreeBSD используют грязный хак, не вставляя DF флаг в IPIP пакет :)

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


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

Была проблема при установлении ipsec поверх vpn (pptp).

Как решение поставили на тоннель MTU 1512.

То есть получилось так, что в тоннель пакет лезет без фрагментации, а сам gre пакет подвергается фрагментации.

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

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


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

Cisco и FreeBSD используют грязный хак, не вставляя DF флаг в IPIP пакет :)

1. Во фре не один способ IPIP.

2. DF давно снимается тем же ПФ, при желании.

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


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

археологи, вы на дату смотрите.

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


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

s/археологи/некрофилы/

Помнится, последнним этот патчик видел под 2.6.20.

Когда понадобилось сделать под 2.6.36 - нагуглил необходимые изменения за полчаса (опять API поменяли).

В таргете же iptables вообще надо было поменять ipt_* на xt_* и он прекрасно собирался.

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


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

s/некрофилы/энтузиасты/

Собственно, патч для снятия IP:DF я тоже помню, только теперь strace.net лежит, более нигде не смог найти патчик. Если у кого остался - выложите в сеть, пожалуйста, попробую к xtables прикрутить, вдруг получится. Также, волнует вопрос один - после прохождения пакетом таблицы iptables:mangle контрольная сумма IP пересчитывается? Не то чтобы я против изучения tc - всего лишь хотелось малой кровью через iptables справиться.

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


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

Контрольная сумма "пересчитывается". Для пересчёта вычитается старое значение и прибавляется новое, чтобы не считать всё целиком.

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


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

Реквестирую патч. :)

 

UPD: как было замечено в одном источнике, флаг DF может быть снят в заголовке пакета установкой значения 1 параметра ядра net.ipv4.ip_no_pmtu_disc (/proc/sys/net/ipv4/ip_no_pmtu_disc, кому как удобнее). Тем не менее, патч хочу получить для самообразования.

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

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


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

Join the conversation

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

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

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

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

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

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

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