IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Пингвинятник (ОС *NIX) (http://www.imho.ws/forumdisplay.php?f=76)
-   -   [FAQ] Модификация ToS / DSCP в FreeBSD (http://www.imho.ws/showthread.php?t=144913)

Plague 07.12.2010 15:07

Модификация ToS / DSCP в FreeBSD
 
Не так давно сие, как утверждает unix-общественность, стало возможно во FreeBSD (в линухе оно есть уже давным-давно), но как утверждает та же общественность,
Цитата:

это средство – в стиле Unix, и позволяет админу прострелить себе ногу.
Описаний перекопированных одно с другого немеряно:
http://nuclight.livejournal.com/126002.html
вот тут картинок по-больше и чуть по-подробней :biggrin: http://blog.wel.org.ua/nix/freebsd/netgraph-%D0%BD%D0%BE%D0%B4%D0%B0-ng_patch

но дюже уж как-то заумно, а ногу отстрелить совсем не хочется.
Хотелось бы разобраться с этой фишкой вообще, ну и сразу практическое применение, как я это вижу и как хотелось бы применить:
Очень хочется посредством этого дела прицепить на торрент-трафик ToS минимального приоритета (0x08). Видимый в этом вопросе смысл вполне очевиден: чтоб торрент-трафик уходил в ожидание при обращении на машину по более важным сервисам, как то OpenVPN, ftp, да и ssh в конце концов. А то если торрент запущен без ограничений по ширине канала - даже ssh иногда еле ворочается...

Hubbitus 07.12.2010 16:17

Цитата:

Сообщение от Plague (Сообщение 1730991)
Очень хочется посредством этого дела прицепить на торрент-трафик ToS минимального приоритета (0x08).

Цитата:

При IP-телефонии применяется класс сервиса 5 (DS-байт равен 0xA0 или 10100000b), а для обычного трафика класс сервиса 0 (DS-байт равен 0×00 или 00000000b). Сравните с ToS – изменилась только терминология, а значение байта передается то же самое.
То есть на сколько я понимаю по умолчанию у всех 0 какраз, и чтобы быстрее проходил надо именно повышать. Понизить кому-то уже некуда.

добавлено через 12 минут
Ага, Af33 это просто имя, какраз со значением 011110 - http://www.cisco.com/en/US/tech/tk54...800949f2.shtml

Ну тогда вроде все становится на свои места. В общем то что у них приводится является пометкой пакетов именно в этот Class 3 что именно УВЕЛИЧИВАЕТ его приоритет почти до максимального (предпоследний, на сколько я понял).

Итак, для SSH тебе нужно будет приблизительно так я думаю:
Код:

/usr/sbin/ngctl -f- <<-SEQ
        mkpeer ipfw: patch 600 in
        name ipfw:600 dscp_af33
        msg dscp_af33: setconfig { count=2 csum_flags=1 ops=[  \
                { mode=7 value=0x03 length=1 offset=1 }        \
                { mode=8 value=0x78 length=1 offset=1 } ] }
SEQ
/sbin/ipfw add 160 netgraph 600 ip from any to any dst-port 22


Plague 12.12.2010 11:50

после ввода в консоль exit не отработало, так и осталось на вопросительном знаке, правило в ipfw не добавило; и ни через tcpdump:
Код:

tcpdump -iem0 -v -A ip host 192.168.1.6 and port 22 | grep tos
ни через wireshark (фильтр по ssh, на клиентской машине) никаких разниц я, соответственно, в пакетах не увидел... :idontnow:

ps. в принципе, я сейчас воткнул на роутер прошиву от dd-wrt, и она позволяет выруливать приоритеты потоков (кстати, Hubbitus, ты оказался прав, и при понижении приоритета для торрентов до уровня "грузового/bulk" - они вообще практически работать перестали), так что с одной стороны решение вопроса (я так надеюсь, проверим завтра, - когда работа начнется) найдено другими средствами; но, с другой стороны, разобраться с данной приблудой тоже было бы не лишним....

Hubbitus 12.12.2010 17:05

Цитата:

Сообщение от Plague (Сообщение 1731589)
после ввода в консоль exit не отработало, так и осталось на вопросительном знаке, правило в ipfw не добавило; и ни через tcpdump:

Не отработало что именно? ngctl или уже ipfw?

Цитата:

Сообщение от Plague (Сообщение 1731589)
ps. в принципе, я сейчас воткнул на роутер прошиву от dd-wrt, и она позволяет выруливать приоритеты потоков

Таким же способом?

Plague 12.12.2010 17:23

Цитата:

Сообщение от Hubbitus (Сообщение 1731614)
Не отработало что именно? ngctl или уже ipfw?

ipfw не интерактивен, да и синтаксис его команды в примере вроде правилен.
а ngctl остается в интеративе и с примером из собственного man http://www.freebsd.org/cgi/man.cgi?q...le&format=html
Цитата:

Сообщение от Hubbitus (Сообщение 1731614)
Таким же способом?

нет, человеческим.. :rolleyes:

Hubbitus 12.12.2010 19:02

Честно говоря не понял что ты под интерактивностью подразумеваешь, но что команда не возвращается это как-то странно помоему. Есть у него возможность просмотреть список подобных правил, добавилось оно или нет?

Цитата:

Сообщение от Plague (Сообщение 1731617)
нет, человеческим..

Это каким же? :)

Plague 12.12.2010 19:24

Цитата:

Сообщение от Hubbitus (Сообщение 1731621)
не понял что ты под интерактивностью подразумеваешь

http://www.freebsd.org/cgi/man.cgi?q...SE&format=html
Цитата:

The ngctl utility creates a new netgraph node of type socket which can be used to issue netgraph commands. If no -f flag is given, no command is supplied on the command line, and standard input is a tty, ngctl will enter interactive mode.
что собственно и имеем:
Код:

# /usr/sbin/ngctl -f- <<-SEQ
?  mkpeer ipfw: patch 300 in
?  name ipfw:300 tos_chg
?  msg tos_chg: setconfig { count=2 csum_flags=1 ops=[ \
?    { mode=7 value=0xf7 length=1 offset=1 } \
?    { mode=8 value=0x02 length=1 offset=1 } ] }
? SEQ
? /sbin/ipfw add 160 netgraph 600 ip from any to any not dst-port 80
?
?
^c

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

вариант создания файла "tos_patch" содержанием
Код:

mkpeer ipfw: patch 300 in               
name ipfw:300 tos_chg                   
 msg tos_chg: setconfig { count=2 csum_flags=1 ops=[ \
  { mode=7 value=0xf7 length=1 offset=1 } \
  { mode=8 value=0x02 length=1 offset=1 } ] }

с последующей
# ngctl -f tos_patch
даёт
Код:

ngctl: send msg: No such file or directory
ngctl: line 1: error in file

Цитата:

Сообщение от Hubbitus (Сообщение 1731621)
Это каким же?

гуёвым...

ps. у меня вообще складывается ощущение что этот мануал все дружно друг с друга поперепостили, поаплодировали, но на практике никто даже не пытался применить, ибо никаких обсуждений, более развернутых нежели тупой репостинг ссылок из первого поста и "ура, круто!" в комментах к нему, лично мне нагуглить не удалось... :idontnow:

Hubbitus 12.12.2010 20:47

Цитата:

Сообщение от Plague (Сообщение 1731625)
что собственно и имеем:

Здрасте
Цитата:

Сообщение от Plague (Сообщение 1731625)
If no -f flag is given

А у нас именно он и есть.

Цитата:

Сообщение от Plague (Сообщение 1731625)
я вообще думаю что управление ipfw (последняя строка) должна быть уже после завершения действий с ngctl результатом которых должен создаться некий "инжект", который ipfw вызывает по этой команде. но раз ничего не завершается, ничего не создается, а следовательно ничего и не цепляется в ipfw.

Разумеется.

Ты просто скопируй эти строчки все в скрипт, и выполни уже его. Причем лучше под башем, потому что там используется расширенный HEREDOC синтаксис, и вполне с ним в других шеллах могут быть проблемы. Ну или создай отдельный файл для этого правила и используй уже его в команде.

Plague 12.12.2010 21:01

Цитата:

Сообщение от Hubbitus (Сообщение 1731634)
Здрасте.
А у нас именно он и есть.

добрый вечер :biggrin:. о чем и говорю, что несмотря на это "-f" оно все равно в данном случае не работает как надо.
оно не работает и в интерактиве кстати, где шелл уже совсем не причем (ключ d добавлен для переключение его в более разговорчивый режим):
Код:

# ngctl -d
Available commands:
  config    get or set configuration of node at <path>
...
[overquote deleted]
...
+ mkpeer ipfw: patch 300 in
ngctl: sendto(ipfw:): No such file or directory
ngctl: send msg: No such file or directory
+
^C

да и в баше тоже:
Код:

[20:51:31:/home/plague]# bash
[root@freebsd /home/plague]# /usr/sbin/ngctl -f- <<-SEQ
>  mkpeer ipfw: patch 300 in
>  name ipfw:300 tos_chg
>  msg tos_chg: setconfig { count=2 csum_flags=1 ops=[ \
>    { mode=7 value=0xf7 length=1 offset=1 } \
>    { mode=8 value=0x02 length=1 offset=1 } ] }
> SEQ
ngctl: send msg: No such file or directory
ngctl: line 1: error in file


FantomIL 12.12.2010 22:55

Plague, оно тебя именно в прикладном значении волнует? То бишь для руления приоритетом трафика?
Я боюсь ошибиться, но PF на FreeBSD это всегда умел делать, причем как по CBQ так и по PQ.
Директива queue трафик priority значение вроде давно в PF существует.
И кстати синтаксис вполне себе человеческий :)
Естественно, что ядро придется с поддержкой ALTQ скомпилировать.
Или задачу надо было решить исключительно под IPFW?

