Журнал LinuxFormat - перейти на главную

LXF119:spoutnik

Материал из Linuxformat
Перейти к: навигация, поиск
Спутники и Linux Бороздите Web на волнах эфира

Содержание

Интернет: Ловим через спутник

spoutnik
Часть 2: Разобравшись с телевидением, Андрей Прахов берется за главное достижение современной цивилизации – всемирную сеть.

В прошлый раз мы рассматривали настройку спутниковых плат DVB-S и даже научились ловить теле- и радиоканалы, но чаще всего эти тюнеры приобретают в чаянии скоростного Интернета. В наши дни спутниковые провайдеры предлагают два вида подключений: с односторонним доступом и двухсторонним. Для простого пользователя оптимален первый вариант, сочетающий в себе экономичность, относительную легкость настройки и отсутствие проблем с компетентными органами (для использования двухстороннего спутникового канала необходимо специальное разрешение). Так как наше устройство может только принимать сигнал со спутника, то для работы в Интернете необходим дополнительный модем, играющий роль исходящего канала. Им может быть ADSL, GPRS/EDGE/3G и даже телефонный модем, ведь при обычном просмотре web-страниц нагрузка на него будет невелика. Сегодня мы не будем касаться настройки этих устройств: то, что касается GPRS, было весьма подробно изложено в LXF113/114.

Часть 1 Поднимем канал

Обычно спутниковые провайдеры предлагают несколько способов подключения, и выбор подходящего зависит от имеющегося наземного канала, а точнее, присвоенного ему IP- адреса. Различают два вида адресов: реальные и «серые». Первые маршрутизируются непосредственно провайдером, в то время как серые IP используются во внутренних сетях.

Если вы не знаете свой тип IP, то поможет утилита ifconfig. Подключитесь к Интернету и введите в терминале команду:

# ifconfig
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.236.178.228 P-t-P:192.168.100.101 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:55 errors:0 dropped:0 overruns:0 frame:0
TX packets:58 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:51203 (50.0 Kb) TX bytes:5306 (5.1 Kb)

Здесь мы имеем дело с коммутируемым (PPP) подключением. Интересующая нас строка начинается с inet addr. Если значение в ней находится в одном из перечисленных ниже диапазонов, то у вас «серый» IP:

10.0.0.0 – 10.255.255.255
172.16.0.0 – 172.31.255.255
192.168.0.0 – 192.168.255.255

Как правило, провайдер предлагает следующие виды подключения: прокси, виртуальные туннели VPN или OpenVPN. В случае с реальным IP оптимальным выбором является работа через прокси. Достаточно настроить тюнер и ввести адрес прокси в браузере – и можно пользоваться Интернетом. Для владельцев компьютеров с «серыми» IP неплохим выбором будет OpenVPN. С подробности мы ознакомимся чуть позже, а пока...

Настроим тюнер

Для этой процедуры нам понадобятся утилиты szap и dvbnet. Они входят в пакет с характерным названием linuxtv-dvb-apps. Установите его из репозитория своего дистрибутива или скачайте исходники с сайта http://linuxtv.org.

Сначала необходимо «научить» тюнер настраиваться на нужную частоту. Все параметры можно узнать на сайте провайдера. Нам понадобятся: частота транспондера, скорость символьного потока и поляризация. Эти значения мы будем хранить в файле channels.conf, который является конфигурационным для утилиты szap. Его формат таков:

1:10969:v:0:24200:0:0:0

где

  • 1 – произвольное название транспондера
  • 10969 – частота
  • v – поляризация (v – вертикальная, h – горизонтальная)
  • 0 – номер конвертора (если он один, то ставится 0)
  • 24200 – скорость потока
  • Последние три числа – PIDы, которые здесь нам не понадобятся.

Настало время попробовать захватить сигнал или, как еще говорят, «залочить» его [от англ. lock]. Запустите szap со следующими параметрами:

# szap -n 1 -c channels.conf -x

