<span style='color:Blue'>Хотелось бы открыть тему для тех, кто не только умеет жмакать на кнопку "Вызов" и на гиперссылки на интернет страницах, но и понимает принципы работы спутниковой связи и программного обеспечения на компьютере. Здесь можно делиться своими находками, опытом работы, приводить интересные статьи из ресурсов инета.</span> <span style='color:green'>Спутниковый интернет на SkyStar1 и SkyStar2 под Linux</span> <span style='color:red'>1. Подготовка</span> Подготовка к работе всегда занимает времени больше, чем сама работа Народная мудрость Самый простой й взгляд путь — это работать с ветвью ядра версии 2.6.xx. На данный момент на сайте kernel.org доступная версия 2.6.13.1. Насколько я понял, начиная с версии 2.6.11, благодаря стараниям NuclearCat встроенные в ядро драйвера DVB-карт SkyStar 1 и SkyStar 2 прекрасно работают. <span style='color:red'>1.1 SkyStar 1. Linux kernel v2.6.1x.x</span> Сейчас мы устанавливаем карточку SkyStar 1 под Linux, с ядром версии не ниже 2.6.11. Карта эта — весьма капризная особа и к ней, как минимум понадобится дополнительный охладитель. В файл конфигурации надо доабавить следующие опции ([m] — в виде модуля, [y] — собрать вместе с ядром): # # Digital Video Broadcasting Devices # DVB=[y] CONFIG_DVB=[y] CONFIG_DVB_CORE=[m|y] CONFIG_DVB_VES1X93=[m|y] CONFIG_DVB_AV7110=[m|y] CONFIG_DVB_AV7110_OSD=[y] CONFIG_VIDEO_SAA7146=[m|y] CONFIG_VIDEO_SAA7146_VV=[m|y] CONFIG_VIDEO_VIDEOBUF=[m|y] CONFIG_VIDEO_TUNER=[m|y] CONFIG_VIDEO_BUF=[m|y] CONFIG_VIDEO_BTCX=[m|y] CONFIG_VIDEO_IR=[m|y] После сборки должен получится следующий набор модулей[2]: dvb-ttpci Основной драйвер полнофункциональных карт, основанных на чипсете AV7110. videodev Модуль ядра Video4Linux. Это основной модуль, предоставляющий доступ к аналоговой «картинке» mpeg2-декодера av7110. v4l2-common Модуль вспомогательных функций драйверов Video4Linux-2. v4l1-compat Модуль вспомогательных функций для обратной совместимости приложений, использующих Video4Linux-1. dvb-core Модуль ядра DVB. Обеспечивает поддержку работы с утройствами каталога /dev/dvb/adapter/ saa7146 Ядро драйвера SAA7146. Необходим для работы со всеми устройствами, основанными на чипсете saa7146. saa7146_vv Поддержка функций Видео и Виртуальных Двоичных Интерфейсов (VBI — Video Binary Interface). Этот модуль необходим только для работы с полнофункциональными DVB-картами. video-buf Вспомогательный модуль saa7146 для захвата видеопотока. Модуль для захвата видеопотока. dvb-ttpci Основной драйвер карт основанных на AV7110 и полнофункциональных DVB-S/C/T Подгружать модули в память и перезагружаться с обновлённым ядром пока рановато. Вряд-ли dvb-ttpci загрузится без необходимых программных средств — firmware. Этот файл будет загружаться непосредственно в исполнительное устройство карты, примерно также, как подгружаются firmware-файлы в софтварные модемы. Так, что необходимо в зависимости от версии карты загрузить с сайта LinuxTV необходимый файл: Name Last Modified Size Parent Directory 09-Jun-2005 19:52 - dvb-ttpci-01.fw-261a 14-Nov-2004 00:48 221k dvb-ttpci-01.fw-261b 14-Nov-2004 00:48 221k dvb-ttpci-01.fw-261c 14-Nov-2004 00:48 221k dvb-ttpci-01.fw-261d 26-Dec-2004 01:02 227k dvb-ttpci-01.fw-261f 06-Jul-2005 00:44 229k А можно нигде эти файлы не искать и загрузить нужный файл при помощи скрипта, находящегося в документации, прилагающейся к исходному коду ядра — Documents/dvb/get_dvb_firmware Нужный файл надо переименовать в dvb-ttpci-01.fw и положить в папку /lib/firmware. (Расположение этой директории, как правило определяется переменной FIRMWARE_DIR в файле /etc/hotplug/firmware.agent.) Если карта установлена в компьютер, то можно попытаться всё это загрузить: modprobe dvb_core dvb_shutdown_timeout=0 dvb_net_debug=1 и dvb-ttpci videodev v4l2-common v4l1-compat saa7146 saa7146_vv video-buf dvb-ttpci. Обратите внимание на параметр, передаваемый при загрузке модуля dvb_core — dvb_shutdown_timeout=0. Дело в том, что карты SkyStar 1 и SkyStar 2 для защиты от перегрева при отсутствии нагрузки выключаются и теряют связь. Число 0 означает не выключаться никогда. Если всё прошло успешно, то dmesg | less должен показать примерно такую распечатку: dvb-ttpci: gpioirq unknown type=0 len=0 dvb-ttpci: info @ card 0: firm f0240009, rtsl b0250018, vid 71010068, app 8000261d dvb-ttpci: firmware @ card 0 supports CI link layer interface dvb-ttpci: Crystal audio DAC @ card 0 detected saa7146_vv: saa7146 (0): registered device video0 [v4l2] DVB: registering frontend 0 (ST ST V0299 DVB-S)... dvb-ttpci: found av7110-0. Осталось прописать модули в автоматическую загрузку, обновить ядро и перезагрузиться. <span style='color:red'>1.2 SkyStar 1, Linux, Ядро 2.4.xx</span> В отличие от ядра 2.6.xx.x в нём драйверов для карт SkyStar 1 и SkyStar 2 нет. Драйвера придётся загрузить с опять-таки с сайта LinuxTV. На данный момент это — <a href='http://www.linuxtv.org/downloads/linuxtv-dvb-1.1.1.tar.bz2' target='_blank'>http://www.linuxtv.org/downloads/linuxt ... .1.tar.bz2</a> [327K]. Правда, во многих местах в сети, в частности в статьте, размещённой на сайте General Satellite «Программное обеспечение под Linux 2.4», утверждается, что эти драйвера для работы с интернет не годятся — всё нормально загружается, но спутник не «лочится». Во всяком случае, в большинстве сетевых заметок, настоятельно рекомендуется взять альтернативные драйвера от Дениса Федорищенко (NuclearCat) — <a href='http://www.gs.ru/soft/si/ss1lin/nuclear/ss1linux-rc5.tar.gz' target='_blank'>http://www.gs.ru/soft/si/ss1lin/nuclear ... rc5.tar.gz</a> [1.8M] В сети есть немало статей, посвящённых установке и настройке DVB-драйверов в под ядром Linux v2.4.xx.x, в частности, например, статьи Сергея Мазенкова <a href='http://www.gs.ru/info/si/1dvbsonlinux.html/' target='_blank'>«Как запустить интернет через DVB-S под Linux 2.4»</a>, <a href='http://www.linuxrsp.ru/artic/dvb.html/' target='_blank'>Сергея Ткачова «Digital Video Broadcasting или как заставить работать TechniSat SkyStar-1 под Linux»</a> или <a href='http://www.d-v.ru/setup/setup.php?id=5/' target='_blank'>«Установка спутникового Internet под Linux»</a> Все эти руководства, кроме последнего, предлагают устанавливать <a href='http://members.tripod.com/andrei_b/files/linux/dvb/dvbds-2.tar.gz/' target='_blank'>dvbds-2</a>,<a href='http://members.tripod.com/andrei_b/files/linux/dvb/archive/dvbd3.tar.bz2/' target='_blank'>dvbd3.</a> Желательно созданный Andrix'ом. Даже в знаменитом Sat-HOWTO предлагается использовать этот путь. Однако, данная концепция на сей день несколько устарела, так что остановим наше внимание на «штатных» драйверах: <a href='http://www.linuxtv.org/downloads/linuxtv-dvb-1.1.1.tar.bz2' target='_blank'>http://www.linuxtv.org/downloads/linuxt ... .1.tar.bz2</a> от LinuxTV. Порядок установки вполне соответствует декларированному в прилагаемом Readme-файле. Нужно только не забыть скачать firmware (в моём случае это файл <a href='http://www.linuxtv.org/downloads/firmware/dvb-ttpci-01.fw-261d' target='_blank'>http://www.linuxtv.org/downloads/firmwa ... 01.fw-261d</a> «Раскручиваем» куда-нибудь полученный исходник: tar -jxvf linuxtv-dvb-1.1.1.tar.bz2, заходим в получившуюся директорию linuxtv-1.1.1. Файл firmware помещаем в поддиректорию build-2.4, переименовав его в dvb-ttpci-01.fw. Не стоит забывать, что надо сделать ссылку /usr/src/linux из того места, где находятся исходные коды Вашего ядра. В моём случае это выглядело так: ln -sf /usr/src/linux-2.4.31 /usr/src/linux. Теперь можно запустить (прямо из linuxtv-1.1.1/build-2.4 make. Поправим файл linuxtv-1.1.1/build-2.4: # DVB core insmod ./dvb-core.o на # DVB core insmod ./dvb-core.o dvb_shutdown_timeout=0 Это, опять таки, необходимо, чтобы карта при отсутствии каких-либо действий, самопроизвольно не выключилась. Если загрузка модулей прошла удачно, то следующей командой должна быть ./insmod.sh load (её следует запускать только из linuxtv-1.1.1/build-2.4) Если lsmod покажет что-то вроде этого: dvb-core 39616 0 [ttusb_dec dvb-ttusb-budget dvb-ttpci mt312 cx24110 grundig_29504-491 grundig_29504-401 tda1004x ves1820 stv0299 alps_tdmb7 alps_tdlb7 ves1x93] К моему удивлению, dmesg | less наличия dvb-ttpci устройства не показал, но карта работала! Впрочем, об этом будем говорить несколько позже. На данный момент dmesg выдал следующее: Linux video capture interface: v1.00 saa7146: register extension 'dvb'. PCI: Found IRQ 5 for device 00: 09.0 saa7146_core: found saa7146 @ mem d09f4000 (revision 1, irq 5) (0x13c2,0x0000). DVB: registering new adapter (Siemens/Technotrend/Hauppauge PCI rev1.3). probe_tuner: try to attach to Siemens/Technotrend/Hauppauge PCI rev1.3 stv0299.c: setup for tuner BSRU6, TDQB-S00x DVB: registering frontend 0: 0 (STV0299/TSA5059/SL1935 based)... Siemens/Technotrend/Hauppauge PCI rev1.3 adapter 0 has MAC addr = 00: d0: 5c: 03: 8b: 14 DVB: AV7110(0) - firm f0240009, rtsl b0250018, vid 71010068, app 8000261b DVB: AV7110(0) - firmware supports CI link layer interface av7110(0): Crystal audio DAC detected saa7146_fops: saa7146 (0): registered device video0 [v4l2] av7110: found av7110-0. saa7146: register extension 'budget dvb'. saa7146: register extension 'budget_ci dvb'. saa7146: register extension 'budget dvb /w video in'. Если нас всё устраивает, то можно зайти в linuxtv-1.1.1 и набрать make install и настроить автоматическую загрузку модулей при запуске системы, на забыв про dvb-core dvb_shutdown_timeout=0 <span style='color:red'>1.3. SkyStar 2, Linux kernel v2.6.xx.x</span> Теперь попробуем установить SkyStar 2. Пожалуй, самое толковое руководство по этому вопросу сделано NuclearCat — <a href='http://www.gs.ru/info/si/ss2lin24.html/' target='_blank'>«Руководство по установке SkyStar2 под Linux 2.4».</a> Это вполне понятно — кто лучше автора расскажет о том, как оно всё работает. И даже не важно, что оно сделано для ядра 2.4 — для ядер ветки 2.6.xx.x технология будет почти такой же, за исключением того, что с сайта LinuxTV нам ничего загружать не придётся. «Родные» драйвера ядра вполне работоспособны. Таким образом, нам осталось добавить в /usr/src/linux/.config следующие настройки: # # Digital Video Broadcasting Devices # CONFIG_DVB=y CONFIG_DVB_CORE=m # # Supported FlexCopII (B2C2) Adapters # CONFIG_DVB_B2C2_FLEXCOP=m CONFIG_DVB_B2C2_FLEXCOP_PCI=m CONFIG_DVB_B2C2_FLEXCOP_USB=m # CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set CONFIG_DVB_B2C2_SKYSTAR=m # # DVB-S (satellite) frontends # CONFIG_DVB_STV0299=m CONFIG_DVB_MT312=m Ну чтож, теперь наберём в директории cd /usr/src/linux/ && make mrproper && make modules && make modules_install. Модули готовы. Понадобится нам всего три из них: dvb-core, stv0299, skystar2. Как и в случае со SkyStar 1 при загрузке модуля dvb-core следует загружать с параметрами dvb_shutdown_timeout=0. В противном случае, сигнала Вы просто не увидите! Итак: modprobe dvb-core dvb_shutdown_timeout=0 dvb_net_debug=1 && modprobe stv0299 && modprobe skystar2. dmesg должен показать следующее (MAC-адрес должен соответсвовать MAC-адресу с метки на Вашей карте): drivers/media/dvb/b2c2/skystar2.c: FlexCopIIB(rev.195) chip found drivers/media/dvb/b2c2/skystar2.c: the chip has 38 hardware filters driver_initialize MAC address = 00: d0: d7:0c: d3: 1dcf: 34: DVB: registering new adapter (SkyStar2). DVB: registering frontend 0 (ST STV0299 DVB-S)... Если Вы видите что-то подобное у себя, значит драйвера установлены вполне удачно. <span style='color:red'>1.4. SkyStar 2, Linux v2.4.xx</span> Процесс установки под ядром 2.4.xx.x почти идентичен установке под 2.6.xx.x, за исключением того, что нам придётся взять драйвера: 1. <a href='http://www.linuxtv.org/downloads/linuxtv-dvb-1.1.1.tar.bz2' target='_blank'>http://www.linuxtv.org/downloads/linuxt ... .1.tar.bz2</a> с LinuxTV или 2. «родные» драйвера от NuclearCat — <a href='http://www.nuclearcat.com/soft/linuxtv-dvb-1.1.1a.tar.bz2' target='_blank'>http://www.nuclearcat.com/soft/linuxtv- ... 1a.tar.bz2</a> Как и в случае с картой SkyStar 2, нам понадобится «раскрутить» драйвера в какую-нибудь директорию: tar -jxvf linuxtv-dvb-1.1.1.tar.bz2, зайти в полученную папку и набрать make. Не будем, также, забывать, что в /usr/src/linux должен находится исходный код ядра Linux. Если процесс компилляции прошёл удачно, заходим в linuxtv-1.1.1/build-2.4 и загружаем модули: ./insmod.sh load. dmesg должен показать что-то вроде: Linux video capture interface: v1.00 saa7146: register extension 'dvb'. saa7146: register extension 'budget dvb'. saa7146: register extension 'budget_ci dvb'. saa7146: register extension 'budget dvb /w video in'. usb.c: registered new driver Technotrend/Hauppauge USB-Nova usb.c: registered new driver ttusb-dec PCI: Found IRQ 5 for device 00:09.0 skystar2.c: FlexCopIIB(rev.195) chip found skystar2.c: the chip has 38 hardware filters DVB: registering new adapter (Technisat SkyStar2 driver). probe_tuner: try to attach to Technisat SkyStar2 driver stv0299.c: setup for tuner Samsung TBMU24112IMB DVB: registering frontend 0:0 (STV0299/TSA5059/SL1935 based)... Если всё выглядит так, то считаем установку удачной и можем позволить себе запустить cd linuxtv-1.1.1 && make install и прописываем автозагрузку модулей при запуске системы. <span style='color:red'>2. Сетевой интерфейс— </span> Итак, если у Вас не установлена devfs, то Вам придётся создать соответсвующие интерфейсы. Лучше всего это сделать при помощи скрипта, предлагаемого NuclearCat в заметке <a href='http://www.gs.ru/info/si/ss2lin24.html/' target='_blank'>«Руководство по установке SkyStar2 под Linux 2.4.». </a> Почему-то в драйверах <a href='http://www.linuxtv.org/downloads/linuxtv-1.1.1.tar.bz2' target='_blank'>http://www.linuxtv.org/downloads/linuxtv-1.1.1.tar.bz2</a> скрипт так и неисправлен, так что копируйте его у NuclearCat и запускайте: ./makedev-dvb.sh. Впрочем, думаю, что лучше использовать devfs. Теперь настаёт достаточно сложный и ответственный момент: нам предстоит настроить карту на приём информации. Для этого понадобится набор утилит <a href='http://www.linuxtv.org/downloads/linuxtv-dvb-apps-1.1.0.tar.bz2' target='_blank'>http://www.linuxtv.org/downloads/linuxt ... .0.tar.bz2</a> всё с того же сайта LinuxTV. Если мы под ядром 2.4.xx.x, то всё в порядке — просто распаковываем поставку, заходим в получившуюся директорию linuxtv-dvb-apps-1.1.0 набираем make, если же ядро 2.6.xx.x, то нужно зайти в директорию linuxtv-dvb-apps-1.1.0/util/ и набрать make. После компилляции, получившиеся файлы: linuxtv-dvb-apps-1.1.0/utils/av7110_loadkeys/evtest linuxtv-dvb-apps-1.1.0/utils/av7110_loadkesy/av7110_evtest linuxtv-dvb-apps-1.1.0/utils/dvbdate/dvbdate linuxtv-dvb-apps-1.1.0/utils/dvbnet/dvbnet linuxtv-dvb-apps-1.1.0/utils/dvbtraffic linuxtv-dvb-apps-1.1.0/utils/scan/dvb-c linuxtv-dvb-apps-1.1.0/utils/scan/dvb-s linuxtv-dvb-apps-1.1.0/utils/scan/dvb-t linuxtv-dvb-apps-1.1.0/utils/szap/czap linuxtv-dvb-apps-1.1.0/utils/szap/szap linuxtv-dvb-apps-1.1.0/utils/szap/tzap либо в локальный ~/bin, в /usr/local/bin/ или ещё куда-нибудь, в «исполняемую» директорию. В этой «игре» нам понадобится всего три утилиты: szap, dvbnet и dvbtraffic Теперь нужно «рассказать» карте о том, с каким транспондером и с каким каналом ей предстоит работать. Например, для Сервиса Raduga, спутник Intelsat-904: частота 11595 GHz поляризация Вертикальная скороть передачи 29270 Msps PID 4155 Формат файла, содержащего в себе описания каналов S-диапазона таков: Поле Значение Описание Название канала/сервиса - Если есть символы, отличные от буквенно-цифровых или пробелы, то название заключить в двойные кавычки. Частота GHz Частота передачи канала со спутника в GHz. поляриазция v/h Поляриазция: v — вертикальная, h — горизонтальная (соответственно, для круговой h — левая круговая, v — правая круговая) diseqc 0/1 Если принимающая головка одна, то «0», если больше, то «1» symbol rate Msps Скороcть символьной передачи данных (symbol rate — Mega symbols per rate) V-PID номер Идентификатор Пакетов Видеопотока (Video Packet Identificator) A-PID номер Идентификтора Аудио Пакетов (Audio Packet Identificator) SID номер Идентификатор Сервиса (используется только в цифровом вещании) для использованием рессивера определённого сервиса (Service ID) Соответственно, создаём файл /etc/channels.conf и делаем в нём запись: Raduga:11595: v: 0: 29270: 0: 0: 0 Конечно, можно было бы и создать файл, скажем с названием Intelsat-904.60W и нашпиговать его параметрами транспондеров. Ну путь это будет спутник Intelsat-904 W60°. Параметры можно будет взять с сайта SatCodX: S 11155000 H 2963000 3/4 S 11491000 V 5787000 3/4 S 11520000 V 12000000 3/4 S 11529000 V 2893000 3/4 S 11555000 H 2927000 5/6 S 11595000 H 29270000 5/6 S 11595000 V 29270000 7/8 «напустить» scan на этот файл. Если всё верно настроено и антена хорошо сориентирована, то на экране получится что-то вроде scanning Intel904.60W using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0' initial transponder 11595000 H 29270000 7 initial transponder 11595000 V 29270000 7 initial transponder 11520000 V 12000000 3 >>> tune to: 11595: h: 0: 29270 WARNING: >>> tuning failed!!! >>> tune to: 11595: h: 0: 29270 (tuning failed) WARNING: >>> tuning failed!!! >>> tune to: 11595: v: 0: 29270 WARNING: filter timeout pid 0x0011 WARNING: filter timeout pid 0x0000 WARNING: filter timeout pid 0x0010 >>> tune to: 11520: v: 0: 12000 0x0000 0x0001: pmt_pid 0x0105 MIR-Teleport -- Moskow (running) 0x0000 0x0002: pmt_pid 0x0106 Teleport MIR -- HTB (running) 0x0000 0x0003: pmt_pid 0x0107 MIR-Teleport -- MIR-TV (running) 0x0000 0x0004: pmt_pid 0x0108 MIR Teleport -- MGOU (running) 0x0000 0x0006: pmt_pid 0x010a MIR-Teleport -- MIR Radio Service (running) 0x0000 0x0007: pmt_pid 0x0101 MIR-Teleport -- MAYAK FM (running) 0x0000 0x0008: pmt_pid 0x0100 MIR-Teleport -- MIR Service (running) 0x0000 0x0009: pmt_pid 0x0102 Mir Teleport -- Radio MIR (running) Network Name 'NDS' dumping lists (8 services) Moskow:11520: v: 0: 12000: 512: 650: 1 HTB:11520: v: 0: 12000: 515: 653: 2 MIR-TV:11520: v: 0: 12000: 514: 652: 3 MGOU:11520: v: 0: 12000: 517: 655: 4 MIR Radio Service:11520: v: 0:12000:0:660:6 MAYAK FM:11520: v: 0: 12000: 0: 662: 7 MIR Service:11520: v: 0: 12000: 513: 651: 8 Radio MIR:11520: v: 0: 12000: 0: 665: 9 Done. Только беда в том, что сервисы данных scan не «отловит» (обратите внимание на строчку >>> tune to: 11595:h:0:29270 WARNING: >>> tuning failed!!! Как раз, нужный мне транспондер) так что для настроек на Интернет Провайдера, придётся создавать файл channels.conf вручную. Попробуем настроить карту на приём данных: /bin/szap -c /etc/channels.conf. Опять же, если всё было сделано верно, то мы увидим на экране следующее: brat3 util # szap -c /etc/channels.conf -n 1 -x reading channels from file '/etc/channels.conf' zapping to 1 'I904': sat 0, frequency = 11595 MHz V, symbolrate 29270000, vpid = 0x0000, apid = 0x0000 using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0' status 03 | signal ba7a | snr 7aeb | ber 000026cd | unc 00000000 | status 1f | signal b8fe | snr cfe1 | ber 000005c6 | unc 00000000 | FE_HAS_LOCK Понятно, что если сигнал по той или иной причине пропал, ну например, произошло затенение отражателя, то эту процедуру надо повторить. Осталось активировать сетевой интерфейс. Будьте внимательны — всё завист от того, какой тип фильтрации сетевых пакетов использует Ваш Интернет Провайдер. Если фильтрация пакетов идёт по MAC-адресу, то исправлять ничего не надо. Если фильтрация идёт по IP-адресу, то необходимо установить MAC-адрес карты в нужное значение. Например, если выданный мне провайдером IP-адрес 10.252.155.40, то его необходимо перевести в шестнадцатеричную форму: 0A:FC:9B:28 и прибавить в начале ещё два нуля: 00:00:0A:FC:9B:28. Иногда, правда, провайдер добавляет специальный префикс. Например, 02:00:0A:FC:9B:28. Впрочем, всю эту информацию вы у него и должны узнать. Адрес карты устанавливаем произвольный, причём, желательно, чтоб этот адрес не попадал ни в одну из внутренних подсетей. Ну, например, для выше названной сети вполне подойдёт адрес 10.95.2.1, Поскольку внутренняя подсеть 10.95.1.0/24. Итак: 1. Настраиваем фильтрацию по PID-у, указанному провайдером (Идентификатору Пакетов) и создаём сетевой интерфейс. Например: dvbnet -p 4152. brat3 root # dvbnet -p 4152 DVB Network Interface Manager Version 1.1.0-TVF (Build Fri Aug 12 14: 12: 43 2005) Copyright © 2003, TV Files S.p.A Device: /dev/dvb/adapter0/net0 Status: device dvb0_0 for pid 4152 created successfully. 2. Присваиваем интерфейсу IP-адрес и MAC-адрес. Здесь будьте внимательны — если вы сделаете что-то неверно, то tcpdump будет показывать наличие траффика, но работать ничего не будет. ifconfig dvb0_0 10.95.2.1 netmask 255.255.255.255 broadcast 255.255.255.255 ifconfig dvb0_0 hw ether 000:5C:0A:9B:28 route add 10.95.2.1 dev dvb0_0 Теперь ipconfig должен показать что-то в этом роде: dvb0_0 Link encap:Ethernet HWaddr 000:5C:0A:F3:9F inet addr:10.95.2.1 Bcast:255.255.255.255 Mask:255.255.255.255 UP BROADCAST RUNNING NOARP MULTICAST MTU:4096 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Base address:0x1038 а в таблице маршрутизации должна появится следующая строка: Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.95.2.1 0.0.0.0 255.255.255.255 UH 0 0 0 dvb0_0 Настал трепетный момент проверки работоспособности сетевого интрефейса. Вариантов два. Самый простой: # tcpdump -ni dvb0_0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on dvb0_0, link-type EN10MB (Ethernet), capture size 96 bytes 21: 42: 01.020568 IP 217.10.39.84.80 > 88.2909: . 1195548608:1195549945(1337) ack 1701755686 win 57491 21: 42: 01.020584 IP 217.10.39.84.80 > 88.2909: . 1337:2674(1337) ack 1 win 57491 21: 42: 01.020586 IP 217.16.19.219.80 > 10.252.246.254.2394: S 3017247152:3017247152(0) ack 4146269160 win 5840 Второй вариант проверки работоспособности интерфейса и того проще: brat3 root # dvbtraffic 0365 10 p/s 1 kb/s 15 kbit 1029 89 p/s 16 kb/s 134 kbit 1030 166 p/s 30 kb/s 250 kbit 1031 774 p/s 142 kb/s 1164 kbit 1036 312 p/s 57 kb/s 469 kbit 1037 616 p/s 113 kb/s 926 kbit 1038 1035 p/s 190 kb/s 1557 kbit 1039 678 p/s 124 kb/s 1020 kbit 1040 91 p/s 16 kb/s 137 kbit 1042 119 p/s 21 kb/s 180 kbit 1050 1 p/s 0 kb/s 2 kbit 1051 2161 p/s 396 kb/s 3250 kbit 1056 5 p/s 0 kb/s 8 kbit 1057 359 p/s 65 kb/s 540 kbit 1058 961 p/s 176 kb/s 1445 kbit 1059 5 p/s 0 kb/s 8 kbit 1101 244 p/s 44 kb/s 367 kbit 1102 222 p/s 40 kb/s 334 kbit 1103 9 p/s 1 kb/s 14 kbit 1104 166 p/s 30 kb/s 249 kbit 1105 49 p/s 8 kb/s 73 kbit 1109 1095 p/s 201 kb/s 1647 kbit 2000 9177 p/s 1684 kb/s 13802 kbit -PID--FREQ-----BANDWIDTH-BANDWIDTH- 0365 9 p/s 1 kb/s 14 kbit Теперь неплохо бы собрать это всё в один скрипт. Ну пусть он называется, скажем, [ URL="http://www.opennet.ru/docs/RUS/linuxsat/files/dvb.sh"]dvb.sh[/url]. Его можно взять из заметки Виталия Прядко <a href='http://opennet.ru/base/sys/skystar2_linux.txt.html/' target='_blank'>«Установка Skystar-2 на Linux (skystar dvb linux driver)»</a>
re:уРХФОЙЛПЧЩК йОФЕТОЕФ ДМС РТПДЧЙОХФЩИ <span style='color:green'>Пишем простую систему учета трафика. </span> У многих начинающих системных администраторов часто стоит вопрос, а как организовать систему учета трафика? В рамках данной статьи мы рассмотрим простую систему учета трафика, которая должна будет обладать следующими характеристиками: Учет всего трафика, проходящего через маршрутизатор работающий под ОС Linux; Возможность быстрого изменения конфигурации без внесения изменений в код; Данные о трафике должны храниться в базе данных, в нашем случае мы в качестве сервера баз данных будем использовать MySQL. В рассматриваемом примере будем считать, что все IP адреса в нашей сети реальные. Начнем с создания конфигурационного файла, назовем его billing.conf. Пусть он имеет следующий вид: # Формируем список IP адресов машин или сетей, для которых мы будем считать # трафик # Рабочее место WS1="192.168.0.1" # Ceть нашего клиента NET="192.168.1.0/24" # Объединим объединим все сети и адреса в один список. ALLNETS="$WS1 $NET" В принципе, формировать списки для каждого адреса или сети нет необходимости, т.к. рассматриваемая система использует только список ALLNETS, однако они могут понадобиться в случае, если вам нужно будет обрабатывать статистику о каждом пользователе. Данный конфигурационный файл является единой для всей нашей системы, состоящей как минимум из трех программ: Программы формирования правил учета для firewall, с использованием iptables; Программы снятия статистики; Программы отображения статистики; Рассмотрим программу формирования правил учета для firewall, названную в нашем случае rc.firewall, которую нужно будет добавить в один из файлов, который будет выполняться при загрузке системы. Для начала немного теории, в ядрах Linux серии 2.4.X используется firewall NetFilter, интерфейсом к которому является программа iptables. В NetFilter cущестуют несколько цепочек: INPUT - все входящие пакеты, адресованные маршрутизатору, OUTPUT - все исходящии из маршрутизатора пакеты, FORWARD - все пересланные маршрутизатором пакеты во внешнюю сеть. #!/bin/bash # Подключаем конфигурационный файл . /etc/lbiling.conf IPTABLES="/sbin/iptables" # Задаем путь к программе iptables ################################### # Учет трафика ################################### # Функция для создания правила учета addrule(){ $IPTABLES -N ACCT_IN_ # Создаем правило для учета входяшего трафика $IPTABLES -N ACCT_OUT_ # Создаем правило для учета изходяшего трафика $IPTABLES -F ACCT_IN_ # Обнулим полученные цепочки $IPTABLES -F ACCT_OUT_ $IPTABLES -A INPUT -j ACCT_IN_ # Включим учет по цепочкам $IPTABLES -A FORWARD -j ACCT_IN_ $IPTABLES -A FORWARD -j ACCT_OUT_ $IPTABLES -A OUTPUT -j ACCT_OUT_ $IPTABLES -A ACCT_IN_ -s # Считать входящим трафик у которого источник # адрес $IPTABLES -A ACCT_OUT_ -d # Считать исходящим трафик у которого получатель # адрес } # Создаем правила для учета трафика for NET in $ALLNETS; do # Для всех сетей в списке $ALLNET создать правила учета трафика addrule $NET $NET done После выполнения нашей программы rc.firewall, набрав в консоли: # iptables -L Вы должны будете увидеть нечто подобное: Chain INPUT (policy ACCEPT) target prot opt source destination ACCT_IN_192.168.0.1 all -- anywhere anywhere ACCT_IN_192.168.1.0/24 all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination ACCT_IN_192.168.0.1 all -- anywhere anywhere ACCT_OUT_192.168.0.1 all -- anywhere anywhere ACCT_IN_192.168.1.0/24 all -- anywhere anywhere ACCT_OUT_192.168.1.0/24 all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination ACCT_OUT_192.168.0.1 all -- anywhere anywhere ACCT_OUT_192.168.1.0/24 all -- anywhere anywhere Chain ACCT_IN_192.168.0.1 (2 references) target prot opt source destination all -- 192.168.0.1 anywhere Chain ACCT_IN_192.168.1.0/24 (2 references) target prot opt source destination all -- 192.168.1.0/24 anywhere Chain ACCT_OUT_192.168.0.1 (2 references) target prot opt source destination all -- anywhere 192.168.0.1 Chain ACCT_OUT_192.168.1.0/24 (2 references) target prot opt source destination all -- anywhere 192.168.1.0/24 Создадим базу данных в MySQL с названием trafficbd, для этого необходимо будет выполнить следующий SQL запрос (вопрос "как это сделать" не входит в рамки нашей статьи, обратитесь к документации MySQL): CREATE DATABASE IF NOT EXISTS trafficbd; use trafficbd; # # Структура таблицы `traffic` # CREATE TABLE traffic ( id int(11) NOT NULL auto_increment, date datetime NOT NULL default '0000-00-00 00:00:00', ip varchar(20) NOT NULL default '', inb int(11) NOT NULL default '0', outb int(11) NOT NULL default '0', KEY id (id) ) TYPE=MyISAM; Итак, подведем итоги, мы создали базу данных, написали правила учета трафика, теперь нам надо паписать программу, которая бы снимала полученную статистику, заносила её в базуданных и после этого обнуляла бы счетчики. Ниже приведен пример такой программы, её можно прописать в CRON и вызывать с некоторым периодом. #!/usr/bin/perl # Функция занимающаяся сбором и внесением данных в БД. sub account{ $name=$_[0]; # Имя правила $IP_IN=0; # Инициализация счетчиков $IP_OUT=0; # Командная строка MySQL для внесения данных в таблицу. $mysqlcommand="/usr/bin/mysql -hlocalhost trafficbd -e"; # Снимем данные со счетчика входящего трафика и обнулим $ipstuff=`/sbin/iptables -L -Z ACCT_IN_$name -v -x`; # Выделим из вывода предыдущей команды значение счетчика @IPTBMASS=split(/ /,$ipstuff); chomp $IPTBMASS[2]; $string=$IPTBMASS[2]; $string=~ s/s{1,}/ /g; @INFOMASS=split(/ /,$string); $IP_IN=$INFOMASS[2]; # Снимем данные со счетчика исходящего трафика и обнулим $ipstuff=`/sbin/iptables -L -Z ACCT_OUT_$name -v -x`; # Выделим из вывода предыдущей команды значение счетчика @IPTBMASS=split(/ /,$ipstuff); $string=$IPTBMASS[2]; $string=~ s/s{1,}/ /g; @INFOMASS2=split(/ /,$string); $IP_OUT=$INFOMASS2[2]; # Получим текущее время ($min, $hours, $day, $mounth,$year) = (localtime)[1,2,3,4,5]; $time=$hours.":".$min.":00"; $mounth=$mounth+1; $year=$year+1900; $date=$year."-".$mounth."-".$day; # Формируем SQL запрос $sql="insert into traffic values('','".$date." ".$time."','".$name."','".$IP_IN."','".$IP_OUT."') ;"; # Выполняем его `$mysqlcommand "$sql"`; } # На этом функция account заканчивается # Основная программа $config=`./lconfreader.sh`; # Прочитаем конфигурационный файл. # Ниже приводится текст скрипта lconfreader.sh: # #!/bin/bash # . ./lbiling.conf # Включить конфигурационный файл # echo $ALLNETS # Вывести в stdout список всех сетей, покоторым ведется учет. # chomp $config; @NETMASS=split(/ /,$config); foreach $nets(@NETMASS) { # Для каждого элемента списка, выполнить функцию account account $nets; } Вот собственно и вся биллинговая система
re:уРХФОЙЛПЧЩК йОФЕТОЕФ ДМС РТПДЧЙОХФЩИ Ночной ГонщЫк, опять повторяю тебе тормазу, когда ты тут прибегал и писал на весь форум, а как мне то, а как мне это...... лучше читай и впитывай инфу и искать не придеться....
re:уРХФОЙЛПЧЩК йОФЕТОЕФ ДМС РТПДЧЙОХФЩИ Old Ranger, Здарова, давно не виделись, надо пивка попить ТТ-1401 аналогия настройки SS1 все тоже самое только с софтом для ТТ-1401....
re:уРХФОЙЛПЧЩК йОФЕТОЕФ ДМС РТПДЧЙОХФЩИ Афтар сам то это проделывал или копирнул текст мышой и вставил - а вдруг там с ошибками технология описана? Свои-бы наработки выложил ну например "как настроить TH-7021A под линухой" ну или хотя-бы под виндой
re:уРХФОЙЛПЧЩК йОФЕТОЕФ ДМС РТПДЧЙОХФЩИ heygor, конечно делал, поэтому и вставил статьи, которые тоже взяты не от туда где я брал...Ставил на SS1
re:уРХФОЙЛПЧЩК йОФЕТОЕФ ДМС РТПДЧЙОХФЩИ heygor, .:ilot::., яж говорю поумничать решил =), передрать проще всего., а вот написать ...