Провайдеры и MTU/MSS/PMTU / Хабр

Что такое mtu и mss?

MTU (англ. maximum transmission unit) означает максимальный размер полезного блока данных одного пакета (англ. payload), который может быть передан протоколом без фрагментации.

MSS (англ. Maximum segment size) является параметром протокола TCP и определяет максимальный размер полезного блока данных в байтах для TCP-пакета (сегмента). Таким образом этот параметр не учитывает длину заголовков TCP и IP.

PMTU (Path MTU) – данный параметр обозначает наименьший MTU среди MTU каналов данных, находящихся между источником и приемником.

Википедии, конечно, спасибо, но если по-русски, то грубо говоря каждый пакет в сети – это бандероль со своими габаритами и вот как раз эти габариты надо менять, подгоняя под оператора связи (ISP). Не долго думая я начал пинговать Хабр с разным размером юнита (MTU) и уткнулся в 1450.

Диагностика

Ну думаю: что-то тут не так. Сетевое у меня Mikrotik, возможностей уйма, пойду искать причину на своей стороне. Лезу в логи и вижу как посыпался DoH (РКН, приветик) и крайне удивляюсь этому. решил временно отрубить DoH и дать 1.1.1.1… Ситуация не изменилась.

Начал резолвить адреса хотя бы чего-нибудь, все через раз. Решил прокинуть трейс до Хабра и смотрю на “потяряшки”. Думаю дай звякну в поддержку, вдруг умное чего скажут. Те репу почесали, сказали что не видят мою сеть за роутером (nat >> forward >> change ttl >> 1 :D) и изобразили что-то вроде “Мы ХЗ”.

Начал копать дальше. Вспомнил всю балду, которую знаю о пакетах и тут осенило.

Предыстория

Значит нужен мне второй канал связи, да этак мегабит 300 в секунду. В моём городе немного провайдеров, по этому выбрать не дали и пришлось подключаться к WiFire (он же NetByNet, MegaFon и так далее). Подключился, потестил, 300 мегабит, балдеж. Решил я значит почитать что нового на своем любимом Хабре и опа: он не открывается, но охотно пингуется.

Решение проблемы

По скольку причина была уже ясна, а время пять утра – решение было достаточно быстрым.

Топаем в консоль и пишем:

/ip firewall mangle add chain=forward action=change-mss new-mss=clamp-to-pmtu passthrough=no tcp-flags=syn protocol=tcp out-interface=*название WAN интерфеса* tcp-mss=1300-65535 log=no

/ip firewall mangle add chain=forward action=change-mss new-mss=clamp-to-pmtu passthrough=no tcp-flags=syn protocol=tcp in-interface=*название WAN интерфеса* tcp-mss=1300-65535 log=no

Разбираем что написали:

/ip firewall mangle – переходим по разделам и выберем что нужно.

add – команда добавления правила

chain=forward – указываем тип цепочки

action=change-mss – указываем что нужно менять MSS

new-mss=clamp-to-pmtu – указываем параметры, что используем PMTU и базируемся на нем

passthrough=no – не преходить к след. правилу пока не выполним это

tcp-flags=syn – выставляем флаг пакета для нумерации, что бы не терялся

protocol=tcp – указываем протокол с которым будем работать

in-interfaceout-interface – интерфейсы входвыход

tcp-mss=1300-65535 – разрешенный диапазон размера пакета

log=no – не логировать

и бинго, наконец-то открывается Хабр и все что мне нужно.

В сетевой части я не “Ас”, по этому сумбурно вышло, да и на Хабре статьи не нашел похожей, может будет кому полезно.

Средства mangle для маркировки ip-пакетов —

Резюме

Средства mangle позволяют маркировать IP-пакеты специальными метками. Эти метки используются для идентификации пакетов различным оборудованием маршрутизатора. В дополнение, средства mangle используются для изменения некоторых полей в заглавии IP, таких как TOS (DSCP) и TTL.

Спецификации

Требуемые пакеты: system

Необходимая лицензия: Level1

Уровень меню: /ip firewall mangle

Стандарты и технологии: IP