Здесь мы приказываем утилите:

  1. Открыть файл channels.conf (-c channels.conf);
  2. Считать данные первой строки (-n 1). Несложно догадаться, что один и тот же конфигурационный файл можно использовать для хранения данных нескольких транспондеров или даже спутников. Достаточно передать с параметром -n номер нужной строки;
  3. После захвата сигнала прекратить работу и выйти в терминал (-x).

При удачном захвате сигнала должно появится сообщение FE_HAS_LOCK.

Можно было бы сказать, что полдела сделано, если бы не один нюанс: некоторые DVB- платы имеют дурную привычку «засыпать» через определенное время. Понятно, что такое положение вещей нас абсолютно не устраивает, поэтому просто необходимо прояснить этот вопрос в отношении своего устройства. Тут может помочь команда femon. После запуска программа постоянно считывает данные с DVB-карты, и для ее завершения нужно нажать Ctrl+C:

# femon
FE: ST STV0299 DVB-S (DVBS)
status SC | signal 9f5e | snr 0000 | ber 00008080 | unc b2cc9000 |
status SC | signal 9f5e | snr 0000 | ber 00008080 | unc b2cc9000 |

Отсутствие в выводе заветного FE_HAS_LOCK означает, что устройство благополучно «заснуло». Дело можно поправить, если заставить утилиту szap работать в фоновом режиме:

# szap -n 1 -c channels.conf > /dev/null &

Здесь происходит постоянная инициализация тюнера с перенаправлением результата в устройство /dev/null. Последний символ & обеспечивает перевод утилиты в фоновый режим и освобождение терминала для последующих действий. Теперь команда femon должна выдать желанный результат:

# femon
FE: ST STV0299 DVB-S (DVBS)
status SCVYL | signal 9f5e | snr b20e | ber 00000300 | unc ca141000 | FE_HAS_LOCK
status SCVYL | signal 9f5c | snr b2a2 | ber 00000300 | unc ca141000 | FE_HAS_LOCK

некоторых случаях данный способ приводит к существенному замедлению работы Интернета. Проблема исчезает, если загружать стандартный модуль dvb_core с параметром dvb_shutdown_timeout=0. Чтобы не выполнять эти действия вручную при каждом запуске компьютера, нужно прописать соответствующую строку в файле инициализации модулей. Его расположение и название может варьироваться в зависимости от дистрибутива; проверьте документацию. Скорее всего, он будет называться /etc/modprobe.conf.

Сетевой интерфейс

Скорая помощь

Использование скрипта, содержащего все необходимые настройки и команды для активации Интернета, очень облегчает работу пользователя. Но не менее полезным будет сценарий, выполняющий обратную функцию – отключение запущенных служб и восстановление первичного состояния. В простейшем случае он может выглядеть так:

#! /bin/bash
killall szap
/sbin/ifconfig dvb0_0 down
/usr/bin/dvb-net -d 0

Проделанное нами является всего лишь низкоуровневой настройкой устройства. Для непосредственной работы в Интернете необходим специальный сетевой интерфейс. Здесь нам помогут утилиты dvbnet и ifconfig.

Вне зависимости от того, какой способ подключения был выбран у провайдера, каждому абоненту выдается специальный PID – номер, по которому устройство DVB «узнает» принадлежащие ему пакеты данных. Кроме того, может быть выдан IP-адрес самой подписки. Так как для настройки спутникового Интернета требуется выполнить немало команд, то лучшим выходом является создание скрипта. Он же будет обеспечивать первоначальную настройку устройства.

Лучше всего хранить файлы настроек в специальном каталоге в /etc. Если подписка предусматривает VPN-туннель, можно воспользоваться каталогом настроек VPN- программы. К примеру, для OpenVPN им будет /etc/openvpn.

Создайте текстовый файл:

# nano -w /etc/openvpn/dvb_inet_start

(выбор редактора – дела вкуса) и добавьте в него необходимые для работы переменные:

#!/bin/bash
# номер PIDа, выданный провайдером
PID=xxx
# название создаваемого сетевого устройства DVB
DEV_NAME=dvb0_0
# IP-адрес устройства: либо выданный провайдером, либо любой другой, не пересекающийся с адресами, 
уже имеющимися в системе.
IP_ADDR=xxx.xxx.xxx.xxx
# MAC-адрес платы, на который оформлена подписка.
MAC_ADDR=xx:xx:xx:xx:xx:xx