Plague 12.12.2010 23:32

Цитата:

Сообщение от FantomIL (Сообщение 1731638)
оно тебя именно в прикладном значении волнует?

ну, в общем наверное, теперь уже и в обще-теоретическом :biggrin:. Типа уже просто вообще интересно стало как заставить эту хрень работать. Про PF возможно тож интересно было бы в общем смысле; но ipfw по-любому фунциклирует, посему если уж не в теории, а именно в практическом применении, то правильней на нем и рулить, дабы лишних огородов не сооружать..
Цитата:

Сообщение от FantomIL (Сообщение 1731638)
ядро придется с поддержкой ALTQ скомпилировать

туплю блин. как проверить включена поддержка оного иль нет? kldstat ничего про то не говорит, но по-моему это несколько другая опера, хоть и близко..

Hubbitus 13.12.2010 00:22

Вложений: 1
Цитата:

Сообщение от Plague (Сообщение 1731636)
ngctl: send msg: No such file or directory

Во, вот это уже ближе к истине, по крайней мере он вернулся с ответом.

Все же мне кажется ошибка синтаксиса где-то. Попробуй приаттаченный файл просто выполнить. Та же ошибка?

FantomIL 13.12.2010 10:37

По поводу ALTQ. Я, честно говоря, не знаю способа проверьть есть ли поддержка его в ядре или нет, кроме как попробовав стартовать PF. Если поддержки нет, то он выругается на это и скажет, что опции руления очередями недоступны.
Да, кстати, в хендбуке написано, что не все драйвера сетевых карт поддерживают ALTQ, но я, честно говоря, с такими еще не сталкивался.

