суббота, 6 сентября 2008 г.

Skystar3: Спутниковый интернет в Ubuntu (hardy)

Описывается настройка спутникового интернета провайдера «Радуга Интернет» через openvpn.

  • После установки спутниковой карты в свободный слот PCI и загрузки ОС создаем файл «/etc/modprobe.d/dvb_core.modprobe»
    options dvb_core dvb_shutdown_timeout=915360000
    Этим мы препятствуем «засыпанию» карты. В новых ядрах, в отличие от старых, установка параметра «dvb_shutdown_timeout» в «0» не помогает и потому надо выставлять заведомо большое значение таймаута (в секундах).
  • Перезагружаем компьютер.
  • Устанавливаем требуемые утилиты
    $ sudo aptitude install dvb-utils
  • Создаем файл «/etc/channels.conf»
    Raduga:11671:v:0:18200:0:0:0
    Здесь:
    • Raduga – название канала. Может быть любым.
    • 11671 – частота
    • v – поляризация. Может быть H – горизонтальная и V – вертикальная
    • 0 – FEC: 0 – Авто, 33/4,...
    • 18200 – Величина потока (Symbol rate)
    • 0 – Видео PID
    • 0 – Аудио PID
    • 0 – Program id
  • Пробуем залочиться на сигнал
    $ szap -c /etc/channels.conf -x -n 1
    reading channels from file '/etc/channels.conf'
    zapping to 1 'Raduga':
    sat 0, frequency = 11671 MHz V, symbolrate 18200000, vpid = 0, apid = 0

    using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
    status 07 | signal 9797 | snr 3270 | ber 0000ff00 | unc 00000000 |
    status 1f | signal 9696 | snr d344 | ber 00001800 | unc 00000000 | FE_HAS_LOCK
    Ключевые значения: «status 1f» и «FE_HAS_LOCK». Остальные поля указывают уровень сигнала, количество ошибок и т.п. Когда устойчивый сигнал будет получен, szap завершит свою работу.
  • Теперь отключим rp_filter, фильтрующий пакеты которые не могут уйти через тот же интерфейс что и пришли. В нашем случае пакет приходит через один интерфейс, а уходит через другой
    $ sudo sh -c 'echo 0 > /proc/sys/net/ipv4/conf/dvb0_0/rp_filter'
  • Создаем сетевый интерфейс спутниковой карты
    $ sudo dvbnet -p 1234
    где «1234» - ваш PID. После выполнения команды должен появиться сетевой интерфейс «dvb0_0» (неактивный).
  • Настраиваем интерфейс
    $ sudo ifconfig dvb0_0 hw ether YOUR-MAC-ADDRESS YOUR-IP-ADDRESS netmask 255.255.255.0 up
    где «YOUR-MAC-ADDRESS» и «YOUR-IP-ADDRESS» соответственно MAC-адрес и IP-адрес вашей подписки.
  • Смотрим на наличие входящего трафика на интерфейсе «dvb0_0»
    $ sudo dvbtraffic
    -PID--FREQ-----BANDWIDTH-BANDWIDTH-
    0000 10 p/s 1 kb/s 15 kbit
    0010 0 p/s 0 kb/s 1 kbit
    0011 0 p/s 0 kb/s 1 kbit
    0014 0 p/s 0 kb/s 1 kbit
    0032 60 p/s 11 kb/s 90 kbit
    003c 10 p/s 1 kb/s 15 kbit
    003d 31 p/s 5 kb/s 47 kbit
    0064 13 p/s 2 kb/s 20 kbit
    Если программа ничего не выводит, то проблемы могут быть в неправильных параметрах или «заснула» спутниковая карта.
  • Правим конфигурационный файл «/etc/network/interfaces» и добавляем
    auto dvb0_0
    iface dvb0_0 inet manual
    pre-up sh -c '/usr/bin/dvbnet -a 0 -p 1234 > /dev/null'
    up ifconfig $IFACE hw ether YOUR-MAC-ADDRESS YOUR-IP-ADDRESS netmask 255.255.255.0 up
    up sh -c 'echo 0 > /proc/sys/net/ipv4/conf/dvb0_0/rp_filter'
    up sh -c '/usr/bin/szap -c /etc/channels.conf -n 1 -x'
    down ifconfig $IFACE down
    down /usr/bin/dvbnet -d 0