Осталось добавить команды для инициализации устройства и сетевого интерфейса:

# захват сигнала
szap -n 1 -c channels.conf -x
# или фоновый вариант: szap -n 1 -c channels.conf > /dev/null &
# создание сетевого интерфейса
/usr/bin/dvbnet -p $PID
# настройка сетевого интерфейса
/sbin/ifconfig $DEV_NAME hw ether $MAC_ADDR $IP_ADDR
# Для корректной работы интерфейса необходимо отключить spoof- фильтрацию
echo 0 > /proc/sys/net/ipv4/conf/dvb0_0/rp_filter
# если используется виртуальный туннель, то добавьте сюда строку его инициализации. С настройкой туннелей можно 
ознакомиться на сайте провайдера.
# Пример для openvpn. ini.file – файл инициализации, выданный провайдером.
openvpn -- -- config ini.file

Пора проверить Интернет в действии. Чтобы исключить из возможного списка ошибок исходящий канал, удостоверьтесь в его работоспособности. Установите подключение и попробуйте открыть любой сайт.

Имея работоспособный исходящий канал, можно активировать спутниковый Интернет. Для этого достаточно ввести

# /путь/к/bash dvb_inet_start

Работа над ошибками

Очень хорошо, если все получилось с первого раза, но, увы, так бывает не всегда. Рассмотрим некоторые варианты ошибок и возможные исправления.

Вначале следует удостовериться в правильности настроек на нужный спутник. Для этого можно использовать утилиту dvbtraffic из пакета linuxtv-dvb-apps. Запущенная без каких- либо параметров, она должна отобразить в терминале список всех пакетов, полученных устройством. При отсутствии на экране данных о пакетах нужно проверить наличие сигнала FE_HAS_LOCK в выводе утилиты szap. Вполне вероятно, что ошибка вкралась в конфигурационный файл транспондеров.

Если dvbtraffic регистрирует наличие потока, а Интернета тем не менее нет, нужно проверить работоспособность созданного сетевого DVB-интерфейса. Выполните следующую команду, которая выведет данные о пакетах, но уже для интерфейса dvb0_0:

# tcpdump -ni dvb0_0

Пустой экран? Что же, следует покопаться в скрипте подключения и проверить правильность MAC-адреса платы и PIDа и уникальность IP. Обратите внимание, что PID выдается провайдером в двух вариантах: десятичном и шестнадцатеричном. В приведенном выше примере использовались именно десятичные цифры. Для проверки конфликтов IP можно воспользоваться утилитой ifconfig, которая выдаст информацию о всех сетевых устройствах в системе. Предположим, что tcpdump вывела на экран целый табун бегущих строк. Тогда можно переходить к следующему этапу – проверке работоспособности службы DNS. Попробуйте ввести команду

# ping linuxformat.ru

Если появилось сообщение о недоступности хоста, введите цифровой эквивалент адреса того же сайта. Пример:

# ping 88.212.205.226

Положительный результат говорит о проблеме со службой DNS. Рассмотрение настройки DNS выходит за рамки этой статьи, но можно попробовать изменить содержимое файла /etc/resolv.conf вручную после подключения спутникового Интернета. Удалите из него все имеющиеся адреса и добавьте строку nameserver xxx.xxx.xxx.xxx, заменив xxx на адрес DNS-сервера спутникового провайдера. Учтите, что активация исходящего канала может переписать содержимое файла (в первую очередь это касается провайдеров мобильных операторов). Самым простым выходом послужит замена перезаписанного файла уже заранее заготовленным дубликатом после подключения к Интернету. Соответствующую команду копирования лучше добавить в имеющийся скрипт.

Еще одной распространенной ошибкой является неправильная настройка правил iptables.

Часть 2 Порыбачим?

Можно долго рассуждать о моральной стороне этого явления, но факт остается фактом – спутниковая рыбалка широко распространена и доступна любому обладателю соответствующего оборудования. Чтобы было понятно, о чем идет речь, разберемся в основах спутникового Интернета.