Аппаратное обеспечение: Зависит от количества правил mangle.

Описание

Mangle это “маркер”, который маркирует пакеты специальными метками для дальнейшей обработки. Многие другие средства в RouterOS используют эти маркеры. Например, деревья очередей и NAT. Они идентифицируют пакеты по их маркерам и, соответственно, обрабатывают их. Марки mangle используются только маршрутизатором, они не передаются по сети.

Описание свойств

action (accept | add-dst-to-address-list | add-src-to-address-list | change-dscp | change-mss |change-ttl | jump | log | mark-connection | mark-packet | mark-routing | passthrough | return | set -priority | strip-ipv4-options; по умолчанию: accept) – предпринимаемое действие, если пакет соответствует правилу:

• accept – принять пакет. Ничего не делать. Пакет проследует через маршрутизатор и ни одно правило не будет применено к нему;

• add-dst-to-address-list – добавить адрес назначения IP пакета в список адресов, определенный параметром address-list;

• add-src-to-address-list – добавить адрес источника IP пакета в список адресов, определенный параметром address-list;

• change-dscp – изменение значение поля DSCP, определённого параметром new-dscp;

• change-mss – изменение максимального размера сегмента пакета на значение, определенное параметром new-mss;

• change-ttl – изменение значения поля время жизни пакета на значение, определенное параметром new-ttl;

• jump – переход в цепочку, определенную значением параметра jump-target;

• log – каждое соответствие этому действию будет добавлять сообщение в системный журнал;

• mark-connection – маркировка, определенная параметром new-connection на всем соединении, которое соответствует правилу;

• mark-packet маркировка, определенная параметром new-packet-mark на пакете, который соответствует правилу;

• mark-routing маркировка пакета, определенная параметром new-routing-mark. Этот вид маркировки используется только для политики маршрутизации;

• passthrough – игнорировать это правило и перейти к следующему;

• return – игнорировать это (текущее) правило и перейти к следующему;

• set-priority – установить приоритет, определенный параметром new-priority, на исходящие пакеты, посылаемые через соединение, которое способно транспортировать приоритет(VLAN или включённый WMM беспроводной интерфейс)

Сейчас ищут техподдержку:  Организация эффективной техподдержки 1С внутри компании

• strip-ipv4-options – отделение IPv4 опций полей из IP пакета

address-list(name) – имя из списка адресов, в котором собранны IP адреса за правилом action=add-dst-to-address или action=add-src-to-address-list. Этот список адресов впоследствии может быть использован для согласования пакетов.

address-list-timeout(time; по умолчанию: 00:00:00) – интервал, по истечении которого, адрес будет удален из списка адресов, определенного параметром address-list. Используется в совокупности с дествием add-dst-to-address-list или add-src-to-addresslist

• 00:00:00 – оставляет адрес в списке адресов навсегда.

chain (forward | input | output | postrouting | prerouting) – цепочка для добавления в нее определенного правила. Так как определенный трафик идет через определенные цепочки, будьте осторожны в выборе цепочки для нового правила. Если при вводе имя не соответствует уже определенной цепочке, будет создана новая цепочка.

comment(text) описательный комментарий для правила. Комментарий может быть использован для соответствия определенному правилу сценария.

connection-bytes(integerinteger) – соответствие пакетов в случае, если определенное количество байт было передано через определенное соединение:

• 0 – бесконечность. Например, connection-bytes=2000000-0 используется это правило, если более чем 2Мб было передано через выбранное соединении.

connection-limit(integernetmask) – ограничить количество соединений по адресу или по блоку адресов.

connection-mark(name) – соответствие пакетов, промаркированных средством mangle специфической меткой соединения.

connection-state(estabilished | invalid | new | related) – интерпретирует анализ данных отслеживания соединения для конкретного пакета:

• established – пакет, принадлежащий установленному соединению, например пакет ответа или пакет, который принадлежит ответному соединению;

• invalid – пакет, который не может быть идентифицирован по некоторым причинам. Это может происходить при нехватке памяти и ICMP ошибках, которые не принадлежат другим известным соединениям. Это главный критерий для сброса пакета;

