
А галки Add defaul route снимать надо?
Код: Выделить всё
/system reset-configuration
Код: Выделить всё
/system package update upgrade
Код: Выделить всё
/system reboot
Код: Выделить всё
/system routerboard upgrade
Код: Выделить всё
/interface bridge
add name=Local_Net
/interface bridge port
add bridge=Local_Net interface=ether3
add bridge=Local_Net interface=ether4
add bridge=Local_Net interface=ether5
Код: Выделить всё
/interface ethernet>
set ether4 master-port=ether3
set ether5 master-port=ether3
Код: Выделить всё
/ip address add address=192.168.1.1/24 interface=Local_Net
В качестве DNS-сервера пусть выдаёт адрес самого Микротика: 192.168.1.1. Чуть позже поясню, почему так./ip dhcp-server setup
Код: Выделить всё
/ip dns set allow-remote-requests=yes
Код: Выделить всё
/user add name=supername password=superpass group=full
/quit
Код: Выделить всё
/user disable admin
Код: Выделить всё
/system identity set name=new_name
Код: Выделить всё
/system ntp client set enabled=yes mode=unicast primary-ntp=89.109.251.22 secondary-ntp=89.109.251.23
/system clock set time-zone-name=Europe/Moscow
Код: Выделить всё
/interface pppoe-client add name=UTK user=ppp_user password=ppp_pasw use-peer-dns=yes interface=ether1
Код: Выделить всё
/ip address print
/ping mail.ru
Код: Выделить всё
/ip address add address=80.45.21.34/30 interface=ether2
Код: Выделить всё
/ip dns set servers=ip_server1,ip_server2
Код: Выделить всё
/ip firewall nat add chain=srcnat action=masquerade out-interface=UTK
Код: Выделить всё
/ip firewall nat add chain=srcnat action=src-nat protocol=tcp src-address=192.168.1.0/24 to-addresses=80.45.21.34 out-interface=ether2
Код: Выделить всё
/ip route add dst-address=0.0.0.0/0 gateway=UTK,ether2 check-gateway=ping
Код: Выделить всё
/ip route add dst-address=0.0.0.0/0 gateway=UTK,UTK,ether2 check-gateway=ping
Код: Выделить всё
/interface pppoe-client set 0 add-default-route=yes
Код: Выделить всё
/ip route add dst-address=0.0.0.0/0 gateway=80.45.21.34 distance=2 check-gateway=ping
Действие MARK писал(а):Используется для установки меток для определенных пакетов. Это действие может выполняться только в пределах таблицы mangle. Установка меток обычно используется для нужд маршрутизации пакетов по различным маршрутам, для ограничения трафика и т.п.. За дополнительной информацией вы можете обратиться к Linux Advanced Routing and Traffic Control HOW-TO. Не забывайте, что "метка" пакета существует только в период времени пока пакет не покинул брандмауэр, т.е. метка не передается по сети. Если необходимо как-то пометить пакеты, чтобы использовать маркировку на другой машине, то можете попробовать манипулировать битами поля TOS.
Код: Выделить всё
add action=mark-connection chain=prerouting dst-address-type=!local in-interface=ether2 new-connection-mark=l2tp-out1_conn passthrough=yes per-connection-classifier=src-address:2/0 src-address=172.16.0.0/16
add action=mark-connection chain=prerouting dst-address-type=!local in-interface=ether2 new-connection-mark=l2tp-out2_conn passthrough=yes per-connection-classifier=src-address:2/1 src-address=172.16.0.0/16
add action=mark-routing chain=prerouting connection-mark=l2tp-out1_conn in-interface=ether2 new-routing-mark=to_l2tp-out1 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=l2tp-out2_conn in-interface=ether2 new-routing-mark=to_l2tp-out2 passthrough=yes
Это действие ставит метку, которая используется исключительно при выборе пути дальнейшей пересылки. К примеру:mark-routing - place a mark specified by the new-routing-mark parameter on a packet. This kind of marks is used for policy routing purposes only
Код: Выделить всё
/ ip route
add dst-address=0.0.0.0/0 gateway=10.111.0.1 routing-mark=to_ISP1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.112.0.1 routing-mark=to_ISP2 check-gateway=ping
Код: Выделить всё
add dst-address=0.0.0.0/0 gateway=10.111.0.1 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.112.0.1 distance=2 check-gateway=ping
Клеймить каждый пакет очень дорогое удовольствие, особенно, если правило содержит много признаков для сравнения из заголовка IP-пакета или адресного листа, содержащего сотни записей.Marking each packet is quite resource expensive especially if rule has to match against many parameters from IP header or address list containing hundreds of entries
К счастью, если включено отслеживание соединений, мы можем помечать соединения, что гораздо лучше!Fortunately if connection tracking is enabled, we can use connection marks to optimize our setup.
Код: Выделить всё
/ip firewall mangle
add chain=forward protocol=tcp port=!80 dst-address-list=first connection-state=new action=mark-connection \
new-connection-mark=first
add chain=forward connection-mark=first action=mark-packet new-packet-mark=first passthrough=no
add chain=forward protocol=udp dst-address-list=second connection-state=new action=mark-connection \
new-connection-mark=second
add chain=forward connection-mark=second action=mark-packet new-packet-mark=second passthrough=no
Now first rule will try to match data from IP header only from first packet of new connection and add connection mark. Next rule will no longer check IP header for each packet, it will just compare connection marks resulting in lower CPU consumption. Additionally passthrough=no was added that helps to reduce CPU consumption even more.
Здесь автор или переводчик допустили неточность: состояние NEW присваивается не пакету, а соединению, разумеется. А при прохождении ответного пакета состояние соединения меняется на ESTABLISHED (т.е. установлено) - всё верно.Механизм определения состояний писал(а):Механизм определения состояния (state machine) является отдельной частью iptables и в действительности не должен бы так называться, поскольку фактически является механизмом трассировки соединений. Однако значительному количеству людей он известен именно как "механизм определения состояния" (state machine). В данной главе эти названия будут использоваться как синонимы. Трассировщик соединений создан для того, чтобы netfilter мог постоянно иметь информацию о состоянии каждого конкретного соединения. Наличие трассировщика позволяет создавать более надежные наборы правил по сравнению с брандмауэрами, которые не имеют поддержки такого механизма.
В пределах iptables, соединение может иметь одно из 4-х базовых состояний: NEW, ESTABLISHED, RELATED и INVALID.
...
Трассировка соединений производится в цепочке PREROUTING, исключая случаи, когда пакеты создаются локальными процессами на брандмауэре, в этом случае трассировка производится в цепочке OUTPUT. Это означает, что iptables производит все вычисления, связанные с определением состояния, в пределах этих цепочек. Когда локальный процесс на брандмауэре отправляет первый пакет из потока, то в цепочке OUTPUT ему присваивается состояние NEW, а когда возвращается пакет ответа, то состояние соединения в цепочке PREROUTING изменяется на ESTABLISHED, и так далее. Если же соединение устанавливается извне, то состояние NEW присваивается первому пакету из потока в цепочке PREROUTING. Таким образом, определение состояния пакетов производится в пределах цепочек PREROUTING и OUTPUT таблицы nat.
Код: Выделить всё
/ip firewall mangle
add chain=forward src-address=a.a.a.0/24 action=mark-packet new-packet-mark=VoIP\
passthrough=no comment="VoIP" disabled=no
add chain=forward dst-address=a.a.a.0/24 action=mark-packet new-packet-mark=VoIP\
passthrough=no comment="VoIP" disabled=no
В скайпе нет предопределённых портов, на которые можно уверенно опереться.Какие порты надо открыть чтобы использовать Skype? писал(а):Если вы не очень разбираетесь в файерволлах или портах, попросите системного администратора или технически грамотных друзей помочь вам. Как минимум для работы Skype нужны неограниченные исходящие подключения на все порты больше 1024 или порты 80 и 443 (первый вариант предпочтительней). Если вы не сделаете одно из этих действий Skype вообще может не заработать. Качество связи и другие аспекты работы Skype можно значительно улучшить если вы откроете также исходящие UDP соединения для портов больше 1024 и позволите UDP запросам возвращаться.
К вопросу о лучшем качестве голоса также можно добавить об открытии входящего TCP и/или UDP трафика на отдельный порт, который вы можете увидеть в настройках Skype. Этот порт выбирается случайным образом при установке программы Skype. В случае файерволла его можно легко настроить. В некоторых роутерах, вы не можете сконфигурировать входящие UDP для всех (но вы все таки можете настроить переадресацию входящих TCP портов, что и надо сделать).
Случайный выбор портов улучшает пропускную способность NAT для случаев, когда несколько пользователей пользуются одним NAT; если все они будут использовать одни и те же порты, большинство NAT могут ухудшить качество связи Skype.
Код: Выделить всё
/ip firewall mangle
add chain=forward tos=xxx action=mark-packet new-packet-mark=VoIP passthrough=no \
comment="voip tos xxx" disabled=no
Dante Alighieri писал(а):Земную жизнь пройдя до половины,
Я очутился в сумрачном лесу,
Утратив правый путь во тьме долины
Каков он был, о, как произнесу,
Тот дикий лес, дремучий и грозящий,
Чей давний ужас в памяти несу!
Так горек он, что смерть едва ль не слаще.
Но, благо в нем обретши навсегда,
Скажу про все, что видел в этой чаще...
Вам всё понятно? Нет? Тогда обратимся к статье Александра Кузьмицкого Задание уровней качества связи.Семинар QoS Лучшая практика писал(а):Hierarchical Token Bucket
Вся реализация управления пропускной способностью в
RouterOS основана на иерархии - Hierarchical Token Bucket
(HTB)
HTB позволяет вам создавать иерархические структуры
очередей и определять отношения между очередями
RouterOS поддерживает 3 виртуальных HTB (global-in,
global-total, global-out) и еще один прямо перед каждым
выходным интерфейсом.
Золотые слова! Очевидно, сейчас это досадное упущение будет исправлено и начинающие системные администраторы смогут насладиться русскоязычной документацией!Не секрет, что зачастую администраторам, в особенности начинающим, сложно разобраться во всех приведенных алгоритмах и принципах работы шейпера, вынуждая учиться методом проб и зачастую не безобидных ошибок. Так сложилось, что для этой категории пользователей очень мало простой и доступной русскоязычной документации, одним из первых начинаний которой и станет эта статья.
Вот так, переведя с английского на латынь, Александр посчитал что документация стала доступной для русскоязычных пользователей.Для начала рассмотрим несколько понятий, которыми мы будем пользоваться в дальнейшем.
Технология, которая позволяет ограничивать скорость и качество доступа в Интернет, называется шейпинг (от англ. Shape - форма). Образно говоря - это технология придания некой формы графику загрузки канала.
Алгоритм - это последовательность действий.Шейпер - это алгоритм, который помимо управления очередностью пакетов позволяет отбрасывать не удовлетворяющие условиям. К таковым относятся алгоритмы PCQ и HTB (о них поговорим несколько позже).
Не понял, в чём разница в сравнении с предыдущим алгоритмом. Снова мы выстраиваем пакеты в очереди по определённым признакам. К тому же снова упомянут PCQ, который вроде бы принадлежит к совершенно другому "типу".Существует ещё один тип алгоритмов, используемых для управления движением пакетов внутри шейпера Schedulers. Их задача состоит только в формировании очередей согласно приоритетам пакетов, адресу источника, получателя и другим параметрам. К этому типу алгоритмов относятся PFIFO, BFIFO,SFQ, PCQ, RED.
Только мне кажется, что Александр четыре раза сказал одно и то же? К слову сказать, "дисциплина" - есть "совокупность твердо установленных правил". Что сильно смахивает на "алгоритм". Но так же "Строгое и безусловное чинопочитание во всей армии, повиновение старшему, соблюдение всех правил службы". Так-так! Вырисовываются уровни подчинения, т.е. та самая "иерархия", с которой мы начали!Под-очередь - очередь, сформированная из пакетов по тому или иному признаку.
Queuing discipline (qdisc - дисциплина очереди) - алгоритм, который захватывает пакеты и точно определяет в каком порядке и каким образом они будут двигаться.
Это больше, чем я хотел узнать. Но раз уж влез - придётся идти до конца.HTB
В основе шейпинга, используемого в Mikrotik, лежит дисциплина очереди HTB, реализованная во многих Linux-системах. Ее изучение является достаточно сложной, однако необходимой задачей для новичка, потому как без этих знаний дальше неудачных попыток и копирования правил из документации мало кто заходит.
Список основных возможностей по управлению трафиком в Mikrotik выглядит следующим образом:
ограничение скорости по IP-адресам, подсетям, протоколам, портам, времени суток и другим параметрам;
ограничение P2P-трафика (BitTorrent, eMule);приоритизация одних потоков пакетов над другими;
использование пиковых скоростей для быстрого WEB-браузинга;
разделение канала между пользователями поровну или в других пропорциях;
возможность задания гарантированной скорости.
Что такое иерархия мы разобрались. "Класс" происходит от лат. classis - порядок.Ключевым понятием для HTB является класс. Приставка Hierarhical в аббревиатуре HTB означает, что дисциплина позволяет строить иерархию классов.
Алгоритм текущего (или дырявого) ведра называется так по аналогии с протекающим ведром. Скорость втекания жидкости в ведро определяет согласованную скорость передачи, а скорость вытекания — реальную среднюю скорость передачи. Если дырка в ведре настолько большая, что вся жидкость, втекающая в ведро, сразу из него вытекает, скорость вытекания не может быть больше скорости втекания. То есть реальная средняя скорость передачи никогда не превысит заданной согласованной скорости.
Задача алгоритма — принять решение: передать пакет или отбросить. Параметрами алгоритма являются скорость поступления маркеров в «ведро» (бит/c) и объём «ведра» или «вёдер» (если в алгоритме используется два «ведра»). Один маркер может соответствовать одному биту передаваемой информации. Скорость поступления маркеров определяет среднюю согласованную скорость передачи информации (CIR — commited information rate). Данная скорость гарантируется при передаче информации. Объём «ведра» определяет согласованную величину всплеска (committed burst size (CBS) или exceed burst size (EBS), если в алгоритме используется два «ведра»).
Рассмотрим пример с устройством, на котором работает алгоритм текущего ведра. Пусть размер «ведра» равен 10 кбайт, а согласованная скорость равна 3 кбайт/c. Допустим, что в момент времени t1 «ведро» содержит 3500 маркеров. Пришедший в этот же момент времени пакет размером 1500 байт будет отправлен с исходящего интерфейса, поскольку его размер меньше числа маркеров в «ведре» (1500<3500). При этом из ведра удалится 1500 маркеров и останется — 2000 маркеров. В момент времени t2=t1+100 мс в «ведро» добавится 300 маркеров (3000 м/с * 0,1 с = 300 м) и на входящий интерфейс поступит новый пакет (1500 байт). Данный пакет также будет передан с исходящего интерфейса, так как 1500<2000+300. Ещё через 100 мс (t3) в «ведре» будет 2300—1500+300=1100 маркеров. Пришедший в данный момент пакет будет отброшен (1500>1100). Все пакеты, которые поступят на устройство между t3 и t4=t3+400 мс, тоже будут отброшены, поскольку в «ведре» в течение этого промежутка будет недостаточно маркеров для их передачи. Если усреднить число переданных пакетов по времени, то мы получим среднюю согласованную скорость CIR=3 кбайта/c. Если пакетов не было длительное время («ведро» успело наполниться), то допускается передача всплеска, то есть пачки пакетов. Размер всплеска определяется количеством маркеров в «ведре». Максимальный размер всплеска определяется объёмом «ведра». Однако средняя скорость передачи не превышает CIR. Пакеты не удовлетворяющие согласованной скорости могут не отбрасываться, а буферизироваться. То есть перед алгоритмом трафик ставится в очередь и на вход алгоритма пакеты будут поступать из начала очереди.
Единственный параметр, используемый для конфигурирования данного алгоритма, - это pfifo-limit (bfifo-limit). Он указывает на количество байт, которые могут храниться в выходном буфере. Не попавшие в буфер пакеты будут разрушаться.
Тут ведь какое дело. Если мы с помощью Mark уже разделил потоки по признакам адреса отправителя/получателя, то смысла в PCQ нет и можно использовать SFQ. Но если мы грубо выделили весь входящий трафик лишь для того, что бы отправить его в очередь (никак иначе ведь этого не сделать) - то можно деление на потоки по адресу источника/получателя и порту источника/получателя отдать на откуп PCQ.PCQ (Per Connection Queuing) является частным случаем SFQ за тем исключением, что формирование потоков в под-очереди будет происходить в соответствии с неким правилом. Это может быть адрес источника/получателя и порт источника/получателя. Таким образом можно равномерно распределить скорость между участниками вне зависимости от количества открытых подключений.
Мы не можем управлять скоростью потока. Мы можем лишь отбрасывать, уничтожать пакеты, которые не в силах обработать (т.е. переслать получателю). И мы можем спокойно и без опаски это делать, поскольку опираемся на механизм работы TCP:Алгоритм маркерной корзины (англ. Token Bucket Algorithm) — алгоритм, позволяющий ограничить полосу пропускания канала и в то же время гарантировать некоторую скорость передачи данных (кадров или пакетов). Поскольку скорость передачи пакета по каналу всегда равна скорости передачи битового потока по среде передачи (или скорости модуляции), то для ограничения, или другими словами, уменьшения средней скорости передачи нужно увеличить временные интервалы между пакетами. Ограничение скорости достигается отбрасыванием некоторых пакетов, передача которых ведёт к превышению согласованной скорости.
Протоколы, такие как TCP / IP имеют механизм избыточной надёжности - в случае потери пакетов или не признания их получателем, отправитель начинает посылать меньше данных. С точки зрения интернет-приложений и протоколов, потери пакетов считается обычным делом и вполне ожидаемы.NetworkPro on Quality of Service писал(а):Protocols such as TCP/IP have a back-off mechanism - when lost packets are not acknowledged by the receiver - the sender starts sending less data. From the point of view of Internet Applications and protocols, packet loss is considered normal and informative.
Скорость втекания марок в зелёное ведро, она же "заданная согласованная скорость" определяется ключём limit-at.Алгоритм текущего (или дырявого) ведра называется так по аналогии с протекающим ведром. Скорость втекания жидкости в ведро определяет согласованную скорость передачи, а скорость вытекания — реальную среднюю скорость передачи. Если дырка в ведре настолько большая, что вся жидкость, втекающая в ведро, сразу из него вытекает, скорость вытекания не может быть больше скорости втекания. То есть реальная средняя скорость передачи никогда не превысит заданной согласованной скорости.
Это ещё нужно понять.burst-limit - скорость, которая будет доступна сразу при подключении;
burst-threshold – средняя скорость за последние burst-time секунд;
burst-time - время для подсчета burst-threshold.
Момент, когда клиенту или классу нужно выдать максимальную скорость, определяется следующим образом. Раз в 1/16 времени burst-time вычисляется загрузка канала на указанное число секунд. Если средняя загрузка составила менее burst-threshold, то клиенту или классу выделяется указанная в burst-limit скорость до тех пор, пока она не превысит burst-threshold
RFC 2697 (single rate three color marker) описывает механизм односкоростного трёхцветного маркера. Задача маркера — «покрасить» трафик (пакеты) в три цвета: зелёный, жёлтый и красный. А что делать с этими пакетами разного цвета определяет администратор, управляющий устройством. Зелёные пакеты — это те, для которых хватает маркеров из первого «ведра». Жёлтые — для которых не хватает маркеров из первого «ведра», но хватает из второго. Красные — для которых не хватает маркеров ни из первого, ни из второго «вёдер». Например, зелёные пакеты могут передаваться без изменений, жёлтые — с пониженным приоритетом, красные — отбрасываться.
Мы можем подключить нашу очередь через второй крантик напрямую к жёлтой трубе одновременно продолжая получать их через зелёную (тут у Александра некоторое расхождение с описанием из Википедии, к которому я склоняюсь). Совокупная скорость двух потоков определяется ключём max-limit.Класс может находиться в одном из трех состояний:
Зеленый - пропускная способность правила не превышает параметр limit-at. В этом случае пакеты не двигаются вверх по иерархии, а перемещаются сразу в выходной поток своего уровня согласно приоритетам.
Желтый - пропускная способность правила больше limit-at, но меньше max-limit. В этом случае класс отключается от выходного потока своего уровня и подключается к родительскому классу.
Красный - пропускная способность правила больше max-limit. В этом состоянии класс отключается от родительского и подключается к локальной очереди.
Что выбрать - вы решаете сами в зависимости от задачи.Начиная с v5.8, появился новый тип none и новый тип очереди по умолчанию only-hardware-queue. У всех RouterBOARD данный новый тип очереди будет установлен в качестве умолчательной очереди интерфейса
Как видите, параметр EBS (exceed burst size) отсутствует, поскольку в RouterOS используется алгоритм с одним ведром. В итоге наш чертёж смахивает на одноногого Сильвера.Руководства:Очередь (Queue) писал(а):Для каждой очереди мы можем задать два ограничения скорости передачи:
CIR (Committed Information Rate, гарантированная полоса пропускания) – (limit-at в RouterOS) даже при наихудшем варианте развития событий (общая полоса пропускания забита до отказа - прим. переводчика) потоку будет обеспечена данная скорость передачи трафика независимо от других потоков трафика. В любой момент времени ширина полосы пропускания не сможет упасть ниже данной фиксированной скорости передачи.
MIR (Maximum Information Rate, максимальная полоса пропускания) – (max-limit в RouterOS) максимально возможная скорость передачи данных в потоке в случае наилучшего развития событий, если доступна какая-либо свободная часть полосы пропускания.