Plague 13.12.2010 13:31

Цитата:

Сообщение от Hubbitus (Сообщение 1731648)
Та же ошибка?

да, один-в-один.
сейчас читаю вот эти чтивы:
http://www.magxak.ru/xa117/140/1.htm
http://forum.lissyara.su/viewtopic.php?f=8&t=20448
не совсем о том, но близко.. может найдется ответ...

Hubbitus 13.12.2010 14:06

Странно
Цитата:

Сообщение от Plague (Сообщение 1731636)
ngctl: send msg: No such file or directory

А все модули нужные подгрузил в ядро?
Не совсем по твоей теме, но везде говорят что этой ошибки это основное объяснение:
http://www.opennet.ru/openforum/vslu...ID1/66139.html
http://3nity.ru/viewtopic.php?t=5276

Plague 13.12.2010 14:16

Цитата:

Сообщение от Hubbitus (Сообщение 1731678)
А все модули нужные подгрузил в ядро?

знать бы еще какие нужны... Мануал http://www.freebsd.org/cgi/man.cgi?q...le&format=html не очень-то красноречив по этому поводу... :( :idontnow:
Код:

# ngctl list
There are 1 total nodes:
  Name: ngctl1928      Type: socket          ID: 00000001  Num hooks: 0

Код:

# kldstat
Id Refs Address    Size    Name
 1  56 0xc0400000 ad3de4  kernel
 2    1 0xc0ed4000 1f50    ntfs_iconv.ko
 3    2 0xc0ed6000 cb1c    ntfs.ko
 4    5 0xc0ee3000 4de0    libiconv.ko
 5    1 0xc0ee8000 593c    if_tap.ko
 6    1 0xc0eee000 7120    snd_ich.ko
 7    2 0xc0ef6000 566f4    sound.ko
 8    1 0xc0f4d000 2534    accf_http.ko
 9    1 0xc0f50000 74e8    ng_ubt.ko
