понедельник, 11 июля 2011 г.

TCPMSS

TCPMSS — устанавливает максимальный размер TCP-сегмента. Бывает крайне полезной при использовании VPN-подключения[3] в том случае, если VPN-сервер блокирует ICMP-сообщения destination unreachable/fragmentation needed (тип 3, код 4), тем самым нарушая работу процедуры Path MTU discovery.
С точки зрения клиента, эта проблема выглядит так: пинги проходят нормально, но при попытке открыть какую-либо веб-страницу, браузер «подвисает». При этом с самого шлюза все работает нормально. В этом случае достаточно применить на шлюзе следующую команду

iptables -t mangle -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

которая обеспечит автоматическую установку размера сегмента в TCP-заголовках SYN- и SYN,ACK-пакетов в соответствии с минимальным из известных нашему шлюзу значений MTU на пути следования пакета. Например, если пакет пришел с интерфейса eth0 (MTU 1500) и уходит через интерфейс ppp0 (MTU 1492), а суммарный размер заголовков сетевого итранспортного уровней составляет 40 байт (20 байт TCP и 20 байт IP), то целесообразно установить MSS равным 1452 байтам.
Помимо возможности автоматического выбора TCP MSS, вы можете задать необходимое значение и вручную, используя параметр --set-mss значение. Это бывает полезным в том случае, если вам заведомо известно, что дальше на маршруте встречаются участки с еще меньшим MTU, а пограничные сервера этих участков опять же блокируют ICMP destination unreachable/fragmentation needed.
То есть надо добавить в таблицу mangle строку:
-I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1300

вторник, 5 июля 2011 г.

QOS Policy на 3Com H3C S5500/S5820

Была интересная задачка, решил законспектировать. Китайский шейпер :)
Имеется стык в городе А с городами Б и В. Стык осуществляется через оператора mpls сети т.е. в городе А - это один интерфейс, в котором трафик разделяется тэгами. В города Б из города А идёт vlan с номером 20. Есть задача приоритезировать трафик в сторону города Б, при этом не затронув остальной трафик интерфейса.
В Core сети трафик получает метки ip-precedence. Будем различать 3 типа трафика: IPTV (precedence 6), INET (precedence 4), LOCAL (precedence 0). Из города А в город Б полоса 2 гагабита в секунду. Все, что выше - дропается. IPTV трафик чувствителен к потерям т.к. является потоковым видео. Итак, для него ставим полосу 50 мбит/c с возможностью превышать ограничения. Для траифка INET (трафик от абонентов в мир) ставим гарантированную полосу (cir) 1200 мбит/c с превышением до 1500 в пики (pir). Более 1500 трафик не проходит. Для LOCAL ставим cir 400 мбит/c, pir 700.
Тем самым мы гарантируем полосу для трафика IPTV.

Ниже выдержки из конфига. Создаётся классификатор траффика, в котором описываем критерии отбора пакетов, далее описываем действие и собираем это в политику.

#
traffic classifier VIPTV operator and
if-match ip-precedence 6
if-match service-vlan-id 20
traffic classifier INET operator and
if-match service-vlan-id 20
if-match ip-precedence 4
traffic classifier LOCAL operator and
if-match service-vlan-id 20
if-match ip-precedence 0
#

#
traffic behavior IPTV
car cir 51200 cbs 4000 ebs 4000 green pass red pass yellow pass
traffic behavior INET
car cir 1228800 cbs 4000 ebs 4000 pir 1536000 green pass red discard yellow pass
traffic behavior LOCAL
car cir 409600 cbs 4000 ebs 4000 pir 716800 green pass red discard yellow pass
#

qos policy IPTV-INET
classifier IPTV behavior IPTV
classifier INET behavior INET
classifier LOCAL behavior LOCAL

#
interface Ten-GigabitEthernet1/2/1
description TO-MPLS
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 20 3070
qos apply policy IPTV-INET outbound
qos trust dscp
#