den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
From: Vsevolod Balashov <vsevolod@balashov.name.>
Newsgroups: email
Date: Mon, 28 Feb 2007 14:31:37 +0000 (UTC)
Subject: Настройка спутникового интернета в linux
Оригинал:http://vsevolod.balashov.name/2007/2/28/dvb-sat-linux
Я живу в крайне тяжелых онлайновых условиях.
О безлимитной выделенке нет и речи. До недавнего времени доступ в
интернет у меня дома был посредством 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
Глобакс - это сервер. Сервер пишет логи. Логи надо чистить. =)
Поскольку неизвестно, умеет ли он переоткрывать файловый дескриптор по
сигналу, а экспериментировать лень - делаю так же как с рельсами.
$ 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:XX:XX: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"
# http://forum.stv.su/viewtopic.php?t=1173
case "$1" in
start)
echo "starting $NAME..."
szap -c $CHANNELS_CONF -n 1 -x
dvbnet -p $PID
ifconfig dvb0_0 $IP
ifconfig dvb0_0 hw ether $MAC
echo 0 > /proc/sys/net/ipv4/conf/dvb0_0/rp_filter
$GLOBAX_BIN $GLOBAX_CONF
;;
stop)
echo "stoping $NAME..."
killall globax
ifconfig dvb0_0 down
dvbnet -d 0
;;
restart)
$0 stop
$0 start
;;
*)
echo "usage: $NAME start|stop|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 "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 сервер спутникового провайдера. Пойду
поиграюсь... =) |
|