10    5 0xc0f58000 d944    netgraph.ko
11    2 0xc0f66000 de7c    ng_hci.ko
12    2 0xc0f74000 23a0    ng_bluetooth.ko
13    1 0xc0f77000 1f98    msdosfs_iconv.ko
14    1 0xc0f79000 1f84    cd9660_iconv.ko
15    1 0xc0f7b000 1f34    udf_iconv.ko
16    2 0xc0f7d000 79bc    udf.ko
17    1 0xc0f85000 2b0c    ng_patch.ko
18    1 0xc0f88000 4f90    atapicam.ko
19    1 0xc4b9a000 26000    linux.ko
20    1 0xc4c97000 e000    fuse.ko
21    1 0xc501d000 2000    blank_saver.ko
22    1 0xc5f08000 4000    ng_socket.ko

ps. ipfw собрано в ядре

Hubbitus 13.12.2010 14:54

Ну ng_patch подгружен... А какие еще есть ng_*?

Plague 13.12.2010 15:10

много... 58 штук
Нажмите здесь, чтобы увидеть текст полностью
ng_UI.ko
ng_async.ko
ng_atm.ko
ng_atmllc.ko
ng_bluetooth.ko
ng_bpf.ko
ng_bridge.ko
ng_bt3c.ko
ng_btsocket.ko
ng_car.ko
ng_ccatm.ko
ng_cisco.ko
ng_deflate.ko
ng_device.ko
ng_echo.ko
ng_eiface.ko
ng_etf.ko
ng_ether.ko
ng_ether_echo.ko
ng_fec.ko
ng_frame_relay.ko
ng_gif.ko
ng_gif_demux.ko
ng_hci.ko
ng_hole.ko
ng_hub.ko
ng_iface.ko
ng_ip_input.ko
ng_ipfw.ko
ng_ksocket.ko
ng_l2cap.ko
ng_l2tp.ko
ng_lmi.ko
ng_mppc.ko
ng_nat.ko
ng_netflow.ko
ng_one2many.ko
ng_patch.ko
ng_pipe.ko
ng_ppp.ko
ng_pppoe.ko
ng_pptpgre.ko
ng_pred1.ko
ng_rfc1490.ko
ng_socket.ko
ng_source.ko
ng_split.ko
ng_sppp.ko
ng_sscfu.ko
ng_sscop.ko
ng_tag.ko
ng_tcpmss.ko
ng_tee.ko
ng_tty.ko
ng_ubt.ko
ng_uni.ko
ng_vjc.ko
ng_vlan.ko

а вообще модулей - страшно говорить:
ls -l /boot/kernel/*.ko | wc -l
636

Hubbitus 13.12.2010 15:22

А что если все 58 подгрузить для теста?
Названия мне ничего не говорят на FreeBSD к сожалению.

Plague 13.12.2010 16:38

Блин, слона то я и не приметил :lamer:
kldload ng_ipfw

у лисяры подсказали.

едем дальше: манипуляции из мануала (которые с name ipfw:300 tos_chg) привели тачку в недоступность после добавления команды в ipfw; пришлось звонить домой маме чтоб на ресет нажала :biggrin:.
Сделал то, что Hubbitus в посте №2 написал - вроде ничо не отвалилось, щас wireshark на работе поставлю, поглядю что в пакетах у меня делается....


Часовой пояс GMT +4, время: 09:13.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.