Netgraph для пользователя
Jan. 18th, 2011 04:01 amМногие слышали о сетевой подсистеме Netgraph во FreeBSD, но далеко не все представляют себе, что же это такое, как оно работает, и зачем оно нужно — кроме того, что на нем работает mpd (известная очень производительная реализация PPP/PPTP/L2TP). Да еще по сети ходят многочисленные Howto типа "как считать Netflow на нетграфе", где приводят примеры решения конкретных задач, о самой же подсистеме рассказывая "галопом по Европам" (пишите, мол, так, "синтаксис такой-то").
Проблема в том, что вся документация по netgraph рассчитана на программистов: как маны, так и единственная достаточно подробная статья от автора подсистемы "Все о Netgraph" — в ней дается общий обзор, а за подробностями читатель отсылается в исходники. Что, разумеется, отпугивает новичков, поскольку кажется слишком сложным, а читатели, привыкшие к другим ОС, часто не понимают суть системы и зачем она нужна, если есть vtun, ipt_netflow и другие решения для типовых частных случаев.
Между тем netgraph — это реализованный в ядре коммуникационный фреймворк общего назначения, и в использовании он не сложнее, чем длинная командная строка вида "prog1 | grep | sort | sed | prog2 | awk", просто для начала необходимо понять ряд вещей, о которых я и попытаюсь рассказать доступным языком.
(Примечание: далее будут использованы некоторые фрагменты упоминавшейся выше статьи "All about NetGraph", и кое-где будут примечания с пометкой AANG, показывающие места, в которых та статья уже устарела)
( А поскольку понять всё целиком с наскоку нельзя, запаситесь терпением )
Проблема в том, что вся документация по netgraph рассчитана на программистов: как маны, так и единственная достаточно подробная статья от автора подсистемы "Все о Netgraph" — в ней дается общий обзор, а за подробностями читатель отсылается в исходники. Что, разумеется, отпугивает новичков, поскольку кажется слишком сложным, а читатели, привыкшие к другим ОС, часто не понимают суть системы и зачем она нужна, если есть vtun, ipt_netflow и другие решения для типовых частных случаев.
Между тем netgraph — это реализованный в ядре коммуникационный фреймворк общего назначения, и в использовании он не сложнее, чем длинная командная строка вида "prog1 | grep | sort | sed | prog2 | awk", просто для начала необходимо понять ряд вещей, о которых я и попытаюсь рассказать доступным языком.
(Примечание: далее будут использованы некоторые фрагменты упоминавшейся выше статьи "All about NetGraph", и кое-где будут примечания с пометкой AANG, показывающие места, в которых та статья уже устарела)
В связи с http://root.yandex.ru/ буду с 18 по 21 число в Москве. Желающие пересечься - велкам в комменты ;)
P.S. Если по части FreeBSD/*nix, то у #freebsd@RusNet намечается коннект, соответственно, лучше на него :)
P.S. Если по части FreeBSD/*nix, то у #freebsd@RusNet намечается коннект, соответственно, лучше на него :)
Патчи, позволяющие матчить и изменять ToS/DSCP на FreeBSD, ходят в разных вариантах по сети уже лет шесть, вот очередная инкарнация, например. К сожалению, ни один из них так и не попал в базовую систему, хотя пример по ссылке, скажем, для конкретной задачи удобнее того, что описано ниже. Даже возникает подозрение, что это всё потому, что предыдущие решения были недостаточно общие :) Вот Maxim Ignatenko написал ноду ng_patch(4) - и её, наконец, закоммиттили, а недавно смержили в 8-STABLE (r209843) и вчера - в 7-STABLE (r210019). Работает также на 6.4, если убрать в коде CSUM_SCTP, я проверял.
В настоящее время ng_patch - единственный штатный способ поменять что-то в проходящем пакете. Зато, в отличие от других решений (в том числе на других ОС), эта нода позволяет производить последовательность операций над произвольными байтами пакета, не только ToS или TTL. В мане рассмотрены примеры изменения ToS и TTL, я же расскажу чуть подробнее, с примером для DSCP.
( Read more... )
В настоящее время ng_patch - единственный штатный способ поменять что-то в проходящем пакете. Зато, в отличие от других решений (в том числе на других ОС), эта нода позволяет производить последовательность операций над произвольными байтами пакета, не только ToS или TTL. В мане рассмотрены примеры изменения ToS и TTL, я же расскажу чуть подробнее, с примером для DSCP.
Со времени событий вокруг uTP прошло более 4 месяцев, разработчики uTorrent на месте не стояли, в теме на nag.ru тоже накатали уже более сорока страниц. Придумал и я принципиально новый способ ловить соединения торрентов, но обо всём по порядку.
( Рабочий скрипт с демонстрацией концепта прилагается )
К посту http://nuclight.livejournal.com/124348.html в свое время не всё влезло, из-за ограничений на объем поста в ЖЖ (судя по всему 65535 в байтах, причем UTF-8, так как для разной пропорции русского текста длина переменная и непредсказуемая). Ниже идет недостающий кусок, с того места, где там прервалось. Может быть, со временем, что-нибудь еще добавится :)
Итак, продолжение
( UPD2 про IPSEC в 6.x )
UPD3: По состоянию на 17.09.10 выше только описание порядка IPSEC для 6.x (в других версиях уже другое), да и то, как выяснилось, неточное. Кроме того:
( UPD3 про kern/147720 и несколько таблиц при tablearg )
Итак, продолжение
UPD3: По состоянию на 17.09.10 выше только описание порядка IPSEC для 6.x (в других версиях уже другое), да и то, как выяснилось, неточное. Кроме того:
Краткое содержание: как отфильтровать uTP на FreeBSD в теме на Наге уже сказали, однако для случая пакетов внутри туннеля PPTP GRE решения не было, о чем здесь и будет рассказано, но сначала - предыстория.
В конце 2008 года разработчики uTorrent собрались заменить транспортный протокол с TCP на UDP, реализовав поверх него свою прослойку под названием чTP - дескать, так будет эффективнее. Тогда же исследователь по имени Ричард Беннет заявил, что это будет полная жопа для всего Интернета - UDP менее 2% во всём трафике, он используется для приложений реального времени (игры, телефония) и для критически важного DNS, в общем, пострадают все, из-за отсутствия в нём нормального congestion control (обработки перегрузок сети). Разработчики на это ответили, что они сделают congestion control еще лучше, чем в TCP, и торрент станет даже меньше забивать каналы и мешать другим, чем сейчас. И включили по умолчанию новый протокол uTP в бета-версиях uTorrent 1.8 (правда, сначала только на прием). Время шло, обещанной жопы всея Интернета не было...
До этого февраля. Буквально в понедельник админы бывшего СССР начали спрашивать друг друга, у всех ли отмечено сильное возрастание нагрузки за последние дни. Таки да, оказалось у многих. Выяснилось, что месяц назад вышел uTorrent 2.0, у кучи народа вылезло окошко с предложением обновиться, и с начала февраля пошел рост PPS (нагрузки по пакетам в секунду), причем обратите внимание, не трафика. Много где оборудование к такому неожиданному повороту сюжета было не готово, и проблемы работы Интернета ощутили на себе все, не только "качки". Более того, не только оборудование провайдеров - у многих стали гнать домашние роутеры и ADSL-модемы (вот пост на Хабре на тему), хотя опять же человек может не связать обновление у себя uTorrent и начать обвинять провайдера.
( Read more... )
У вас вдруг стал хуже работать Интернет?..
В конце 2008 года разработчики uTorrent собрались заменить транспортный протокол с TCP на UDP, реализовав поверх него свою прослойку под названием чTP - дескать, так будет эффективнее. Тогда же исследователь по имени Ричард Беннет заявил, что это будет полная жопа для всего Интернета - UDP менее 2% во всём трафике, он используется для приложений реального времени (игры, телефония) и для критически важного DNS, в общем, пострадают все, из-за отсутствия в нём нормального congestion control (обработки перегрузок сети). Разработчики на это ответили, что они сделают congestion control еще лучше, чем в TCP, и торрент станет даже меньше забивать каналы и мешать другим, чем сейчас. И включили по умолчанию новый протокол uTP в бета-версиях uTorrent 1.8 (правда, сначала только на прием). Время шло, обещанной жопы всея Интернета не было...
До этого февраля. Буквально в понедельник админы бывшего СССР начали спрашивать друг друга, у всех ли отмечено сильное возрастание нагрузки за последние дни. Таки да, оказалось у многих. Выяснилось, что месяц назад вышел uTorrent 2.0, у кучи народа вылезло окошко с предложением обновиться, и с начала февраля пошел рост PPS (нагрузки по пакетам в секунду), причем обратите внимание, не трафика. Много где оборудование к такому неожиданному повороту сюжета было не готово, и проблемы работы Интернета ощутили на себе все, не только "качки". Более того, не только оборудование провайдеров - у многих стали гнать домашние роутеры и ADSL-модемы (вот пост на Хабре на тему), хотя опять же человек может не связать обновление у себя uTorrent и начать обвинять провайдера.
Этот пост пригодится вам не только на FreeBSD, но и на Linux и любой другой системе с BPF (для Windows есть вот такое) в случае, когда вы хотите написать приложение, отбирающее напрямую с линии пакеты по некоторому критерию, как tcpdump (ну скажем, хотите проконтролировать ARP в вашей сети по типу приложения ipguard, или еще что). Здесь идет более подробная версия куска моей презентации на RootConf 2009 (по ссылке доступны слайды и видео), где также рассматривался и упоминаемый далее Netgraph.
( Read more... )
===
В марте, помнится, я написал в ipfw@ предложения по архитектурным улучшениям ipfw, как кандидат на GSoC 2008. Никто не отреагировал (многабукаф, фигли). Дальше, в конце мая в RU.UNIX.BSD разгорелся спор - народ хотел изменения "как Cisco ACLs, но лучше", однако конкретики не было, хотя со временем что-то уже вырисовалось, я поглядел на идеи для будущего из перевода рассказа о Netgraph и набросал примерный вариант, как это могло бы выглядеть. И что же? Тут же дискуссия заглохла. Стало понятно, что выносить такие вещи на публику не имеет смысла - как только доходит до дела, любители почесать языком тут же исчезают. С другой стороны, каждый раз пересказывать сначала идеи тем индивидам, которые заинтересованы и могут сделать, долго, поэтому я решил расписать это и сделать доступным на вебе, чтоб не потерялось. А может, со временем и поможет найти тех, кто заинтересован и либо сможет сделать, либо обсудить изменения планов, исходя из практических потребностей.
( Много букв для kernel-девелоперов, мало кому более интересных )
===
Этот недописанный пост изначально неспешно готовился как памятка на будущее для узкого круга лиц о том, какие изменения в ipfw хотелось бы видеть и хотелось бы сделать. Однако идеей заинтересовались во FreeBSD Foundation и согласились спонсировать разработку этих идей - правда, всё никак не сделают официальный анонс (ну и я сильно подробно не публиковал пока поэтому). Организаторам RootConf 2009 предлагаемые идеи понравились тоже, посему официально сообщаю - я буду рассказывать об этом на оной конференции, проходящей в Москве 13-14 апреля сего года. На странице http://www.rootconf.ru/papers2009/12352.html доступны тезисы, там же, как обещают, будут позже выложены и презентация с видеозаписью доклада. Данный же пост, возможно, будет позднее дописан (или написан новый) с более подробной информацией о работе - ваши комментарии и пожелания по улучшению ipfw, впрочем, можете писать уже сейчас ;)
У меня, правда, есть еще одна проблема - негде остановиться в Москве в ночь с 12 на 15 апреля :) Никто не хочет впустить? :)
В марте, помнится, я написал в ipfw@ предложения по архитектурным улучшениям ipfw, как кандидат на GSoC 2008. Никто не отреагировал (многабукаф, фигли). Дальше, в конце мая в RU.UNIX.BSD разгорелся спор - народ хотел изменения "как Cisco ACLs, но лучше", однако конкретики не было, хотя со временем что-то уже вырисовалось, я поглядел на идеи для будущего из перевода рассказа о Netgraph и набросал примерный вариант, как это могло бы выглядеть. И что же? Тут же дискуссия заглохла. Стало понятно, что выносить такие вещи на публику не имеет смысла - как только доходит до дела, любители почесать языком тут же исчезают. С другой стороны, каждый раз пересказывать сначала идеи тем индивидам, которые заинтересованы и могут сделать, долго, поэтому я решил расписать это и сделать доступным на вебе, чтоб не потерялось. А может, со временем и поможет найти тех, кто заинтересован и либо сможет сделать, либо обсудить изменения планов, исходя из практических потребностей.
===
Этот недописанный пост изначально неспешно готовился как памятка на будущее для узкого круга лиц о том, какие изменения в ipfw хотелось бы видеть и хотелось бы сделать. Однако идеей заинтересовались во FreeBSD Foundation и согласились спонсировать разработку этих идей - правда, всё никак не сделают официальный анонс (ну и я сильно подробно не публиковал пока поэтому). Организаторам RootConf 2009 предлагаемые идеи понравились тоже, посему официально сообщаю - я буду рассказывать об этом на оной конференции, проходящей в Москве 13-14 апреля сего года. На странице http://www.rootconf.ru/papers2009/12352.html доступны тезисы, там же, как обещают, будут позже выложены и презентация с видеозаписью доклада. Данный же пост, возможно, будет позднее дописан (или написан новый) с более подробной информацией о работе - ваши комментарии и пожелания по улучшению ipfw, впрочем, можете писать уже сейчас ;)
У меня, правда, есть еще одна проблема - негде остановиться в Москве в ночь с 12 на 15 апреля :) Никто не хочет впустить? :)
Пеар и ликбез
Jun. 29th, 2008 11:40 pmПро Большой Адронный Коллайдер (LHC), бозон Хиггса и вообще физику:
http://sharpc.livejournal.com/26697.html (многа букаф, но хорошо)
http://sharpc.livejournal.com/26697.html (многа букаф, но хорошо)
Нарисовал тут давеча в RU.UNIX.BSD схему прохождения пакета через ядро и ipfw, с объяснениями, как это все стыкуется с divert, dummynet, keep-state и т.д., теория и примеры. Народу понравилось, решил опубликовать и здесь, чтоб не потерялось (ибо объяснений, как оно там все внутри, в сети не встречал — только howto-шки на что-то простое или конкретику "вот у меня наконец получилось", не дающие возможности понять и составить что-то сложное другое самому).
( Многа букав и ASCII-арта )
Апдейт LJ MindMap
Dec. 6th, 2007 02:26 pmСвалился в почту линк на мой LJ MindMap. Помню, что когда-то делал (см. http://nuclight.livejournal.com/111160.html), но вроде обновлений не заказывал. Значит сами пересчитали и обновили. Картинка в том посте, впрочем, тоже обновилась, хотя линки на карте там теперь наверное могу глючить. Так что приведу снова.

( Click here to see! )
Lovely Ladies on Beautiful Bikes

Немножко ссылок
Dec. 1st, 2007 11:48 pmИз процесса ежедневного рагребания ссылок нашлось интересное.
http://moja-zhizn.livejournal.com/43961.html - Ленинскую Библиотеку, фактически, обрекают на уничтожение. Однако, нехорошо.
http://zhurnal.lib.ru/z/zlobnyj_y/fanterrors.shtml - хороший текст (правда, многабукаф, но интересно) про типичные штампы в фантастике, как в книгах, так и в фильмах. Речь идет как об очевидных сразу вещах (как те же фильмы про хакеров), так и о не очень, которые способны многие книги загубить вообще на корню :) как космические бои, например. Рассмотрены и разнообразные экологические мифы, и даже миры фэнтези - хотя последним, на мой взгляд, автор зря побоялся уделить больше внимания (ограничившись разбором экономики, оружия и орудий по историческим параллелям), разбор физики и магии был бы весьма интересен.
http://www.intuit.ru/department/os/osunix/ - хороший курс по Юниксам (наткнулся в жгучих комментах с опеннета). Отличается от других тем, что дает в большей степени философию Юниксов, нежели набор команд, более того, обосновывает это. Особенно интересны вводные лекции:
Напоминает "Как правильно задавать вопросы", не правда ли? Было сравнение даже с дзен-буддизмом. Следуют рассуждения о проективных человеко-машинных системах (те же юниксы как пример) в противовес процедурным:
Казалось бы, чем плохи процедурные систмы, они ведь говорят с пользователем на понятном ему языке, обучение не нужно? Ну, в частности тем, что:
И много других очень жызненных вещей. Читать, однозначно.
http://moja-zhizn.livejournal.com/43961.html - Ленинскую Библиотеку, фактически, обрекают на уничтожение. Однако, нехорошо.
http://zhurnal.lib.ru/z/zlobnyj_y/fanterrors.shtml - хороший текст (правда, многабукаф, но интересно) про типичные штампы в фантастике, как в книгах, так и в фильмах. Речь идет как об очевидных сразу вещах (как те же фильмы про хакеров), так и о не очень, которые способны многие книги загубить вообще на корню :) как космические бои, например. Рассмотрены и разнообразные экологические мифы, и даже миры фэнтези - хотя последним, на мой взгляд, автор зря побоялся уделить больше внимания (ограничившись разбором экономики, оружия и орудий по историческим параллелям), разбор физики и магии был бы весьма интересен.
http://www.intuit.ru/department/os/osunix/ - хороший курс по Юниксам (наткнулся в жгучих комментах с опеннета). Отличается от других тем, что дает в большей степени философию Юниксов, нежели набор команд, более того, обосновывает это. Особенно интересны вводные лекции:
Рассмотрим самый, на наш взгляд, естественный алгоритм решения любой задачи:
1. уяснить задачу;
2. выбрать самый подходящий инструмент решения (самый подходящий, а не самый знакомый!);
3. освоить этот инструмент (начиная с изучения документации).
4. придумать по возможности красивое решение;
5. зафиксировать это решение (чтобы можно было в случае чего повторить);
6. применить его.
Казалось бы, спорить не с чем, но как часто мы поступаем строго наоборот!
Желая "сэкономить время", мы нередко начинаем с того, что так и эдак применяем попавшиеся под руку инструменты (6) и даже начинаем набрасывать кое-какие сценарии или проекты решения (5). Потом мы задумываемся над тем, как же решить нашу задачу "по уму" (4), и понимаем, что инструмент нам, в сущности, незнаком, что надо изучать руководство (3). Из руководства выясняется, что инструмент нам не подходит, и приходится искать другой (2). И только тогда мы понимаем, что для этого надо разобраться, какую именно задачу мы решаем (1).
Напоминает "Как правильно задавать вопросы", не правда ли? Было сравнение даже с дзен-буддизмом. Следуют рассуждения о проективных человеко-машинных системах (те же юниксы как пример) в противовес процедурным:
Процедура как суррогат поступка
Процедурной мы будем называть человеко-машинную систему, доступную человеку в виде набора функций (процедур) внутри прикладной области, описываемых в терминах прикладной области и приводящих к наглядному или гарантированному изменению свойств объекта. Например, человеко-телевизор - полностью процедурная система: все задачи, которые ставит перед ней человек, описываются в терминах "программа", "громкость", "контраст" и т. п. Телевизор же (вернее, инструкция к нему) общается с пользователем на том же языке (кажется, в нем есть только один новый термин - "кнопка", все остальные, включая названия кнопок, повторяют известное пользователю).
Казалось бы, чем плохи процедурные систмы, они ведь говорят с пользователем на понятном ему языке, обучение не нужно? Ну, в частности тем, что:
Пользователь процедурной системы зачастую не знает, как именно он добился от нее желаемого результата и далеко не всегда может с первого раза воспроизвести свои действия. Нажимал-нажимал на кнопки - и вышло. Как? А кто ж ее знает. Здесь работает накопленный опыт общения с системой, возможно, даже некое представление об ее истинном устройстве, добытое из системы в обход предусмотренных каналов информации и оттого не поддающееся формализации. Явление это имеет название black magic (черная магия) или voodoo.
И много других очень жызненных вещей. Читать, однозначно.
Есть у нас в сети общаги уже долгое время две подсети, с серыми и белыми адресами, при этом бегают по одной физике. Не очень кошерная конфигурация, конечно, ну да так вышло по историческим причинам (тяжелое детство, деревянные игрушки бедные студенты, провайдер-жмот). Суть в том, что хостам желательно бы видеть друг друга напрямую, а не нагружать роутер, который раздает им Интернет, так как у него те же 100 Мбит на вход, если роутить подсети, будут жаловаться, что скорость низкая. Значит, каждому юзеру надо прописать себе постоянный статический маршрут на другую подсеть, тогда будет ходить как положено, напрямую, в обход роутера.
И тут вступает в дело человеческий фактор. Как заставить их прописать? Они ж бестолковые. Желательно бы автоматизировать. Но тут напарываемся на свойства винды. ICMP-редиректы она не принимает (от роутера, который знает, что физическая-то подсеть та же), указание маршрута на интерфейс без указания шлюза (который должен быть адресом этой же машины) она не понимает... Маздай, одним словом. В DHCP есть опция статических маршрутов, но они в ней считаются поклассово - это тогда, как более 10 лет используется CIDR, то есть для нынешних условий неприменимо.
После поисков обнаружилась такая замечательная штука, как RFC 3442, описывающий DHCP-опцию раздачи classless-маршрутов, как раз то, что нужно, даже случай другой подсети на той же физике предусмотрен. Но - его не поддерживает не то что винда, а и другие DHCP-клиенты не всех версий... В результате на сайте сети была просто вывешена динамически генерируемая инструкция, выполнить строчку вида route -p add 172.18.46.0 mask 255.255.255.0 82.117.64.2, где адресом шлюза является адрес самой машины. Инструкцию выполняли, но, конечно, не все и не всегда. Например, забывали выполнить после переустановки винды. Или просто "ниасиливали". Нагрузка на роутер от непрописавших возросла, и на нем это дело было прикрыто файрволом, в надежде, что когда перестанет работать, таки соизволят наконец прочитать инструкцию (в которой увеличилось количество выделений большими буквами и жирным шрифтом). Но толку...
Затем, после дальнейших поисков, было обнаружено, что виндовый DHCP-клиент, начиная с XP, поддерживает приватную опцию за нумером 249, отвечающую ровно за это же и имеющую абсолютно тот же формат, что и опция с кодом 121 из RFC 3442 (зачем они сменили номер, непонятно). Ну, с тем лишь отличием, что RFC предписывает игнорировать опцию routers и указывать маршрут по умолчанию внутри этой нововведенной опции, а опция от MS задает дополнительные к routers маршруты. Итак, Гугль в конце концов подсказал страничку http://scott.yang.id.au/2003/04/getting-stuck-with-dhcpd/ с вот таким примером для конфига DHCP (в котором эта опция тоже не поддерживается, но можно описывать их свои любые, какие хочется):
Всё бы нормально, но это маршрут, указывающий на сеть, находящуюся за настоящим маршрутизатором. Популярный случай, но у нас несколько другая ситуация, сеть-то должна быть доступна напрямую. RFC 3442 в этом случае говорит, что надо указать в качестве адреса шлюза 0.0.0.0, и клиент должен понять, что это маршрут на интерфейс. Пробуем указать option ms-classless-static-routes 24, 172, 18, 46, 0, 0, 0, 0; ...и наблюдаем, как винда радостно кладет на это большой и толстый болт. Ага, думаем мы, не лыком шиты, чай, винда тупая, просто применяет сеть, маску и шлюз как в команде route. То есть, если указать адрес шлюза, должно подействовать. Пробуем option ms-classless-static-routes 24, 172, 18, 46, 82, 117, 46, 2; - ага, сожрала!
Здесь самое время почесать репу - это, значит, придется для каждого клиента в dhcpd.conf описывать индивидуальную натсройку?! Ладно здесь, когда адреса описаны статически (привязка к MAC-адресу), потеряется только изящность указания адреса в единой точке (DNS) и избыточность конфига - а если у кого-то адреса раздаются динамически, что тогда?..
После загрузочной кружки чая с шоколадом в голову приходит мысль перечитать dhcp-eval(5). Вдумчивое укуривание им и dhcp-options(5) рожает идею генерировать эту опцию для каждого клиента на ходу из его адреса. Немного правки, и возникает конструкция:
option ms-classless-static-routes = concat (24, 82, 117, 64, leased-address);
На что нас посылает нахуй уже dhcpd. С невнятной синтаксической ошибкой 117 exceeds max (255) for precision. Рытье в исходниках и манах приводит к озарению:я дебил у dhcpd разная трактовка numeric-expressions и data-expressions. То бишь, надо преобразовать форматы его встроенными функциями. И в конечном счете получаем несколько громоздкую, но работающую конструкцию:
Жаль, это не работает для Windows 2000 (да и в Висте, судя по ссылкам во время поиска в гугле, в этом что-то поломали), но для большинства XPёвых машин в сети теперь будет всё нормально :)
UPDATE: Сообщили, что за прошедшие сутки с момента включения этих опций наблюдались проблемы у некоторых юзеров - Виста не может получить адрес. В инете нашлось по теме http://users.livejournal.com/_pacak_/48017.html и http://support.microsoft.com/default.aspx/kb/928233. Блядский Мелкософт. Поймаю живую Висту, поэкспериментирую, а пока что отключил опцию (странно, оно же раньше получало, в статье-то речь про другое)...
UPD2: Была найдена также ссылка http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=1383260&SiteID=17 и вышедший с тех пор хотфикс http://support.microsoft.com/kb/933340/ (должен был войти в Vista SP1). По ссылке сообщается, что Виста понимает как опцию 249, так и опцию 121 (по стандарту), но не будет принимать дублирующиеся маршруты - а в моем конфиге в обеих опциях маршруты как раз дублировались. Однако, экспериментов с этим все равно не проводил (и человеку по ссылке тоже не помогло, впрочем, у него это было до хотфикса).
И тут вступает в дело человеческий фактор. Как заставить их прописать? Они ж бестолковые. Желательно бы автоматизировать. Но тут напарываемся на свойства винды. ICMP-редиректы она не принимает (от роутера, который знает, что физическая-то подсеть та же), указание маршрута на интерфейс без указания шлюза (который должен быть адресом этой же машины) она не понимает... Маздай, одним словом. В DHCP есть опция статических маршрутов, но они в ней считаются поклассово - это тогда, как более 10 лет используется CIDR, то есть для нынешних условий неприменимо.
После поисков обнаружилась такая замечательная штука, как RFC 3442, описывающий DHCP-опцию раздачи classless-маршрутов, как раз то, что нужно, даже случай другой подсети на той же физике предусмотрен. Но - его не поддерживает не то что винда, а и другие DHCP-клиенты не всех версий... В результате на сайте сети была просто вывешена динамически генерируемая инструкция, выполнить строчку вида route -p add 172.18.46.0 mask 255.255.255.0 82.117.64.2, где адресом шлюза является адрес самой машины. Инструкцию выполняли, но, конечно, не все и не всегда. Например, забывали выполнить после переустановки винды. Или просто "ниасиливали". Нагрузка на роутер от непрописавших возросла, и на нем это дело было прикрыто файрволом, в надежде, что когда перестанет работать, таки соизволят наконец прочитать инструкцию (в которой увеличилось количество выделений большими буквами и жирным шрифтом). Но толку...
Затем, после дальнейших поисков, было обнаружено, что виндовый DHCP-клиент, начиная с XP, поддерживает приватную опцию за нумером 249, отвечающую ровно за это же и имеющую абсолютно тот же формат, что и опция с кодом 121 из RFC 3442 (зачем они сменили номер, непонятно). Ну, с тем лишь отличием, что RFC предписывает игнорировать опцию routers и указывать маршрут по умолчанию внутри этой нововведенной опции, а опция от MS задает дополнительные к routers маршруты. Итак, Гугль в конце концов подсказал страничку http://scott.yang.id.au/2003/04/getting-stuck-with-dhcpd/ с вот таким примером для конфига DHCP (в котором эта опция тоже не поддерживается, но можно описывать их свои любые, какие хочется):
# MS routes: adds extras to supplement routers option option ms-classless-static-routes code 249 = array of integer 8; # RFC3442 routes: overrides routers option option rfc3442-classless-static-routes code 121 = array of integer 8; option routers 172.22.0.1; option ms-classless-static-routes 24, 172, 22, 99, 172, 22, 0, 1 ; option rfc3442-classless-static-routes 24, 172, 22, 99, 172, 22, 0, 1, 0, 172, 22, 0, 1 ;
Всё бы нормально, но это маршрут, указывающий на сеть, находящуюся за настоящим маршрутизатором. Популярный случай, но у нас несколько другая ситуация, сеть-то должна быть доступна напрямую. RFC 3442 в этом случае говорит, что надо указать в качестве адреса шлюза 0.0.0.0, и клиент должен понять, что это маршрут на интерфейс. Пробуем указать option ms-classless-static-routes 24, 172, 18, 46, 0, 0, 0, 0; ...и наблюдаем, как винда радостно кладет на это большой и толстый болт. Ага, думаем мы, не лыком шиты, чай, винда тупая, просто применяет сеть, маску и шлюз как в команде route. То есть, если указать адрес шлюза, должно подействовать. Пробуем option ms-classless-static-routes 24, 172, 18, 46, 82, 117, 46, 2; - ага, сожрала!
Здесь самое время почесать репу - это, значит, придется для каждого клиента в dhcpd.conf описывать индивидуальную натсройку?! Ладно здесь, когда адреса описаны статически (привязка к MAC-адресу), потеряется только изящность указания адреса в единой точке (DNS) и избыточность конфига - а если у кого-то адреса раздаются динамически, что тогда?..
После загрузочной кружки чая с шоколадом в голову приходит мысль перечитать dhcp-eval(5). Вдумчивое укуривание им и dhcp-options(5) рожает идею генерировать эту опцию для каждого клиента на ходу из его адреса. Немного правки, и возникает конструкция:
option ms-classless-static-routes = concat (24, 82, 117, 64, leased-address);
На что нас посылает нахуй уже dhcpd. С невнятной синтаксической ошибкой 117 exceeds max (255) for precision. Рытье в исходниках и манах приводит к озарению:
... # Define option codes and types for later use in subnet declarations option ms-classless-static-routes code 249 = array of integer 8; option rfc3442-classless-static-routes code 121 = array of integer 8; # Classless routing: # RFC3442 provides way to store classless routes in option 121 with # format of 1 byte masklen, 0 to 4 bytes of destination network (rounding # up mask bits to next byte), and 4 bytes of router address, e.g. # 128.93.40.0/17 -> 1.2.3.4 will be bytes 17 128 93 40 1 2 3 4; # then any number of routes in the same format. MS routes (XP+) # are using the same format, but option code 249. Also, RFC3442 # routes require including default route (masklen 0 then IP of router) # which overrides routers option, and MS routes don't need to # include default route, they still use routers option. # When destination net is directly attached to client's interface, # as in our case below, RFC3442 requires using gate IP 0.0.0.0, # but Windows client do not understand it, they want their own IP as # gate IP, so we must generate this option for them from "leased-address". shared-network AVTF.NET { subnet 172.18.46.0 netmask 255.255.255.0 { option routers 172.18.46.1; option broadcast-address 172.18.46.255; option domain-name-servers 172.18.46.1; option ms-classless-static-routes = concat(encode-int(24, 8), encode-int(82, 8), encode-int(117, 8), encode-int(64, 8), leased-address); option rfc3442-classless-static-routes 24, 82, 117, 64, 0, 0, 0, 0, 0, 172, 18, 46, 1; и т.д.
Жаль, это не работает для Windows 2000 (да и в Висте, судя по ссылкам во время поиска в гугле, в этом что-то поломали), но для большинства XPёвых машин в сети теперь будет всё нормально :)
UPDATE: Сообщили, что за прошедшие сутки с момента включения этих опций наблюдались проблемы у некоторых юзеров - Виста не может получить адрес. В инете нашлось по теме http://users.livejournal.com/_pacak_/48017.html и http://support.microsoft.com/default.aspx/kb/928233. Блядский Мелкософт. Поймаю живую Висту, поэкспериментирую, а пока что отключил опцию (странно, оно же раньше получало, в статье-то речь про другое)...
UPD2: Была найдена также ссылка http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=1383260&SiteID=17 и вышедший с тех пор хотфикс http://support.microsoft.com/kb/933340/ (должен был войти в Vista SP1). По ссылке сообщается, что Виста понимает как опцию 249, так и опцию 121 (по стандарту), но не будет принимать дублирующиеся маршруты - а в моем конфиге в обеих опциях маршруты как раз дублировались. Однако, экспериментов с этим все равно не проводил (и человеку по ссылке тоже не помогло, впрочем, у него это было до хотфикса).
Наткнулся на http://psylive.ru/article.asp?gl=17&id=524. Очень интересно пишет о недостатках ЖЖ, в социальном плане. В основном оно все проистекает от комментов, френдования, ну и открытости кому попало, естественно. Что-то из этого было понятно и так, например, наблюдаем вечные флеймы на ЛОРе с его анонимусами, или предрассудки насчет взаимного френдования те же. Но многое, хотя и чувствуется порой смутно (вроде писания реже, но интереснее), вытащено на поверхность и описано. Типа:
Или вот:
ППКС. Никогда не понимал тех, кто удаляет дневники насовсем - information must be free, и она должна оставаться.
Ну и нельзя не отметить бесплодные перепалки в комментах, когда набегающим комментаторам обычно не объяснить, что, собственно, имелось в виду. Да, в принципе это возможно, изложить весь свой опыт и прочее, но это очень долго, и отнимает у автора силы и время, что лучше следовало бы потратить на дальнейшие исследования/мысли по теме.
И много всего прочего. Читать однозначно.
12. Излишне "дневниковое" отношение к старым записям. Сам факт нашего пребывания в "дневниковом поле" ведёт к тому, что предпочитают читать только самые новые записи. Сам факт того, что запись старая, вынуждает относится к ней как к принципиально _у_с_т_а_р_е_в_ш_е_й_, то есть как бы неправильной. Получается так, что даже интересный и важный в смысловом отношении текст может у кого-то восприниматься иначе: ну да, интересный, но он же старый! Отсюда и обратное отношение автора к своему тексту: ну чего там трудиться, всё равно текст скоро устареет... Разумеется, из этого правила множество исключений; да только правило создаёт соответствующую атмосферу, которая не может не сказываться и на самых исключениях.
Или вот:
27. Среди многих юзеров бытует мнение, что это хороший тон - ответить на все поступившие комментарии, в том числе и на наши комментарии под чужими записями. На один-единственный комментарий не ответишь - автор другого может обидеться, что его оставили без внимания. Ещё расфрендит, чего доброго... Кроме того, считают необходимым доведение дискуссии до конца.
Одним из главных соблазнов ЖЖ заключается в том, чтобы отвечать решительно всем. Поддавшись ему, авторы часами бродят по пришедшим на почту ссылкам и скрупулёзно отвечают на комментарии. Этот процесс может занять весь день. К вечеру человек чувствует себя совершенно измотанным от этой тяжёлой работы, смутно чувствует, что она бессмысленна, но продолжает добросовестно отвечать. И даже пишет: 'Обязательно отвечу всем'. Именно из-за гигантских потерь времени при комментировании юзеры 'убивают' свои дневники. Когда их потом спрашивают, 'ну а дневник-то зачем удалили? Не проще было комментарии запретить', то никто, как правило, не отвечает. И знаете почему? Потому что психически зависит от взаимного комментирования. Комментирование рассматривается ими как аксиома. Лучше уничтожить дневник с ценными ссылками и записями, чем отказываться от комментариев.
Ну так вот, в связи с этим хочется спросить: вы точно уверены, что отвечать всем обязательно?
ППКС. Никогда не понимал тех, кто удаляет дневники насовсем - information must be free, и она должна оставаться.
Ну и нельзя не отметить бесплодные перепалки в комментах, когда набегающим комментаторам обычно не объяснить, что, собственно, имелось в виду. Да, в принципе это возможно, изложить весь свой опыт и прочее, но это очень долго, и отнимает у автора силы и время, что лучше следовало бы потратить на дальнейшие исследования/мысли по теме.
29. 'Картину раз рассматривал сапожник...' Процесс комментирования (точнее, авторские ответы на отзывы, идущие внизу записи) порождает одно из самых мощных искушений виртуального общения - желание более полно объяснить свои мысли, убедить в своей правоте и склонить собеседника на свою сторону. По самой своей сути такой подход несёт в себе скрытую 'либеральную угрозу': неосознанно мы предполагаем, что собеседник является нам ровней и понимает ровно столько же, сколько мы сами. Как и всё, связанное с либерализмом, такое отношение вредно, и должно быть задушено в корне самым простым авторитаризмом.
А именно, у нас должно быть чёткое понимание и твёрдая воля никому ничего _д_о_п_о_л_н_и_т_е_л_ь_н_о_ не объяснять. Если, прочтя нечто, человек не понял, то уже не поймёт: 'Кто имеет, тому дано будет, и приумножится'. Вполне логично не вдаваться в длинные и, как правило, путаные объяснения, но предоставить человеку время вразумиться: возможно, в процесса дальнейшего своего развития он дорастёт до изложенных вами мыслей.
Имело бы смысл ориентироваться на возражения людей, которые понимают проблему глубже, чем вы; все остальные того не стоят. Читатель должен быть достаточно умён, чтобы почувствовать, что данный автор понимает мир глубже него. После этого читатель должен переключиться на смиренное выслушивание авторских аргументов и лишь эпизодические _д_о_п_о_л_н_е_н_и_я_ их. Ну и на безмолвное чтение его записей. А вовсе не на отстаивание собственной незрелой точки зрения.
Человек, не умеющий почувствовать более умного - законченный дурак. Более того. Нормальные, психологически полноценные люди имеют особое чутьё на более умных людей. Если же такого чутья нет, то человек ко всему ещё и не нормален. Развиться до понимания ваших идей ему не суждено.
Если же читатель более умён, чем автор, то тем более ему не следует вступать в какие-либо дискуссии: либо автор пойдёт в его ЖЖ, начнёт смиренно его изучать и развиваться, либо начнёт тупо толкать свою точку зрения и потому деградировать: 'А кто не имеет, у того отнимется и то, что имеет'. И потому нет ничего глупее, чем объясняться, почему вы это написали, да что именно имели в виду. Кому дано, тот и так поймёт. Всем этим я вовсе не утверждаю, что автору не следует уважать своего читателя. Я хочу сказать, что истину следует уважать больше.
И много всего прочего. Читать однозначно.
Как из Линукса уходят разработчики
Aug. 27th, 2007 03:27 pmЧитаю http://apcmag.com/node/6735/ - Con Kolivas, один из разработчиков ядра Linux, известный своей веткой пачтей к ядру -ck (увеличивает интерактивность работы на десктопе, пользовалась большой популярностью), дает интервью по поводу своего ухода из разработки.
Начал он издалека, с тех дней в конце 80-х - начале 90-х, когда рынок персональных компьютеров наполняло все новое и новое оригинальное железо, была конкуренция, чем стимулировались инновации и развитие. Затем постепенно Microsoft подмял рынок софта под себя, и постепенно пришли к ситуации резкого снижения конкуренции, количество производителей железа сильно уменьшилось, оно стало производиться под конкретную ОС. В результате сейчас имеем, что вычислительная мощность растет, а без толку (заметна разве что в непосредственно вычислительных задачах, скажем, сжатию видео и т.п.), каких-либо новых разработок не наблюдается.
Подстегивающую конкуренцию теперь могут оказать разве что только альтернативные ОС, прежде всего Линукс, но тут возникает другая проблема - его разработчики нифига не ориентируются на десктоп. Они смотрят на корпорации, на сервера, а корпоративные пользователи, по его словам, заинтересованы прежде всего в том, что бы выжать еще один процент в очередном бенчмарке базы данных, и т.п. Соответственно, когда ему надоело, что одно приложение может "заткнуть" другое из-за неравномерного распределения ресурсов, в 2002 году он взялся за Си, и стал патчить. Постепенно обрел популярность у очень большого числа пользователей, но в основное ядро его патчи так и не включили. Точнее, включали отдельные мелочи, но толку, когда надо менять архитектуру?..
Тогда он написал новый планировщик. Но разработчики ядра, увы, его патчи не принимают, мол, есть более важные дела, тогда как на деле заняты "бесконечным переписыванием работающих подсистем" (он вообще едко о других разработчиках отзывается). Проблему убеждения в необходимости существования нескольких планировщиков можно было бы решить, наверное, голосами рядовых пользователей. Но...
Вплоть до того, что хоть он и общается с пользователями сам, ибо в мэйллистах разработчиков их заклюют, они начинают бояться даже его самого, так что ему приходится иногда самому бегать и искать багрепорты:
Ну и когда дело дошло до того, что предложенные планировщик и фреймворк для подключения в ядро нескольких планировщиков были переписаны заново на схожих принципах майнтейнером текущего планировщика, которые он ранее отвергал, Кона это достало, и он решил уйти насовсем, как только доведет свой до состояния reference implementation, дабы было с чем сравнивать, а не только лишь с предыдущим.
Вот такие дела. Стоит читать все интервью целиком, да.
Начал он издалека, с тех дней в конце 80-х - начале 90-х, когда рынок персональных компьютеров наполняло все новое и новое оригинальное железо, была конкуренция, чем стимулировались инновации и развитие. Затем постепенно Microsoft подмял рынок софта под себя, и постепенно пришли к ситуации резкого снижения конкуренции, количество производителей железа сильно уменьшилось, оно стало производиться под конкретную ОС. В результате сейчас имеем, что вычислительная мощность растет, а без толку (заметна разве что в непосредственно вычислительных задачах, скажем, сжатию видео и т.п.), каких-либо новых разработок не наблюдается.
Подстегивающую конкуренцию теперь могут оказать разве что только альтернативные ОС, прежде всего Линукс, но тут возникает другая проблема - его разработчики нифига не ориентируются на десктоп. Они смотрят на корпорации, на сервера, а корпоративные пользователи, по его словам, заинтересованы прежде всего в том, что бы выжать еще один процент в очередном бенчмарке базы данных, и т.п. Соответственно, когда ему надоело, что одно приложение может "заткнуть" другое из-за неравномерного распределения ресурсов, в 2002 году он взялся за Си, и стал патчить. Постепенно обрел популярность у очень большого числа пользователей, но в основное ядро его патчи так и не включили. Точнее, включали отдельные мелочи, но толку, когда надо менять архитектуру?..
A scheduler that was deterministic and predictable and still interactive is a much better option long term than the hack after hack approach we were maintaining.
Тогда он написал новый планировщик. Но разработчики ядра, увы, его патчи не принимают, мол, есть более важные дела, тогда как на деле заняты "бесконечным переписыванием работающих подсистем" (он вообще едко о других разработчиках отзывается). Проблему убеждения в необходимости существования нескольких планировщиков можно было бы решить, наверное, голосами рядовых пользователей. Но...
If there is any one big problem with kernel development and Linux it is the complete disconnection of the development process from normal users. You know, the ones who constitute 99.9% of the Linux user base.
Вплоть до того, что хоть он и общается с пользователями сам, ибо в мэйллистах разработчиков их заклюют, они начинают бояться даже его самого, так что ему приходится иногда самому бегать и искать багрепорты:
Just trawl the normal support forums (which I did for Gentoo users as a way of finding bug reports often because the users were afraid to tell me) and see how many obvious kernel related issues there are. I'd love to tell them all to suddenly flood lkml with their reports of failed boots with various kernels, hardware disappearing, stopping working suddenly, memory disappearing, trying to use software suspend and having your balls blown off by your laptop, and so on.
Ну и когда дело дошло до того, что предложенные планировщик и фреймворк для подключения в ядро нескольких планировщиков были переписаны заново на схожих принципах майнтейнером текущего планировщика, которые он ранее отвергал, Кона это достало, и он решил уйти насовсем, как только доведет свой до состояния reference implementation, дабы было с чем сравнивать, а не только лишь с предыдущим.
Вот такие дела. Стоит читать все интервью целиком, да.
Оптимистичная патологоанатомическая
Aug. 5th, 2007 12:43 amВыловлено в RU.BLACK.HUMOR
1. Судя по результатам вскрытия, больной умер просто так.
2. Больной от вскрытия отказался.
3. Попытка вскрытия Ахиллеса провалилась.
4. Работника морга не было, вскрытие проводил реаниматор. Состояние мертвого удовлетворительное, он быстро идет на поправку.
5. Вскрытие проводил мясник, по его словам, труп умер от отсутствия внутренних органов.
6. После смерти патологоанатом вскрыл сам себя.
7. Вскрытие проводил психолог. "Какой нелюдимый и замкнутый труп" , - посетовал он., - "Hо за десять сеансов, я верну его в лоно общества."
8. Во время вскрытия труп спросил: "Доктор, это очень серьёзно?"
9. В Арсеньевском морге был пойман труп, сдающий на цветмет алюминиевые бирки с пальцев коллег. Приговорён к досрочному вскрытию.
10. Из отделения милиции поступил труп гражданина H. 42-х лет. Как показало вскрытие, гражданин страдал врожденными переломами многих костей и почечной отбитостью.
11. В морг города H. случайно привезли свиную тушу. Когда ошибка была замечена, уже целиком зафармалиненый труп был продан в музей г. Чикаго под названием "копытный мегамутант из России"
12. В парке был найден труп человека приблизительно 20 лет. Как следует из показаний, находящейся рядом группы молодёжи, он был трупом с самого рождения и всегда тут лежал.
13. В морг г. Арсеньева поступил труп студента, внезапно умершего на лекции. Как показало вскрытие - студент спал.
14. Попытка вскрытия сантехника дяди Васи не удалась - скальпель безнадёжно увязал в ватнике.
15. Для определения причины смерти предпринята попытка вскрытия трупа гражданина H. , найденного в лесополосе. Попытка провалилась, скальпель напрочь затупливается об топор, торчащий из груди трупа.
16. Патологоанатом отказался вскрывать повешенного, мотивируя это тем, что "труп вертится".
17. Патологоанатом H. на спор вскрывал трупы от ключицы до паха любимым эпадоном.
18. Кровавый маньяк города H. оказался патологоанатомом Разделайко. Он был горячо осужден коллегами: "Как можно сразу вскрывать, надо же и другим разрешить проявить себя", - ругался хирург Резунов.
19. В морг города Щ (Америка) был доставлен странно шевелящийся труп. Hа звонок в морг с вопросом: "Hу что там?", - корреспонденты получили странный ответ, - "We need your brain."
20. Hа вопрос, почему же он выбрал такую профессию, Патологоанатом Парабираев отвечал: "Да хорошо! Я как бы и доктор, а клиенты тихие, и претензий нет."
21. Патологоанатом Петров собрал труп человека, упавшего с двадцать пятого этажа, в аккуратную кучку лопатой и только потом вскрыл.
22. Однажды патологоанатом Петров, сидя дома у телевизора, задумался и вскрыл кошку.
23. Hаутро после дня патологоанатома похмельные коллеги с удивлением обнаружили, что ночью они успели вскрыть все трупы, сторожа и наряд милиции. И это они ещё не дошли до морга.
24. Иногда патологоанатом Пидорчук любил ходить в ресторан. Там он всегда заказывал большого лангуста, доставал любимый скальпель, и долго и с трудом его вскрывал. После этого отсутствие панциря на пациентах всегда вызывало у него прилив бодрости.
25. Под Чернобылем было обнаружено странное существо, не выглядящее никак. При вскрытии пострадал патологоанатом Петров, но его уже доставили во вполне комфортабельный дурдом и теперь он чувствует себя хорошо.
26. Когда патологоанатом Жаденков видел очень толстых людей, он подходил к ним и укоризненно говорил: "Вот чем я тебя вскрывать буду? В тебе же скальпель увязнет. " Людям было очень неловко, они долго извинялись и тут же садились на диету.
27. А еще говорят, что ночью по моргу ходит ужас патологоанатомов - Черный Хирург. Он сращивает вскрытые трупы как были, и патологоанатомам приходится с утра все переделывать.
28. Когда патологоанатому Петрову снились кошмары, он всегда вставал, вскрывал пару трупов, и на душе снова становилось спокойно и весело. А когда его доставали соседи, он вскрывал труп соседа, и спокойнее становилось не только в душе, но и на лестничной площадке.
29. При вскрытии несвежего трупа, у которого в желудке была ёмкость с кокаином, ёмкость была повреждена. Понюхать этот замечательный труп приходили со всех городских моргов.
30. Вскрытие трупа известного карманника по кличке Пианист, так и не состоялось. При приближении к трупу, у персонала пропадал инструмент и личные вещи.
31. Как-то забывшись, патологоанатом Петров вскрыл пирожок с ливером и собрал органы как были.
32. Бывший патологоанатом Иванов пошел в хирурги. Он оказался гениальным врачом, но всегда на операции брал с собой специально обученную медсестру, которая время от времени напоминала: "До вскрытия этот труп был живой!"
33. При вскрытии труп зашевелился и сонным голосом попросил удалять аппендицит крайне аккуратно.
1. Судя по результатам вскрытия, больной умер просто так.
2. Больной от вскрытия отказался.
3. Попытка вскрытия Ахиллеса провалилась.
4. Работника морга не было, вскрытие проводил реаниматор. Состояние мертвого удовлетворительное, он быстро идет на поправку.
5. Вскрытие проводил мясник, по его словам, труп умер от отсутствия внутренних органов.
6. После смерти патологоанатом вскрыл сам себя.
7. Вскрытие проводил психолог. "Какой нелюдимый и замкнутый труп" , - посетовал он., - "Hо за десять сеансов, я верну его в лоно общества."
8. Во время вскрытия труп спросил: "Доктор, это очень серьёзно?"
9. В Арсеньевском морге был пойман труп, сдающий на цветмет алюминиевые бирки с пальцев коллег. Приговорён к досрочному вскрытию.
10. Из отделения милиции поступил труп гражданина H. 42-х лет. Как показало вскрытие, гражданин страдал врожденными переломами многих костей и почечной отбитостью.
11. В морг города H. случайно привезли свиную тушу. Когда ошибка была замечена, уже целиком зафармалиненый труп был продан в музей г. Чикаго под названием "копытный мегамутант из России"
12. В парке был найден труп человека приблизительно 20 лет. Как следует из показаний, находящейся рядом группы молодёжи, он был трупом с самого рождения и всегда тут лежал.
13. В морг г. Арсеньева поступил труп студента, внезапно умершего на лекции. Как показало вскрытие - студент спал.
14. Попытка вскрытия сантехника дяди Васи не удалась - скальпель безнадёжно увязал в ватнике.
15. Для определения причины смерти предпринята попытка вскрытия трупа гражданина H. , найденного в лесополосе. Попытка провалилась, скальпель напрочь затупливается об топор, торчащий из груди трупа.
16. Патологоанатом отказался вскрывать повешенного, мотивируя это тем, что "труп вертится".
17. Патологоанатом H. на спор вскрывал трупы от ключицы до паха любимым эпадоном.
18. Кровавый маньяк города H. оказался патологоанатомом Разделайко. Он был горячо осужден коллегами: "Как можно сразу вскрывать, надо же и другим разрешить проявить себя", - ругался хирург Резунов.
19. В морг города Щ (Америка) был доставлен странно шевелящийся труп. Hа звонок в морг с вопросом: "Hу что там?", - корреспонденты получили странный ответ, - "We need your brain."
20. Hа вопрос, почему же он выбрал такую профессию, Патологоанатом Парабираев отвечал: "Да хорошо! Я как бы и доктор, а клиенты тихие, и претензий нет."
21. Патологоанатом Петров собрал труп человека, упавшего с двадцать пятого этажа, в аккуратную кучку лопатой и только потом вскрыл.
22. Однажды патологоанатом Петров, сидя дома у телевизора, задумался и вскрыл кошку.
23. Hаутро после дня патологоанатома похмельные коллеги с удивлением обнаружили, что ночью они успели вскрыть все трупы, сторожа и наряд милиции. И это они ещё не дошли до морга.
24. Иногда патологоанатом Пидорчук любил ходить в ресторан. Там он всегда заказывал большого лангуста, доставал любимый скальпель, и долго и с трудом его вскрывал. После этого отсутствие панциря на пациентах всегда вызывало у него прилив бодрости.
25. Под Чернобылем было обнаружено странное существо, не выглядящее никак. При вскрытии пострадал патологоанатом Петров, но его уже доставили во вполне комфортабельный дурдом и теперь он чувствует себя хорошо.
26. Когда патологоанатом Жаденков видел очень толстых людей, он подходил к ним и укоризненно говорил: "Вот чем я тебя вскрывать буду? В тебе же скальпель увязнет. " Людям было очень неловко, они долго извинялись и тут же садились на диету.
27. А еще говорят, что ночью по моргу ходит ужас патологоанатомов - Черный Хирург. Он сращивает вскрытые трупы как были, и патологоанатомам приходится с утра все переделывать.
28. Когда патологоанатому Петрову снились кошмары, он всегда вставал, вскрывал пару трупов, и на душе снова становилось спокойно и весело. А когда его доставали соседи, он вскрывал труп соседа, и спокойнее становилось не только в душе, но и на лестничной площадке.
29. При вскрытии несвежего трупа, у которого в желудке была ёмкость с кокаином, ёмкость была повреждена. Понюхать этот замечательный труп приходили со всех городских моргов.
30. Вскрытие трупа известного карманника по кличке Пианист, так и не состоялось. При приближении к трупу, у персонала пропадал инструмент и личные вещи.
31. Как-то забывшись, патологоанатом Петров вскрыл пирожок с ливером и собрал органы как были.
32. Бывший патологоанатом Иванов пошел в хирурги. Он оказался гениальным врачом, но всегда на операции брал с собой специально обученную медсестру, которая время от времени напоминала: "До вскрытия этот труп был живой!"
33. При вскрытии труп зашевелился и сонным голосом попросил удалять аппендицит крайне аккуратно.
К сведению соратников
Jun. 13th, 2007 11:23 pmЗаглядывал тут давеча в архивы, наткнулся на свой старый пост и вспомнил, что я так и забыл поведать (надо было еще в старых спорах сделать, ага) френдам о том, что я копрофил. Вот, собсно, исправляю это недоразумение в порядке увеличения количества доступных сведений о себе - а то Сеть дело такое, много лет, бывает, общаешься, что-то подразумеваешь для себя очевидным - а мужики-то и не знают :-)
Тут коллега Citrin (
ospf_ripe) поделился опытом о программировании netgraph-ноды ng_bpf(4). Этот узел использует BPF (Berkeley Packet Filter) и позволяет ловить пакеты по определенным критериям, то есть может все то же самое, что и всем хорошо известный tcpdump. То есть, если ipfw(8) у нас умеет фильтровать только по заголовку пакета, то с помощью этой ноды можем фильтровать пакеты прямо в ядре как хотим, по содержимому, благо netgraph легко стыкуется с ipfw при помощи ng_ipfw(4). Citrin'у это понадобилось для фильтрации спамерских DNS-запросов на MX-записи (DoS'ящих DNS-сервер), что требует не такого уж и тривиального анализа пакета - нужно смотреть на байты, которые лежат по смещениям, вычисляемым по другим байтам в пакете. И возможности BPF эту задачу решить позволяют.
Да вот незадача - язык bpf(4) представляет собой специфический ассемблер виртуальной BPF-машины. И если tcpdump предоставляет удобный язык, самостоятельно компилируя заданное выражение в опкоды BPF (между прочим, в libpcap встроен неплохой компилятор, даже с оптимизатором), то ng_bpf требует программирования прямо в этих самых опкодах, которые надо откуда-то сначала получить. Конечно, можно изучить этот ассемблер и написать нужную программу на нем, он не очень сложен - но понятно, что это неудобно. Man-страница ng_bpf(4) предлагает способ использования для этой цели отладочного вывода компилятора libpcap, используемого в tcpdump, с помощью вспомогательного awk-скрипта. Здесь, однако, возникает проблема с отсылкой пакетов в netgraph из ipfw - они туда приходят без Ethernet-заголовка, занимающего 14 байт. А tcpdump генерирует программу с его проверкой. Есть, конечно, вариант подключения ng_bpf к ng_ether(4), напрямую, без файрвола, тогда выражение будет соответствовать. Однако это означает, что необходимо будет самостоятельно здесь же в программе проверять адреса назначения и тому подобное, что удобнее делать в файрволе, отправляя лишь нужные пакеты, кроме того, поскольку проверяться будет каждый пакет, возрастет нагрузка (ng_bpf может быть довольно прожорлив). Citrin решил это написанием небольшой программки на Си, которая компилирует выражение с типом DLT_RAW - каковые пакеты и ходят через ng_ipfw, что описал в подробностях на http://citrin.ru/freebsd:ng_ipfw_ng_bpf вместе с остальными подробностями по фильтрации MX-запросов (живой пример всегда интересен).
Здесь надо заметить, что по ссылке описан случай, когда пакеты, удовлетворяющие условию, просто отбрасываются - часто же нужно что-то сделать с ними дальше в файрволе другое, после проверки по содержимому как части правил файрвола, так сказать. Это можно сделать спомощью появившихся во FreeBSD 6.2-RELEASE тегов ipfw (ipfw tags) - в нетграф на пакет навешивается тег, потом в ipfw он проверяется (возможен и обратный сценарий). Когда я писал для этой цели ng_tag(4) (эта нода тоже вошла в состав 6.2), я столкнулся с той же проблемой - мне надо было фильтровать p2p-пакеты, что делалось в ng_bpf(4). И я, и Citrin попробовали опцию tcpdump -y raw, но tcpdump проверяет допустимый DLT для интерфейса, и не дает указать DLT_RAW. В результате в примере в man ng_tag даются выражения tcpdump в "сырых" смещениях от начала пакета, вычисленных вручную по их формату (это все же проще, чем писать на ассемблере BPF, да); то же сделано и в проскакивавших в mail-листах FreeBSD подробных примерах фильтрации ICQ (авторства bird_of_Luck в IRC-сети RusNet) и BitTorrent.
Стоит заметить, что не всякий L7 filtering может быть сделан с помощью ng_bpf - поскольку в этом ассемблере запрещены условные переходы назад и таким образом циклы, нельзя организовать, например, поиск фиксированной подстроки по заранее неизвестному (и никак не вычисляемому из других данных) смещению в пакете (то, что делает iptables -m string) - думается, в будущем будет написан netgraph-узел, который займется именно этим :)
...Ну а что касается любителей хитрых трюков, то способ использования tcpdump в привычном виде без всяких программок все же был найден :) Для этого необходим файл, записанный ранее с помощью tcpdump -w с data link type DLT_RAW. Содержимое неважно - ведь используется отладочный вывод. То есть, необходимо дать команду вида tcpdump -ddd -r file.raw expression (заменить в скриптах по вкусу).
Получить такой файл можно, например, с помощью утилиты ipfwpcap(8). Это, кстати, довольно полезная вещь сама по себе - вешается на divert-сокет и записывает в файл, который потом можно прочитать с помощью tcpdump -r, пришедшие в него пакеты. Она включена в состав 7-CURRENT, правда, я бы порекомендовал взять версию с http://antigreen.org/vadim/freebsd/ipfwpcap/ - там добавлено несколько полезных фич вроде переоткрытия логов по SIGHUP и т.п. приближений по функционалу к pflogd(8).
UPD: Более подробно тема программирования BPF раскрыта здесь: http://nuclight.livejournal.com/124989.html
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Да вот незадача - язык bpf(4) представляет собой специфический ассемблер виртуальной BPF-машины. И если tcpdump предоставляет удобный язык, самостоятельно компилируя заданное выражение в опкоды BPF (между прочим, в libpcap встроен неплохой компилятор, даже с оптимизатором), то ng_bpf требует программирования прямо в этих самых опкодах, которые надо откуда-то сначала получить. Конечно, можно изучить этот ассемблер и написать нужную программу на нем, он не очень сложен - но понятно, что это неудобно. Man-страница ng_bpf(4) предлагает способ использования для этой цели отладочного вывода компилятора libpcap, используемого в tcpdump, с помощью вспомогательного awk-скрипта. Здесь, однако, возникает проблема с отсылкой пакетов в netgraph из ipfw - они туда приходят без Ethernet-заголовка, занимающего 14 байт. А tcpdump генерирует программу с его проверкой. Есть, конечно, вариант подключения ng_bpf к ng_ether(4), напрямую, без файрвола, тогда выражение будет соответствовать. Однако это означает, что необходимо будет самостоятельно здесь же в программе проверять адреса назначения и тому подобное, что удобнее делать в файрволе, отправляя лишь нужные пакеты, кроме того, поскольку проверяться будет каждый пакет, возрастет нагрузка (ng_bpf может быть довольно прожорлив). Citrin решил это написанием небольшой программки на Си, которая компилирует выражение с типом DLT_RAW - каковые пакеты и ходят через ng_ipfw, что описал в подробностях на http://citrin.ru/freebsd:ng_ipfw_ng_bpf вместе с остальными подробностями по фильтрации MX-запросов (живой пример всегда интересен).
Здесь надо заметить, что по ссылке описан случай, когда пакеты, удовлетворяющие условию, просто отбрасываются - часто же нужно что-то сделать с ними дальше в файрволе другое, после проверки по содержимому как части правил файрвола, так сказать. Это можно сделать спомощью появившихся во FreeBSD 6.2-RELEASE тегов ipfw (ipfw tags) - в нетграф на пакет навешивается тег, потом в ipfw он проверяется (возможен и обратный сценарий). Когда я писал для этой цели ng_tag(4) (эта нода тоже вошла в состав 6.2), я столкнулся с той же проблемой - мне надо было фильтровать p2p-пакеты, что делалось в ng_bpf(4). И я, и Citrin попробовали опцию tcpdump -y raw, но tcpdump проверяет допустимый DLT для интерфейса, и не дает указать DLT_RAW. В результате в примере в man ng_tag даются выражения tcpdump в "сырых" смещениях от начала пакета, вычисленных вручную по их формату (это все же проще, чем писать на ассемблере BPF, да); то же сделано и в проскакивавших в mail-листах FreeBSD подробных примерах фильтрации ICQ (авторства bird_of_Luck в IRC-сети RusNet) и BitTorrent.
Стоит заметить, что не всякий L7 filtering может быть сделан с помощью ng_bpf - поскольку в этом ассемблере запрещены условные переходы назад и таким образом циклы, нельзя организовать, например, поиск фиксированной подстроки по заранее неизвестному (и никак не вычисляемому из других данных) смещению в пакете (то, что делает iptables -m string) - думается, в будущем будет написан netgraph-узел, который займется именно этим :)
...Ну а что касается любителей хитрых трюков, то способ использования tcpdump в привычном виде без всяких программок все же был найден :) Для этого необходим файл, записанный ранее с помощью tcpdump -w с data link type DLT_RAW. Содержимое неважно - ведь используется отладочный вывод. То есть, необходимо дать команду вида tcpdump -ddd -r file.raw expression (заменить в скриптах по вкусу).
Получить такой файл можно, например, с помощью утилиты ipfwpcap(8). Это, кстати, довольно полезная вещь сама по себе - вешается на divert-сокет и записывает в файл, который потом можно прочитать с помощью tcpdump -r, пришедшие в него пакеты. Она включена в состав 7-CURRENT, правда, я бы порекомендовал взять версию с http://antigreen.org/vadim/freebsd/ipfwpcap/ - там добавлено несколько полезных фич вроде переоткрытия логов по SIGHUP и т.п. приближений по функционалу к pflogd(8).
UPD: Более подробно тема программирования BPF раскрыта здесь: http://nuclight.livejournal.com/124989.html