• new – пакет, начинающий новое ТСР соединение;

• related – пакет, связанный с существующим соединением, но не являющийся частью этого соединения. Такой как ICMP ошибка или пакет, который начинает FTP передачу (последнее требует включения трассировщика FTP соединения при помощи /ip firewall service-port).

connection-type(ftp | gre | h323 | irc | mms | pptp | quake3 | tftp) – проверка пакетов из связанных соединений, использующих информацию о них (соединениях), получаемую от их трассирующих помощников. Соответствующие вспомогательные соединения должны быть разрешены в /ip firewall service-port.

content(text) – текст, который должны содержать пакеты для соответствия правилу.

dscp(integer:0..63) – значение поля IP-заголовка DSCP (ex-ToS).

dst-address(IP addressnetmaskIP addressIP address) – определенный диапазон адресов, которым может быть предназначен IP пакет. Примечание: консоль конвертирует ввод значения address/netmask в правильный адрес, т.е 1.1.1.1/24 будет конвертирован в 1.1.1.0/24.

dst-address-list(name) – соответствие назначенного адреса пакета списку адресов, определенному пользователем.

dst-address-type(unicast | local | broadcast | multicast) – соответствие адреса назначения IP пакета одному из типов:

• unicast – IP адреса для передачи типа точка-точка. В данном случае существует только один отправитель и один получатель;

• local – соответствие адресов, присвоенных интерфейсам маршрутизатора;

• broadcast – IP пакет, посылаемый от одной точки к другим точкам IP подсети;

• multicast – данный тип IP адресации предназначен для передачи от одной или более точек к другим точкам.

dst-limit(integertimeintegerdst-address | dst-port | src-addresstime) -ограничение количества пакетов в секунду, направленных на IP адрес или порт назначения. Каждый IP адрес/порт назначения владеет собственным ограничением. Опции перечислены ниже (в порядке появления):

• count – максимальная средняя интенсивность потока, измеряемая количеством пакетов в секунду (pps), если не сопровождается опцией time;

• time – определяет временной интервал, в течении которого будет измеряться интенсивность потока пакетов;

• burst – число пакетов соответствующих пику;

• mode – классификатор для ограничения интенсивности пакетов;

• expire – определенный интервал времени, по истечении которого записанный IP адрес/порт будет удален.

dst-port(integer: 0..65535 integer: 0..65535) – номер или диапазон номеров порта назначения.

fragment(yes|no) – является ли пакет фрагментом IP пакета. Стартовый пакет(т.е первый фрагмент) не учитывается. Примечание: при включенном трассировщике соединений, фрагментов не будет, так как система автоматически присоединит каждый пакет.

hotspot(множественный выбор: auth | from-client | http | local-dst | to-client) – соответствие пакетов, полученных от клиентов при различных Hot-Spot условиях. Все значения могут быть отвергнуты:

• auth – правда, если пакет пришел от аутентифицированного HotSpot клиента;

• from-client – правда, если пакет пришел от любого HotSpot клиента;

• http – правда, если HotSpot клиент посылает пакет на адрес и порт, ранее определенный как его прокси сервер (Universal Proxy technique) или если порт назначения 80 и включено прозрачное проксирование для данного клиента;

• local-dst – правда, если пакет имеет локальный IP-адрес назначения;

• to-client – правда, если пакет посылается клиенту.

icmp-options(integerinteger) – соответствие ICMP типу: кодовое поле.

in-bridge-port(name) – актуальный интерфейс, на который заходит пакет, следующий через маршрутизатор (если интерфейсом является мост, то это свойство соответствует актуальному порту моста, пока in-interface ? мост).

in-interface(name) – интерфейс, на который заходит пакет, следующий через маршрутизатор (если интерфейсом является мост, то исходящий из мостового интерфейса пакет создастся самостоятельно).

Сейчас ищут техподдержку:  Госфункции

ingress-priority(integer: 0..63) – INGRESS (полученный) приоритет пакета, если установлен (в противном случае ? 0). Приоритет может быть получен также от VLAN или WMM.

