Спутниковый интернет для dial-up пользователей Linux


Mark Silinio <silinio(at)mail.ru>
последнее обновление 05/09/06



Про что


Данная статья описывает процесс настройки спутникового интернета(провайдер SpaceGate, спутник Express AM22) в Gentoo Linux с использованием DVB-карты SkyStar2 PCI для приёма входящего трафика и использованием аппаратного модема на 56K для исходящего трафика. Т.к. при dial-up'е IP-адрес будет меняться при каждом последующем соединении, PPP-демон будет при каждом соединении запускать скрипт, создающий GRE туннель к шлюзу SpaceGate.


Содержание:




Настройка ядра

Нам необходимы следующие модули ядра: skystar2, stv0299(или mt312), dvb-core, ip_gre, ipip.
Проверить их наличие в системе можно подобным образом:

$ modinfo skystar2 dvb-core stv0299 mt312 ip_gre ipip

В случае отсутствия какого-либо модуля будет выведено сообщение об ошибке:

$ modinfo skystar2 dvb-core stv0299 mt312 ip_gre ipip
...вывод сокращён...
filename:       /lib/modules/2.6.17-gentoo-r5/kernel/net/ipv4/ip_gre.ko
license:        GPL
vermagic:       2.6.17-gentoo-r5 preempt mod_unload K7 REGPARM gcc-3.4
depends:        
modinfo: could not find module ipip

Ежели так, то идём в menuconfig ядра:

# cd /usr/src/linux
# make menuconfig

И отмечаем там следующие вещи:

Networking  ---> 
 Networking options  --->
  <M>   IP: tunneling
  <M>   IP: GRE tunnels over IP
Device Drivers  --->
 Network device support  --->
  <M> PPP (point-to-point protocol) support
  <M>   PPP support for async serial ports
  <M>   PPP Deflate compression
  <M>   PPP BSD-Compress compression
 Multimedia devices  --->
  Digital Video Broadcasting Devices  --->
   [*] DVB For Linux
   <M>   DVB Core Support
   <M>     Technisat/B2C2 FlexCopII(b) and FlexCopIII adapters
   <M>       Technisat/B2C2 Air/Sky/Cable2PC PCI

теперь компилируем эти модули:

# make modules && make modules_install

Готово. Всё, что нам нужно от ядра, мы сделали.


Настройка DVB-карты

Сначала нам необходимо узнать параметры транспондера на странице https://am22-2.spacegate.com.ua/info/. Нам нужны значения Frequency,Polarisation,Symbolrate и PID.
Первые три потребуются для создания файла channels.conf, используемого для настройки Вашей карты на определённый транспондер.
Формат файла channels.conf:

Name:Frequency:Polarisation:0:Symbolrate:0:0:0

Где:
  • Name - Название данного канала(настройки)
  • Frequency - Частота в транспондера в мегагерцах(Mhz). Для отделения дробной части используется знак '.'(точка)
  • Polarisation - Поляризация волны. v - вертикальная, h - горизонтальная, l - лево-круговая, r - право-круговая
  • Symbolrate - Символьная скорость в мегасимволов/сек.
Ещё в четырёх позиция стоят нули,- в нашем случае там не потребуется ничего менять, вот и оставляем 0. Пример файла channels.conf:

SpaceGate:10974.36:v:0:29207:0:0:0

- в данном случае мы имеем настройку канала под названием SpaceGate с частотой 10974360Кгц, вертикальной поляризацией и символьной скоростью в 29207000Симв/с.
Создайте ваш файл /etc/channels.conf на основе информации с https://am22-2.spacegate.com.ua/info/.
Сделали? Теперь настроим Вашу карту на эти параметры:

# szap -c /etc/channels.conf -n 1 -x
reading channels from file '/etc/channels.conf'
zapping to 1 'SpaceGate':
sat 0, frequency = 10974 MHz V, symbolrate 29207000, vpid = 0x0000, apid = 0x0000
using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
status 00 | signal bb46 | snr 7347 | ber 000050b0 | unc 00000000 | 
status 1f | signal b3ec | snr b517 | ber 000010cd | unc 00000000 | FE_HAS_LOCK

Если вы получаете повторяющиеся строки, начинающиеся с status 03, то что-то в настройках не так, не удаётся захватить сигнал (на всякий случай проверьте, правильно ли Вы ввели значение частоты в мегагерцах).
Зная значение PID'a(с того же https://am22-2.spacegate.com.ua/info/), создаём сетевой интерфейс нашей карты (для примера PID=8000):

