Настройка спутникового интернета в linux

Добавил Support
Для ITDoc

1 звезда2 звезд3 звезд4 звезд5 звезд (Еще не оценили)
Загрузка ... Загрузка ...
330 Просмотров!

Издано: марта 30, 2009

Я живу в крайне тяжелых онлайновых условиях.

О безлимитной выделенке нет и речи. ;) До недавнего времени доступ в
интернет у меня дома был посредством gprs, а с недавних пор к нему
добавилась спутниковая тарелка. В домашнем сетевом хозяйстве раздачей
трафика занимался старый пентиум, тихо жужжащий в углу. Все было
настроено 1 раз и забыто. Но однажды он умер…

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

Все нижеописанное происходит в ubuntu последней версии. Настрою
соединение через globax без vpn.

Ставлю утилиты работы с dvb картой. У меня, как и у многих skystar2,
но когда нибудь я куплю twinhan ;).

$ sudo aptitude install dvb-utils

Нужно сделать что бы карта не “засыпала”. Что это и как - об этом
можно почитать в многочисленных околоспутниковых форумах. Решение
следующее: Добавляем файлик, который грузит модуль карты с параметром,
запрещающим засыпание.

$ cat /etc/modprobe.d/dvb-core
        options dvb-core dvb_shutdown_timeout=0

Теперь нужно выгрузить/загрузить этот модуль (и все зависимые от
него). Я просто перезагрузил компьютер.

Качаю дистрибутив (ссылка может устареть) globax for linux,
извлекаю из него исполняемый файл globax. Остальное не требуется.

$ ls /usr/local/sbin/globax
        /usr/local/sbin/globax

Конфиг глобакса. Получен мною от провайдера stv.su и используется
практически без изменений.

$ cat /etc/globax.conf
        [server]
        port = 6768
        log = /var/log/globax.log
        datatimeout = 60

        [remote]
        name = globax
        server = 195.10.212.10:1111
        login = globax_login
        passwd = globax_password
        speed_in = 320000:384000
        speed_out = 3000
        mtu = 576
        mru = 1500
        flush_time = 500

        [local]
        # http/https proxy
        remote = globax
        port = 127.0.0.1:3128
        service_int = 0

        [local]
        # socks 4/4a/5 proxy
        remote = globax
        port = 127.0.0.1:1080
        service_int = 2

        [local]
        # transparent port
        # http://faq.spacegate.com.ua/index.php?action=artikel&cat=7&id=97&artlang=ru
        remote = globax
        port = 127.0.0.1:8000
        transparent

Globax в процессе работы пишет логи, и их надо чистить. =) Поскольку
неизвестно, умеет ли он переоткрывать файловый дескриптор по сигналу,
а экспериментировать лень - делаю так же как с рельсами.

$ cat /etc/logrotate.d/globax.logrotate
        /var/log/globax.log {
            rotate 7
            missingok
            compress
            delaycompress
            notifempty
            copytruncate
        }

Параметры настройки dvb карты на спутник. Они хранятся, как правило, в
файле channels.conf. Для моего провайдера нагуглить их почему то не
получилось. Я долго тупил. Потом понял, что они есть в отладочном
выводе команды szap, которых предостаточно на форумах. Вот сравните:

$ sudo szap -c /etc/channels.conf -n 1 -x
        reading channels from file '/etc/channels.conf'
        zapping to 1 'stv':
        sat 0, frequency = 11595 MHz V, symbolrate 29270000, vpid = 0x1040, apid = 0x1040
        using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
        status 00 | signal 5353 | snr f8f8 | ber 00000000 | unc 00000000 |
        status 1f | signal 4040 | snr 3333 | ber 00000000 | unc 00000042 | FE_HAS_LOCK

И теперь собственно сам файл. Для спутникового интернета важны
частота, поляризация и символьная скорость.

$ cat /etc/channels.conf
        stv:11595:v:0:29270:0:0:0

Скрипт, который собирает все это вместе, настраивает dvb карту и
запускает globax.

$ cat /etc/init.d/dbvd
        #!/bin/sh

        PATH=/usr/sbin:/usr/bin:/sbin:/bin
        NAME=`basename $0`

        # https://cabinet.stv.su/index.php?m=info
        IP="192.168.XXX.XXX"
        MAC="00:00:C0:A8:XX:XX"
        PID="4160"

        # https://cabinet.stv.su/index.php?m=conf
        GLOBAX_BIN="/usr/local/sbin/globax"
        GLOBAX_CONF="/etc/globax.conf"

        CHANNELS_CONF="/etc/channels.conf"

        do_szap()
        {
          szap -c $CHANNELS_CONF -n 1 -x
        }

        do_ifup()
        {
          dvbnet -p $PID
          ifconfig dvb0_0 $IP
          ifconfig dvb0_0 hw ether $MAC
          echo 0 > /proc/sys/net/ipv4/conf/dvb0_0/rp_filter
        }

        do_ifdn()
        {
          ifconfig dvb0_0 down
          dvbnet -d 0
        }

        do_glup()
        {
          $GLOBAX_BIN $GLOBAX_CONF
          sleep 2
          kill `ps ax|grep ${GLOBAX_BIN}|head -n +1|awk '{print $1}'`
        }

        do_gldn()
        {
          killall $GLOBAX_BIN
        }

        case "$1" in
          start)
            echo "starting $NAME..."
            do_szap
            do_ifup
            do_glup
          ;;

          stop)
            echo "stoping $NAME..."
            do_gldn
            do_ifdn
          ;;

          reload)
            do_szap
          ;;

          restart)
            do_ifdn
            rmmod b2c2_flexcop_pci b2c2_flexcop \
              mt352 mt312 bcm3510 stv0299 stv0297 nxt200x lgdt330x \
              dvb_pll dvb_core
            sleep 2
            modprobe b2c2_flexcop_pci
            do_szap
            do_ifup
          ;;

        *)
            echo "usage: $NAME start|stop|reload|restart"
                exit 3
         ;;
        esac

        exit 0