ipv4-options(any | loose-source-routing | no-record-route | no-router-alert | no-source-routing |no-timestamp | none | record-route | router-alert | strict-source-routing | timestamp) – соответствие заголовка опции ipv4:

• any – соответствие, по крайней мере, одной опции ipv4;

• loose-source-routing – пакеты, соответствующие опции маршрутизация через заданные узлы. Эта опция используется для маршрутизации интернет дейтаграмм, базирующихся на информации поставляемой источником;

• no-record-route – определяет пакеты без опции записи маршрута. Эта опция используется для маршрутизации интернет дейтаграмм, базирующихся на информации, поставляемой источником;

• no-router-alert – пакеты, соответствующие предупреждению нет маршрута;

• no-source-routing – соответствие пакетов опции нет источника маршрутизации;

• no-timestamp – соответствие пакетов опции отсутствия временной отметки;

• record-route – соответствие пакетов опции записи маршрута;

• router-alert – соответствие пакетов опции изменения маршрутизации;

• strict-source-routing – соответствие пакетов опции маршрутизации только через заданные узлы;

• timestamp – соответствие пакетов опции временной отметки.

jump-target(forward | input | output | postrouting | prerouting name) – название целевой цепочки для перехода в неё, если используется action=jump.

layer7-protocol(name) – Layer 7 – название фильтра, установленного в меню /ip firewall layer7-protocol. Предостережение: при использовании необходима большая вычислительная мощность.

limit(integertimeinteger) – ограничивает интенсивность пакетов, согласно заданному лимиту. Используется для уменьшения количества записей в системном журнале:

• count – максимальная средняя интенсивность пакетов, измеряется в пакетах в секунду(pps), если не сопровождается опцией Time;

• time – определяет временной интервал, в течение которого будет происходить измерение интенсивности пакетов;

• burst – количество пакетов, соответствующих пику.

log-prefix(text) – все сообщения, записанные в журнал событий, будут содержать префикс, определенный здесь. Используется в паре с action=log.

new-connection-mark(name) – определение нового значения метки соединения, которое будет использоваться в связке с action=mark-connection.

new-dscp(integer: 0..63) – определение нового значения поля DSCP, которое будет использоваться в паре с action=change-dscp.

new-mss(integer) – определение значения MSS которое будет использоваться в паре с action=change-mss.

new-packet-mark(name) – определение нового значения метки пакета, которое будет использоваться в паре сaction-mark-packet.

new-priority(integer) – определение нового значения приоритета пакета для включения приоритетно-разрешенных интерфейсов, используется в паре с action=set-priority.

• from-dscp – установить приоритет пакета взятого из значения его поля DSCP;

• from-ingress – установить приоритет пакета, взятый из INGRESS приходящего приоритета пакета (в том случае, если пакет был получен от интерфейса, который поддерживает приоритеты VLAN или WMM – включенного беспроводного интерфейса; если не установлено – 0).

new-routing-mark(name) – определение нового значения метки маршрута. Используется в паре с action=mark-routing.

new-ttl(decrement | increment | setinteger) – определение нового значения поля TTL, используется в паре с action=change-ttl.

• decrement – значение поля TTL будет декрементировано на указанное значение;

• increment – значение поля TTL будет инкрементировано на указанное значение;

• set: – значение поля TTL будет установлено в указанное значение.

nth(integerinteger: 0…15integer) – определенный Nth пакет, полученный в соответствии с правилом. Может использоваться один из 16 доступных счетчиков пакетов:

• every – каждое соответствие Every 1th пакету. Для примера, если Every=1, тогда правило соответствия отрабатывается на каждом 2-ом пакете;

• counter – счётчик. Счётчик инкрементируется каждый раз, когда в правиле содержится соответствие n-ому пакету;

• packet соответствие заданному номеру пакета. Значение, по понятным причинам, должно находиться между 0 и every. Если эта опция используется для заданного счетчика, то должно быть, по крайней мере, одно every 1 правило с этой опцией, покрывающее все значения между 0 и every включительно.