# dvbnet -p 8000

DVB Network Interface Manager
Version 1.1.0-TVF (Build Вск Июл 23 19:14:06 2006)
Copyright (C) 2003, TV Files S.p.A

Device: /dev/dvb/adapter0/net0
Status: device dvb0_0 for pid 8000 created successfully.

Проверим, приходит ли со спутника что-либо сетевое на нашу карту:

# dvbtraffic
0513   241 p/s    44 kb/s   363 kbit
0564    86 p/s    15 kb/s   130 kbit
056a    48 p/s     8 kb/s    73 kbit
056e   422 p/s    77 kb/s   634 kbit
0573     1 p/s     0 kb/s     2 kbit
075b     1 p/s     0 kb/s     2 kbit
102f   201 p/s    36 kb/s   303 kbit
104a  1212 p/s   222 kb/s  1823 kbit
1059     0 p/s     0 kb/s     1 kbit
105e   144 p/s    26 kb/s   217 kbit
10e0     2 p/s     0 kb/s     4 kbit
10e5     0 p/s     0 kb/s     1 kbit
10ed     5 p/s     0 kb/s     8 kbit
14ca   210 p/s    38 kb/s   316 kbit
1b58 12143 p/s  2229 kb/s 18264 kbit
1f40  5711 p/s  1048 kb/s  8590 kbit
2000 20439 p/s  3752 kb/s 30740 kbit
-PID--FREQ-----BANDWIDTH-BANDWIDTH-

Ежели при запуске dvbtraffic молчок, то что-то не так.

Теперь сетевой интерфейс необходимо активизировать, для чего Вам нужно знать MAC-адрес Вашей карты и придумать IP-адрес, который бы не мешал работе с иной сетью (если Вы, к примеру, подключены к локальной сети). MAC-адрес можно узнать следующим образом:

# dmesg | grep "b2c2-flexcop: MAC address"
b2c2-flexcop: MAC address = 00:dd:da:a1:bd:c4

Пары шестнадцатеричных чисел после знака "равно" и есть ваш MAC-адрес (тут он выдуман). IP-адрес возьмём, к примеру, 10.0.0.1. Итак, выполняем следующие команды (не забудьте подставить свой MAC-адрес):

# ifconfig dvb0_0 10.0.0.1
# ifconfig dvb0_0 hw ether 00:dd:da:a1:bd:c4

Глянем трафик на нашем сетевом интерфейсе:

# tcpdump -c 10 -qn -i dvb0_0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on dvb0_0, link-type EN10MB (Ethernet), capture size 96 bytes
22:45:37.870125 IP 87.238.112.163.10717 > 192.168.9.110.2001: UDP, length 1472
22:45:37.870223 IP 87.238.112.163.20027 > 192.168.138.212.2001: UDP, length 69
22:45:37.872049 IP 87.238.112.163.20011 > 192.168.159.144.2001: UDP, length 117
22:45:37.872053 IP 87.238.112.163.20011 > 192.168.97.103.2001: UDP, length 144
22:45:37.872054 IP 65.54.245.72.25 > 192.168.6.27.1650: tcp 0
22:45:37.872063 IP 87.238.112.163.20006 > 192.168.123.70.2001: UDP, length 1472
22:45:37.874014 IP 87.238.112.163.20006 > 192.168.123.70.2001: UDP, length 1472
22:45:37.874019 IP 87.238.112.163.20039 > 192.168.77.17.2001: UDP, length 514
22:45:37.877937 IP 87.238.112.163.20025 > 192.168.130.211.2001: UDP, length 1472
22:45:37.877950 IP 87.238.112.163.20029 > 192.168.64.69.2001: UDP, length 1472
10 packets captured
20 packets received by filter
0 packets dropped by kernel

Если оно пришло, то из космоса...

Настройка PPPD

Итак, у нас есть установленный Gentoo 2006.0,- обращаю Ваше внимание на версию, т.к. для более ранних версий дистрибутива конфигурационный файл PPP выглядит несколько иначе.
Вот такой конфигурационный файл /etc/conf.d/net.ppp0:

config_ppp0=( "ppp" )
link_ppp0="/dev/ttyS2"
username_ppp0='testuser'
password_ppp0='testuser'