Устанавливаю его в автозагрузку и запускаю.

$ sudo update-rc.d dvbd start 99 S .
        $ sudo invoke-rc.d dvbd start

Нисходящий канал готов. Время настроить программы на использование
http/socks прокси, а неимеющие таких настроек соксифицировать с
помощью, например, tsocks (есть в дистрибутиве).

За рамками рассмотрения остались:

* прокладка тунелля pptp l2tp openvpn или какого другого
     * кеширование http трафика squid или oops
     * прозрачное проксирование (последняя секция в globax.conf)
     * автоматизация поднятия наземного канала diald

И тут выясняется одна неприятная особенность:

Встроенные в globax http/https и socks4a/5 позволяют подключаться к
интернет ресурсам используя доменные имена (то есть не преобразуя их в
IP адреса на локальном компьютере) Но некоторые программы все равно
желают локального разрешения имен. Им нужен локальный доступ к dns
серверу. По медленному и дорогому наземному каналу.

Пару слов об оптимизации наземного канала:

Ставлю локальный кеширующий сервер dnsmasq

$ sudo aptitude install dnsmasq

К идущему в пакете конфигу добавляю 1 строчку:

$ cat /etc/dnsmasq.conf | grep resolv-file
        resolv-file=/etc/ppp/resolv.conf

Теперь dnsmasq при отстутствии у себя информации о доменном имени
будет запрашивать один из серверов имен наземного провайдера.

В конфиге дозвона к наземному провайдеру
(/etc/ppp/peers/provider_name) у меня присутствует:

* nodefaultroute
     * usepeerdns

Скрипты выполняемые при поднятии и опускании интерфейса я выключил за
ненадобностью.

$ sudo chmod -x /etc/ppp/ip-up.d/*
        $ sudo chmod -x /etc/ppp/ip-down.d/*

А потом написал свой, попроще. В нем сохраняю имена dns серверов
провайдера и прописываю маршруты к ним, и к серверу globax.

$ cat /etc/ppp/ip-up.d/0dvb-up
        #!/bin/sh

        PATH=/usr/sbin:/usr/bin:/sbin:/bin
        GLOBAX_IP="195.10.212.10"

        route add -host $DNS1 gw $IPREMOTE
        route add -host $DNS2 gw $IPREMOTE

        echo "#" >/etc/ppp/resolv.conf
        echo "nameserver $DNS1" >>/etc/ppp/resolv.conf
        echo "nameserver $DNS2" >>/etc/ppp/resolv.conf
        killall -sighup dnsmasq

        route add -host $GLOBAX_IP gw $IPREMOTE

Последний штрих:

$ cat /etc/resolv.conf
        nameserver 127.0.0.1

Эта вся пертушка с up/down скриптами затеяна потому что по умолчанию
они либо переписывают /etc/resolv.conf либо не отдают имена dns
серверов. Подозреваю, есть более элегантное решение ;)

Придумал сейчас как с помощью socat, iptables и какой то матери
натравить dnsmasq через globax на dns сервер спутникового провайдера.
Пойду поиграюсь… =)

UPDATE Отдельные борцы за чистоту терминов оскорбились, что я
клиентскую часть globax обозвал сервером. Исправил. ;)

UPDATE2 Оказывается есть такие особенности как “интерференция” и
“залипание”. Если кто с ними сталкивался, пожалуйста опишите как они
выглядят и, по возможности, как с ними бороться. А то мне как то
везет. Или не везет. ;) Спасибо. :)

UPDATE2.1 Немного дороботал скрипт /etc/init.d/dvbd по идее теперь
если его запускать с параметром reload то это должно быть борьбой с
интерференцией. А с параметром restart - борьба с залипанием.
Пресловутыми “интреференцией” и “залипанием”.

А вот скрипт, для автоматизации проверок, путем вызова из crontab

$ cat /usr/local/sbin/dvb-check
        #!/bin/sh

        # если статус карты не 1f значит она не залочена.
        if [ '1f' != `femon | head -3 | tail -1 | awk '{print $2}'` ]; then
                invoke-rc.d dvbd reload
        else
        #если карта залочена, а нету пидов с трафиком значит она повисла.
                if [ '10' != `dvbtraffic | head -10 | wc -l` ]; then
                        invoke-rc.d dvbd restart
                fi
        fi

Популярность: 7% [!]

Tagged with: , , , , , , , , , , , ,


Спонсор



 WPSN comments




Да человек я, человек! =)

ITDoc самый Последний