out-bridge-port(name) – актуальный интерфейс, через который транзитный пакет покидает маршрутизатор (если это мост, то это свойство соответствует актуальному порту моста до тех пор, пока out-interface является мостом).

out-interface(name) – интерфейс, через который пакет покидает маршрутизатор (если интерфейс настроен как мост, то пакет самостоятельно появится, чтобы уйти через мостовой интерфейс).

p2p(all-p2p | bit-torrent | direct-connect | edonkey | fasttrack | gnutella | soulseek | warez |winmx) – соответствие пакетов соединениям, принадлежащим одному из перечисленных протоколов P2P.

packet-mark(name) – соответствие пакетов, промаркированных средствами mangle специфическими метками пакетов.

packet-size(integer: 0..65535integer: 0..65535) – соответствие пакета определенному размеру или диапазону размеров, указанному в байтах:

• min – значение, определяющее нижнюю границу диапазона или конкретное значение;

• max – определяет верхнюю границу диапазона.

passthrough(yes | no; по умолчанию: yes) – разрешено ли пакету следовать далее, после маркировки заданной меткой (свойство действительно, только если действие является меткой пакета, соединения или маршрута).

port(port) – соответствует, если любой (источник или назначение) порт соответствует определенному списку портов или диапазону портов (примечание: при этом должен быть выбран протокол, также как и при использовании соответствий src-port и dst-port).

protocol(ddp | egp | encap | ggp | gre | hmp | icmp | idrp -cmtp | igmp | ipencap | ipip | ipsec -ah |ipsec-esp | iso-tp4 | ospf | pup | rdp | rspf | st | tcp | udp | vmtp | xns -idp | xtp | integer) – соответствие частному IP-протоколу, определяемому по имени или по номеру. Для определения портов необходимо определить протокол.

psd(integertimeintegerinteger) – попытки обнаружения TCP и UDP сканеров. Рекомендуется назначать более низкие значения портам с большими номерами, чтобы уменьшить частоту ложных обращений, как, например, при пассивной FTP передаче:

Сейчас ищут техподдержку:  Номер горячей линии навител

• WeightThreshold – общий объем последних TCP/UDP пакетов, пришедших на порты, отличные от портов назначения, от одного хоста должны быть обработаны как сканер портов;

• DelayThreshold – задержка пакета, пришедшего на порт, отличный от порта назначения и пришедшие от одного хоста должны быть обработаны как сканер портов

• LowPortWeight – объем пакетов с привилегированными (ниже 1024) портами назначения;

• HighPortWeight – объем пакетов с непривилегированными портами назначения.

random(integer: 1..99) – согласовывает пакеты случайно, с заданной вероятностью.

routing-mark(name) – соответствия пактов, отмеченных специфической меткой маршрута.

src-address(IP addressnetmaskIP addressIP address) – определяет диапазон адресов, от которых пришел IP-пакет. Примечание: консоль конвертирует ввод значения address/netmask в действительный адрес, т.е. 1.1.1.1/24 конвертируется в 1.1.1.0/24.

src-address-list(name) – соответствие адреса источника пакета списку адресов, определенному пользователем.

src-address-type(unicast | local | broadcast | multicast) – соответствие типа адреса источника IP-пакета, одному из:

• unicast – IP адрес, использующийся для передачи от одной точки к другим. В данном случае есть только один отправитель и один получатель;

• local – соответствие адресов, назначенных интерфейсам маршрутизатора;

• broadcast – IP-пакет, посылаемый от одной точки ко всем другим точкам IP-подсети;

• multicast – этот тип IP адресации предназначен для передачи от одной или более точек к множеству других точек.

src-mac-address(MAC address) – MAC адрес источника.

src-port(integer: 0..65535integer: 0..65535) – номер или диапазон номеров порта источника.

tcp-flags(multiple choice: ack | cwr | ece | fin | psh | rst | syn | urg) ниже перечислены tcp флаги:

• ack – подтверждение данных;

• cwr – уменьшение окна переполнения;

• ece – флаг ECH-echo (явное уведомление о переполнении);

• fin – закрытие соединения;

• psh – функция проталкивания;