Как вы уже знаете, в ответ на запрос из исходящего канала провайдер отсылает пакеты данных, которые, в свою очередь, улавливаются спутниковым оборудованием и подвергаются определенной обработке. Каждому клиенту выдается собственный номер – PID, позволяющий сузить область сканирования диапазона и вычислить свои пакеты. Только проблема в том, что провайдер не может передавать данные индивидуально каждому клиенту, а, соответственно, чужие пакеты доступны любому желающему. На данный момент существуют технологии шифрования, но они используются далеко не всеми провайдерами и пользователями. Вот и получается, что имея специальную программу, можно, не тратя ни копейки, скачивать гигабайты информации из Интернета. Конечно, в этом случае полностью исключается возможность произвольного выбора скачиваемых файлов, но подобрать желаемый диапазон по «жанру» вполне реально.

Базовая настройка

На данный момент для Linux имеется всего одна рабочая программа для спутниковой рыбалки – Skynet. Справедливости ради скажем, что в кругах фишеров она считается самой лучшей и для Windows. Кроме того, она является открытой, и в этом смысле ваша совесть будет чиста.

Skynet может работать как в терминале, так и в графическом окружении. Ввиду наглядности процесса, мы рассмотрим второе. Не спешите с гневными восклицаниями, ведь для управления программой, даже в ее графическом варианте, мышь не понадобится, разве что для щелчка по кнопке закрытия. Все манипуляции придется производить с клавиатуры. Впрочем, один раз правильно настроенный Skynet сможет прекрасно работать без вмешательства пользователя.

Основные настройки Skynet располагаются в файле skynet.ini. Так как возможных опций чертовски много, мы рассмотрим только необходимые (в самом ini-файле могут быть указанны не все возможные опции).

Первое, что необходимо сделать – сообщить программе про тюнер и спутник, с которых будет происходить рыбалка. Забудьте про szap: Skynet прекрасно умеет настраиваться на нужную «волну» самостоятельно.

Найдите в ini-файле строку

lnb=9750000,10600000,11700000

В ней задаются частотные характеристики конвертора. В данном примере они относятся к универсальному. Кроме этого, могут присутствовать блоки уже имеющихся настроек транспондеров различных провайдеров. Если же их нет, добавьте следующие строки:

# пример для PlanetSky
tuner=10969400 V 24200000 A
pids=500,540,544,555

Все это уже должно быть вам знакомо. Первая строка содержит частоту, поляризацию, скорость, FEC, а вторая – список PIDов, с которыми будет работать программа. Последний момент следует немного пояснить. Хотя для работы с обычным Интернетом необходим только выданный провайдером PID, устройство DVB-S способно сканировать гораздо большее количество. Вот только как угадать, на каких номерах плавают самые «жирные» рыбки? Имеется несколько вариантов:

  • Повыспрашивать у маститых фишеров на форумах про самые «рыбные» места;
  • Запустить программу dvbtraffic и выбрать наиболее активные PIDы;
  • Установить полный транспортный поток

Конечно, оптимальным вариантом является третий. Достаточно ввести один лишь PID с номером 8192, который является универсальным для всех провайдеров, и плата будет принимать полный поток всех возможных пакетов. Вот только не все устройства DVB-S способны выдержать такую нагрузку.

Настроив должным образом свое оборудование, стоит позаботиться о хранилище загруженного контента. Во время процесса закачки активно используется место для временного хранения файлов. Лишь после удачного завершения готовый файл переносится в специальный каталог. Неполные файлы, которые по каким- либо причинам не докачались, хранятся совсем в другом месте. Иными словами, свободное пространство на диске будет стремительно таять, ведь скорость потока может достигать нескольких мегабайт в секунду.

По умолчанию, программа создаст и будет использовать три каталога в своей рабочей директории: TEMP, OK, INCOMPLETE. Если необходимо, то можно принудительно указать иное место и названия каталогов для хранения файлов. За это отвечает следующий блок в файле skynet.ini, где с правой стороны каждого значения указывается желаемый путь:

