GPRS

Поначалу я использовал в качестве наземного соединения МТС-модем Huawei, но у него оказался глюк - при плохой связи данные перестают идти, хотя формально соединение не рвётся.

С телефоном Motorola в этом смысле проще - при обрыве связи завершается скрипт подключения. Значит, можно его зациклить:

/usr/local/sbin/mtsdial:

#!/bin/sh
DIALTIMEOUT=20

 ##################### При обрыве соединения pppd перезапускается ####################
     while  true ; do
        echo `date` "Установление связи" >> /var/log/dial.log
        pppd call mts
        echo `date` "Обрыв связи" >> /var/log/dial.log
	sleep $DIALTIMEOUT
     done



В итоге, скрипт, запускающий спутниковое соединение, стал выглядеть так:

/usr/local/sbin/raduga:

#!/bin/bash
/usr/local/sbin/mtsdial > /dev/null &
sleep 20
route add default ppp0
szap -c /etc/channels.conf -n 1 -l C-BAND > /dev/null &
sleep 10
dvbnet -p 500
ifconfig dvb0_0 hw ether 00:00:AC:12:53:AD 172.18.83.173 netmask 255.255.255.0 up
echo 0 > /proc/sys/net/ipv4/conf/dvb0_0/rp_filter
echo 1 > /proc/sys/net/ipv4/ip_forward
cd /usr/local/share/sprint/
./sprint.sh > /dev/null &

Sqiud

/etc/squid.conf:


acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl Scan_HTTP proto HTTP
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl Safe_ports port 25 # SMTP
acl Safe_ports port 110 # POP3
acl Safe_ports port 8585 # SBIS
acl purge method PURGE
acl CONNECT method CONNECT
acl SSL method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access allow Safe_ports
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access allow SSL_ports
http_access allow Safe_ports
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 8090
cache_peer 192.168.0.33 parent 3128 0 no-query no-digest no-netdb-exchange default
cache_peer_access 192.168.0.33 allow all
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Package(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY\s[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
extension_methods REPORT MERGE MKACTIVITY CHECKOUT
never_direct allow Scan_HTTP
never_direct allow SSL
hosts_file /etc/hosts
coredump_dir /var/spool/squid

Спутниковый интернет

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

Дак вот. Наконец-то выпало свободное время. Не у меня, конечно, у меня-то его завались - у компьютера, к которому подведён кабель от тарелки. "Машинное время", помнится, был такой термин. Ну и время, когда сотрудникам вроде бы интернет ни к чему.

Вообще у нас есть работающий интернет-шлюз. Винда ХР на шлюзе том. Что, конечно, далеко не радует того, кто за этим компьютером сидит. Представьте себе машину, на которой после часа работы с 1с (7 и 8), банк-клиентом и прочими налогоплательщиками сначала отрубается интернет, потом (ну или в другой последовательности) программы начинают нещадно виснуть и тормозить, в конце концов дело кончается ребутом, а то и ресетом. И главно, систему-то на ней не переставишь никак - в своё время я так и не смог освоить хитрую науку настройки спутникового интернета под виндой (хоть всё делал и по инструкции) - пришлось возить системник ребятам, которые ставили и настраивали спутниковые тарелки по всему городу.

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

Итак, что мы имеем: Debian Lenny в качестве системы, телефон "Motorola" в качестве GPRS-модема и карточку TT-Budget 1401, подцепленную к тарелке, настроенной на спутник "Ямал"


Про GPRS - отдельный разговор. Надо будет ещё поработать над его надёжностью и восстановимостью соединения в случае сбоя. Расскажу сначала о спутниковой карте.

В общем виде инструкция есть вот здесь. Но есть особенности.

Карта нашлась сразу, благо предварительно я поставил пакет dvb-utils, в котором есть всё для спутниковой связи. Для начала создал файл /etc/channels.conf с одной строчкой:

AM22:3990:h:0:24050:0:0:0


АМ22 - название
3990 - частота (МГц)
h - поляризация (горизонтальная)
0 - не помню что
24050 - символьная скорость
остальные нули - это пиды, их не надо

Дальше идёт команда szap:

szap -c /etc/channels.conf -n 1 -l C-BAND

-l C-BAND пишется для спутников C-диапазона. У меня оказался именно он
пойдёт бесконечный лог типа

reading channels from file '/etc/channels.conf'
zapping to 1 'AM22':
sat 0, frequency = 3990 MHz H, symbolrate 24050000, vpid = 0x1fff, apid = 
0x1fff sid = 0x0000
using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
status 00 | signal bfbf | snr 0606 | ber 00000000 | unc 00000000 |
status 1f | signal bebe | snr cbcb | ber 000001f1 | unc 00000045 | FE_HAS_LOCK
status 1f | signal bfbf | snr cbcb | ber 0000012a | unc 0000007f | FE_HAS_LOCK
status 1f | signal bebe | snr cccc | ber 00000000 | unc 00000023 | FE_HAS_LOCK

FE_HAS_LOCK говорит о том, что сигнал со спутника идёт. Этот процесс должен идти постоянно, проверено экспериментально. Поэтому в скрипте подключения отправляем его вывод в /dev/null чтобы не мешал:
szap -c /etc/channels.conf -n 1 -l C-BAND > /dev/null

затем надо написать
dvbnet -p 500
где 500 - это PID подписки.

А сейчас - самое интересное, обо что я споткнулся. Следующей командой идёт ifconfig, в нём выставляются IP и MAC-адрес карты. Дак вот, MAC-адрес на данном спутнике вычисляется из IP-шника следующим образом - цифры IP-шника переводятся в 16-ричный формат, между ними ставятся двоеточия и впереди приписывается 00:00:
ifconfig dvb0_0 hw ether 00:00:AD:12:27:A5 173.18.39.165 netmask 255.255.255.0 up
Выключаем rp_filter
echo 0 > /proc/sys/net/ipv4/conf/dvb0_0/rp_filter
Включаем пересылку пакетов.
echo 1 > /proc/sys/net/ipv4/ip_forward

Заходим в папку с распакованной программой Sprint и запускаем sprint.sh
cd /usr/local/share/sprint/
./sprint.sh

и коннектимся браузером по адресу http://localhost:8080
запустится веб-интерфейс программы Sprint, надо выбрать спутник и вписать ключ из личного кабинета. Остальные поля можно пока не трогать. Нажать кнопку "Установить" и перезапустить Sprint

Да, чуть было не забыл. В папке sprint появляется файл sprint.xml с настройками. Дак там почему-то оставлены нули в тэге, в котором указывается адрес и порт прокси. Я указал на всякий случай.

Оно действительно заработало!