• rst – сбросить соединение;

• syn – новое соединение;

• urg – срочные данные.

tcp-mss(integer: 0..65535) – соответствие значению TCP MSS IP пакета.

time(timetimesat | fri | thu | wed | tue | mon | sun) – позволяет создать фильтр, основанный на дате и времени поступления пакета или на дате и времени отправления для локально сгенерированных пакетов.

Примечание

Вместо создания двух правил, для маркировки пакета, соединения или маршрута, необходимо отметить и закончить действие таблицы mangle на данном событии (другими словами, промаркировать и принять пакет), нужно отключить установленное по умолчанию свойство passthrough промаркированного правила.

Как правило, маркировка маршрута не используется для P2P, так как маршрутизация P2P трафика всегда ведется через шлюз по умолчанию.

Примеры использования Описание

В следующей секции обсуждаются некоторые примеры использования средства mangle.

Peer-to-Peer Traffic Marking

[admin@MikroTik] > /ip firewall mangle add chain=forward

… p2p=all-p2p action=mark-connection new-connection-mark=p2p_conn

[admin@MikroTik] > /ip firewall mangle add chain =forward

… connection-mark=p2p_conn action=mark-packet new-packet-mark=p2p

[admin@MikroTik] > /ip firewall mangle add chain=forward

… connection-mark=!p2p_conn action=mark-packet new-packet-mark=other

[admin@MikroTik] > /ip firewall mangle print

Flags: X – disabled, I – invalid, D – dynamic

0   chain=forward p2p=all-p2p action=mark-connection new-connection-mark=p2p_conn

1  chain=forward connection-mark=p2p_conn action=mark-packet new-packet-mark=p2p

2  chain=forward packet-mark=!p2p_conn action=mark-packet new-packet-mark=other

[admin@MikroTik] >

[admin@MikroTik] > /queue tree add parent=Public packet -mark=p2p limit-at=1000000

… max-limit=100000000 priority=8

[admin@MikroTik] > /queue tree add parent=Local packet-mark=p2p limit-at=1000000

… max-limit=100000000 priority=8

[admin@MikroTik] > /queue tree add parent=Public packet -mark=other limit-at=1000000

… max-limit=100000000 priority=1

[admin@MikroTik] > /queue tree add parent=Local packet-mark=other limit-at=1000000

… max-limit=100000000 priority=1

Маркировка по MAC адресам

Для маркировки трафика по известным МАС адресам, которые проходят к/через маршрутизатор выполните следующее:

[admin@MikroTik] > / ip firewall mangle add chain=prerouting

… src-mac-address=00:01:29:60:36:E7 action=mark–connection new-connection-mark=known_mac_conn

[admin@MikroTik] > / ip firewall mangle add chain =prerouting

… connection-mark=known_mac_conn action=mark-packet new-packet-mark=known_mac

Смена MSS

Всем известно, что VPN ссылки имеют меньшие размеры пакетов, чем встроенные в заголовок. Большой пакет с MSS, который превышает MSS для VPN ссылки, предварительно может быть фрагментирован для передачи через данный вид соединения. Однако, если в пакете установлен флаг DF, то он не может быть фрагментирован и должен быть удален. В ссылках, имеющих нарушенный путь MTU (PMTUD) это может создать ряд проблем, включая проблемы с FTP и HTTP передачей данных, а также почтовыми сервисами.

В случае ссылок, с нарушенными PTUMD, уменьшение MSS пакетов, проходящих через VPN соединения, решает эту проблему. Приведенный ниже пример демонстрирует то, как можно уменьшить значение MSS средствами mangle:

[admin@MikroTik] > /ip firewall mangle add out-interface=pppoe-out

… protocol=tcp tcp-flags=syn action=change-mss new-mss=1300 chain=forward

[admin@MikroTik] > /ip firewall mangle print

Flags: X – disabled, I – invalid, D – dynamic

0 chain=forward out-interface=pppoe-out protocol=tcp tcp-flags=syn

action=change-mss new-mss=1300

[admin@MikroTik] >

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Оставьте комментарий

Adblock
detector