incomplete_linux=incomplete
temp_linux=temp
ok_linux=ok

Как уже говорилось, возможных параметров программы до неприличия много, и рассмотреть их все просто не представляется возможным. Да и острой необходимости в этом нет: с настройками по умолчанию программа работает вполне сносно. Тем не менее, приведу еще один весьма полезный параметр, особенно для хозяев «сонных» карт:

tuner_kick_timeout=1500

Здесь указывается время в миллисекундах, по истечении которого тюнер будет инициализирован, если обнаружится отсутствие потока.

Skynet в деле

Вот и настало время воочию увидеть Skynet в действии. После запуска программы предстанет весьма невзрачное серое окно с несколькими графиками и разноцветными полосками.

Если предварительная настройка была произведена правильно, то в верхней части окна должны бежать непонятные цифры. Это так называемое информационное окно, демонстрирующее состояние некоторых параметров Skynet.

В первую очередь обратите внимание на строку Discontinuity. Здесь указывается количество разрывов потока. Для хорошего результата рыбалки необходима стабильная работа оборудования с минимальным значением Discontinuity. Если здесь наблюдается интенсивное накопление ошибок, то на качественный улов рассчитывать не приходится. Причин может быть множество, начиная с плохой погоды за окном и заканчивая некорректной работой драйверов. Хотя, вполне вероятно, устройство просто не справляется с интенсивностью потока. В этом случае, замените транспортный PID (8192) на несколько обычных.

Кроме этого параметра, интерес могут представлять следующие значения:

  • Files – количество открытых файловдля захвата;
  • TCP Threads – число открытых TCP-потоков;
  • Written – объем данных, сохраненных на диске;
  • Flow In – полный объем принятых данных и скорость потока.

Программа наглядно демонстрирует на экране степень обработки всех захваченных потоков в виде разноцветных полосок. Значения цветов можно узнать, а заодно и переопределить, в файле настроек Skynet. В левой стороне окна находится крошечный белый курсор, который можно вертикально перемещать курсорными клавишами. При этом в нижнем информационном окне будет выводиться подробная информация о выделенном файле.

Для удобства пользователя имеется возможность горизонтального и вертикального масштабирования полос. Так, цифровые клавиши от 1 до 8 основной части клавиатуры отвечают за горизонтальное масштабирование с десятикратным шагом. Таким образом, размах предоставляемой информации может находится в диапазоне от 1 килобайта до 2 гигабайт. Клавиши E и Shift+E отвечают за ширину полосок. Она не несет ценной информации и служит исключительно для удобства.

Теперь немного поговорим о выборе типов файлов для захвата. Skynet умеет сортировать и закачивать файлы по имеющемуся расширению, имени и диапазону размера. Эта возможность предоставляется в специальном окне, вызываемом клавишей G.

По умолчанию предоставлен достаточно богатый набор возможных расширений, начиная архивами и заканчивая медиа. Для перемещения по списку служат все те же курсорные клавиши. Обратите внимание на знак + слева от выбранного типа. Он означает, что файлы с данным расширением будут захватываться программой. Снять задачу или, наоборот, активировать ее позволяют клавиши - и + на добавочной цифровой клавиатуре.

Кроме того, можно указать диапазон размеров файлов, захватываемых программой. Для этого служат оставшиеся две колонки: первая содержит минимальное значение, вторая – максимальное. Проделать все это можно за несколько шагов:

  1. выделяем желаемый тип файла курсором;
  2. смещаемся вправо на нужную позицию;
  3. устанавливаем цифровое значение при помощи клавиш от 1 до 8 на основной клавиатуре по принципу, указанному выше.

После выполнения требуемых манипуляций, настройки можно сохранить клавишами Ctrl+S.

Естественно, мы охватили не все возможности программы. За бортом остались фильтрование по IP- и MAC-адресам, тонкая настройка интерфейса, составление правил и многое другое. Тем не менее, полученных знаний достаточно для начального использования этой замечательной программы. Счастливого плавания и успешной рыбалки! LXF

Персональные инструменты
купить
подписаться
Яндекс.Метрика