pppd_ppp0=(
 "updetach"      
 "defaultroute"  
 "usepeerdns"    
 "lock"                          
 "115200"                       
 "modem crtscts"               
)

phone_number_ppp0=( "P92430000" )
chat_ppp0=(
 'ABORT' 'BUSY'
 'ABORT' 'ERROR'
 'ABORT' 'NO ANSWER'
 'ABORT' 'NO CARRIER'
 'ABORT' 'NO DIALTONE'
 'ABORT' 'Invalid Login'
 'ABORT' 'Login incorrect'
 'TIMEOUT' '5'
 '' 'ATZ'
 'OK' 'AT' 
 'OK' 'ATD\T'
 'TIMEOUT' '60'
 'CONNECT' ''
 'TIMEOUT' '5'
 '~--' ''
)

Это самый простой вариант. Измените в нём значение link_ppp0 на спец. устройство вашего модема, username_ppp0 на Ваше имя пользователя, password_ppp0 на Ваш пароль и phone_number_ppp0 на телефон дозвона к провайдеру, не забыв поставить букву P для импульсного набора, или T для тонального, в начале.

Создаём init-файл:

# cd /etc/init.d
# ln -s net.lo net.ppp0

Проверьте соединение, запустив /etc/init.d/net.ppp0 start. Если всё нормально, то двигаем дальше.

Теперь самое главное - скрипт создания GRE-туннеля и настройки DVB-карты при соединении с провайдером. Вот он: /etc/ppp/ip-up.local:

#!/bin/sh

PID=8000
DEV_NAME=dvb0_0
IP_ADDR=10.0.0.1
MAC_ADDR=00:DD:DA:A1:BD:C4
OURIP=$4
GATE=$5
VPNIP="192.168.168.2"
REMOTEIP="87.238.112.164"

rmmod -f skystar2 >dev/null 2>&1
rmmod -f stv0299 >dev/null 2>&1
rmmod -f dvb-core >dev/null 2>&1
modprobe dvb-core dvb_shutdown_timeout=0
modprobe stv0299
modprobe skystar2

szap -c /etc/channels.conf -n 1 -x
if [ ! -x /proc/sys/net/ipv4/conf/dvb0_0 ] ; then
 dvbnet -p $PID
 ifconfig $DEV_NAME $IP_ADDR
 ifconfig $DEV_NAME hw ether $MAC_ADDR
fi
 ifconfig $DEV_NAME up

modprobe ip_gre
modprobe ipip
ip route add $REMOTEIP via $GATE src $OURIP
ip tunnel del gre1
ip tunnel add gre1 mode gre local $OURIP remote $REMOTEIP ttl 255
ifconfig gre1 $VPNIP netmask 255.255.255.255
route add -host 192.168.253.253 dev gre1
route del default
route add default dev gre1
echo "0" > /proc/sys/net/ipv4/conf/gre1/rp_filter

Тут есть:
  • PID - значение PID'а с https://am22-2.spacegate.com.ua/info/
  • DEV_NAME - название сетевого интерфейса DVB-карты
  • IP_ADDR - IP-адрес DVB-карты
  • MAC_ADDR - MAC-адрес DVB-карты
  • OURIP- IP-адрес PPP-интерфейса. выдаётся dial-up провайдером автоматически при соединении
  • GATE- IP-алрес маршрутизатора по-умолчание(default route). выдаётся dial-up провайдером автоматически при соединении
  • VPNIP- значение VPN IP с https://am22-2.spacegate.com.ua/info/
  • REMOTEIP- IP-адрес VPN сервера vpn.am22.spacegate.com.ua
Поменяйте это на Ваши значения. DEV_NAME и IP_ADDR можно в большинстве случаев оставить теми же.


Этот скрипт при соединении с вашим dial-up провайдером перезагружает модули, требуемые для SkyStar2, настраивает карту на нужный транспондер, поднимает сетевой интерфейс DVB-карты для приёма трафика и создаёт GRE-туннель к VPN-серверу спутникового провайдера, делая его (туннель) маршрутом по-умолчанию. Дополнительно также отключается rp_filter для возможности приёма входящего трафика с сетевого интерфейса, отличного от того, с которого были посланы запросы.


Ссылки



<- Назад
Valid HTML 4.01! Valid CSS!