Теперь приступим к установке и настройке openvpn
  • Установим openvpn
    $ sudo aptitude install openvpn
  • Скачаем из личного кабинета архив с ключами для openvpn. Из архива распакуем файлы ca.crt, client.ovpn, i0xxxxxx.csr, i0xxxxxx.crt, i0xxxxxx.key.
  • Скопируем все эти файлы в директорию «/etc/openvpn».
  • Сменим права доступа к файлу «i0xxxxxx.key»
    $ sudo chmod 0400 /etc/openvpn/i0xxxxxx.key

  • Переименуем файл «client.ovpn» в «raduga.conf» и отредактируем его. В итоге должно получиться примерно такое содержание
    client
    dev tap
    # dev-node Raduga
    proto udp

    remote 80.81.208.66 55032

    resolv-retry infinite
    nobind
    persist-key
    persist-tun

    ca /etc/openvpn/ca.crt
    cert /etc/openvpn/i0xxxxxx.crt
    key /etc/openvpn/i0xxxxxx.key

    ns-cert-type server
    verb 3
    comp-lzo
    comp-noadapt

    auth-user-pass /etc/openvpn/password.txt
    route-up /etc/openvpn/tap0-route.sh
    Создаем файл «/etc/openvpn/password.txt» с именем и паролем подписки
    user
    password
    и делаем его доступным на чтение только владельцу
    $ sudo chmod 0400 /etc/openvpn/password.txt
  • Создаем скрипт «/etc/openvpn/tap0-route.sh», выполняемый после поднятия роутов.
    netstat -rn | \
    sed '1,2d' | \
    awk '{ \
    if ($1 == "0.0.0.0" \
    && $2 == "10.251.32.1" \
    && $3 == "0.0.0.0" \
    && $8 != "tap0") { \
    EX=sprintf("/sbin/route del -net 0.0.0.0/0 gw %s dev %s && /sbin/route add -net 0.0.0.0/0 gw %s dev tap0\n", $2, $8, $2); system(EX); } }'
    В моем случае openvpn дефолтовый маршрут постоянно вешал на интерфейс «dvb0_0» и пришлось прибегнуть к принудительной привязке скриптом роута к «tap0». Делаем скрипт исполняемым
    $ sudo chmod +x /etc/openvpn/tap0-route.sh

  • Редактируем файл «/etc/default/openvpn» и добавляем строку
    AUTOSTART="raduga"
  • Пробуем соединиться к провайдеру из консоли
    $ sudo openvpn /etc/openvpn/raduga.conf
    Если успешно соединились с сервером, закрываем соединение нажатием «ctrl+c».
  • Перезапускаем даемон
    $ sudo /etc/init.d/openvpn restart
Статья писалась по памяти и возможны неточности в описании. Буду признателен если сообщите мне о них.

14 комментариев:

Олег Мороз комментирует...

В ядрах старше 2.6.24 по моему dvb_shutdown_timeout исправлен в исходниках на ноль. И уже не надо прописывать dvb_shutdown_timeout=915360000 или нечто подобное. По крайней мере я уже ничего подобного не делал на ядре 2.6.24 а на 2.6.18 приходилось править в исходнике модуля строчку про таймаут.

Ну а вообще классно написано про настройку. Сам когда то хотел написать нечто подобное чтобы просто со временем не позабыть.

Князь комментирует...

Странно. Пока я не вписал в таймаут 29 лет ничего ко мне не шло.

Олег Мороз комментирует...

А ядро какое у тебя? У меня собственно тоже возникала проблема с анлоком сигнала карточкой, и я никак не мог заставить альтлинукс 3.0 подгружать модуль dvb_core с нужными параметрами.

Князь комментирует...

2.6.24-19-server

Олег Мороз комментирует...

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

Князь комментирует...

Главное работает :))) Кстати можешь подсказать чем "грабить корованы" со спутника?

Олег Мороз комментирует...

Ты имеешь ввиду "рыбалку"?

Князь комментирует...

да, под линукс вроде dvbsnoop может, но я не разобрался как именно.

Олег Мороз комментирует...

Я пользуюсь для этих целей skynet'ом есть как графическая так и консольная версии.могу кинуть тебе на почту надо будет только немного подравить конфиг под твои нужды, а так рыбалка на радуге меня очень даже радует. Свежее кинцо и мп3.

Князь комментирует...

Буду признателен.

Князь комментирует...
Этот комментарий был удален автором.
Князь комментирует...

mr.tacitus at gmail com

Олег Мороз комментирует...

Отправил

Князь комментирует...

спасибо