ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Архивные статьи в категории ‘Networks’

Добро пожаловать в блог! Надеемся, что Вы еще вернетесь.

Trafd — демон учета трафика в FreeBSD.

Вопрос:

Я обнаружил, что у меня trafd сбрасывает инфу в /usr/local/var/trafd.
При попытке посмотреть traflog -i xl0 пишется :

traflog: WARNING: table too big to fit into memory

Подскажите как довести до ума работу trafd ?

Ответ:

По умолчанию сохраняется в /usr/local/var/trafd.

Для traflog нужны файлы которые получаются после того как отрабатывает:

trafdump IFACE_NAME
trafsave IFACE_NAME

После выполнения этих команд файлы и сохраняются в /usr/local/var/trafd

Например:

bge1 — название интерфейса на котором trafd собирает трафик (IFACE_NAME)
/usr/local/var/trafd/trafd.bge1 — полученный бинарный файл с трафиком
extnew — секция конфига /usr/local/etc/traflog.format в которой описан шаблон вывода бинарных данных в текстовый вид, например:

extnew {
    from:"%-18.18s " sport:"%-6.6s "        to:"%-18.18s " dport:"%-6.6s "
    proto:"%-4.4s " bytes:"%9ld " psize:"%10ld" ftime:" %Y-%m-%d %T" ltime:" %Y-%m-%d %T\n"
};

/usr/local/bin/traflog -o extnew -i /usr/local/var/trafd/trafd.bge1 -a -n > /usr/local/var/trafd/trafd.bge1.log

Таким образом разобранный трафик окажется в файле /usr/local/var/trafd/trafd.bge1.log

Команды trafdump и trafsave необходимо выполнять довольно часто, особенно при большом кол-ве трафика проходящего через этот интерфейс, чтобы избежать потом ошибки traflog: WARNING: table too big to fit into memory при обработке трафика.

Выход:

В файл /etc/crontab дописать:

*/5 * * * * * * root /usr/local/bin/trafdump IFACE_NAME; sleep 2; /usr/local/bin/trafsave IFACE_NAME

заменив IFACE_NAME на имя интерфейса на котором слушает trafd

Потом использовать небольшой скриптик на PERL:

/usr/local/sbin/scripts/trafd_move.pl

#!/usr/bin/perl

$srclogdir="/usr/local/var/trafd";
$dstdir="/usr/local/var/trafd/log";
$passeddir="/usr/local/var/trafd/passed";
$filemask=".IFACE_NAME";
($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst)=localtime(time());

opendir DIR,$srclogdir or die "Can't open logdir\n";
my @sorted=grep /$filemask/, readdir DIR;# or print "Trafd's logdir is empty\n";
closedir DIR or print "Can't close logdir\n";
@sorted=sort @sorted;
if ($#sorted >= 0){
   for($loop=0;$loop<=$#sorted;$loop++){
     #В этом месте мы можем делать с бинарным файлом все что угодно,
     #например натравить на него traflog, а затем переместить его в другую директорию
     $newname=sprintf("trafd_%02d%02d%02d_%02d%02d%02d_%02d.log",$year+1900,$mon+1,$day,$hour,$min,$sec,$loop);
     $cmd=sprintf("/usr/local/bin/traflog -o extnew -i %s/%s -a -n > %s/%s.passed",$srclogdir,$sorted[$loop],$passeddir,$newname);
     print "$cmd\n";
     system($cmd);
     $cmd=sprintf("/bin/mv %s/%s %s/%s",$srclogdir,$sorted[$loop],$dstdir,$newname);
     print "$cmd\n";
     system($cmd);
  }
}

Не забываем делать perl скрипт исполняемым:

chmod a+x perl_script_name.pl

Данный скрипт считает все файлы с маской $filemask в директории $srclogdir, затем он выполнит traflog и результат положит в $passeddir, а затем переместит бинарный файл с логами в $dstdir

Имена итоговых файлов будут такими:

  1. trafd_годмесяцдень_часыминутысукунды_номерфайла.log
  2. trafd_годмесяцдень_часыминутысукунды_номерфайла.log.passed

Пример: trafd_20080530_100830_02.log

Теперь можно поправить /ect/crontab:

*/5 * * * * * * root /usr/local/bin/trafdump IFACE_NAME; sleep 2; /usr/local/bin/trafsave IFACE_NAME sleep 2; /usr/local/sbin/scripts/trafd_move.pl

Не забыв поменять IFACE_NAME на имя своего интерфейса, а так же это должно быть написано одной строкой, без переносов на новую строчку конфига /ect/crontab.

З.Ы. Если кому-нить интересно, то можем привести пример с сохранением трафика в БД Mysql и код на PHP для просмотра статистики.

Вопрос:

trafd выдает bytes и psize. psize всегда больше. Что такое bytes в trafd ? Как считает провайдер ?

Ответ:

Смотрим в /usr/local/etc/traflog.format

# bytes number of data bytes
# psize number of all bytes

Итак bytes — это счетчик только данных, а psize это все переданные данные, включая технические (установка сессии и т.п.).

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

Авторы:
Николаев Дмитрий (virus (at) subnets.ru)
Панфилов Алексей (lehis (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 2, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Многие ищут/спрашивают функции для проверок IP-адресов на вхождение в подсеть, итак:

Perl

#!/usr/bin/perl
# Пример вызова и проверки IP-адреса 192.168.0.4
# на принадлежность к сети 192.168.0.0 с маской 255.255.255.248
#
if (ip_vs_net("192.168.0.4","192.168.0.0","255.255.255.248")){
    print "Адрес принадлежит сети\n";
}else{
    print "Адрес не входит в подсеть\n";
}
#Подпрограмма перевода IP в число
sub aton{
    my $addr=shift;
    (my $a0, my $a1, my $a2, my $a3)=split('\.',$addr);
    return $a3+($a2<<8)+($a1<<16)+($a0<<24);
}
#Подпрограмма перевода числа в IP
sub ntoa{
    my $ip=shift;
    return sprintf("%d.%d.%d.%d",
    (($ip&0xFF000000)>>24),(($ip&0xFF0000)>>16),(($ip&0xFF00)>>8),($ip&0xFF));
}
#Подпрограмма проверки вхождения IP в подсеть
sub ip_vs_net{
    my $ip=shift;
    my $network=shift;
    my $mask=shift;
    if((aton($ip)&aton($mask))==aton($network)){
        return 1;
    }else{
        return 0;
    }
}

PHP

<?
// Пример вызова и проверки IP-адреса 192.168.0.4
// на принадлежность к сети 192.168.0.0 с маской 255.255.255.248
if (ip_vs_net("192.168.0.4","192.168.0.0","255.255.255.248")){
    print "Адрес принадлежит сети<BR>";
}else{
    print "Адрес не входит в подсеть<BR>";
}
function ip_vs_net($ip,$network,$mask){
   if (((ip2long($ip))&(ip2long($mask)))==ip2long($network)){
       return 1;
   }else{
       return 0;
   }
}
?>

Функции которые переводят из CIDR в обычную маску и наоборот
<?
function cidr_2_mask($mask){
    return long2ip(pow(2,32) - pow(2, (32-$mask)));
}

function mask_2_cidr($mask){
    $a=strpos(decbin(ip2long($mask)),"0");
    if (!$a){$a=32;}
    return $a;
}
?>
Пример:
<?
     printf("%s",cidr_2_mask("24"));
     //Напечает 255.255.255.0

      printf("%s",mask_2_cidr("255.255.255.0"));
     //Напечает 24
?>

Ссылки:

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Панфилов Алексей (lehis (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 5, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Настраиваем BGP используя quagga на FreeBSD.

В статье описан способ поднять протокол динамической маршрутизации BGPv4 (EBGP) для минимального взаимодействия двух AS.

Протокол BGP сложный механизм состоящий из многих параметров. В одной статье сложно учесть и объяснить все.
Статья будет пригодна тем, кто только начал сталкиваться с этим протоколом и не использовал quagga.

Основные понятия:

AS — Autonomous system — группа маршрутизаторов (шлюзов) из одной административной области, взаимодействующих с другими автономными системами посредством внешнего протокола маршрутизации. При наличии собственного номера AS и блока адресов позволяет использовать два и более каналов в сеть Интернет одновременно, с распределением нагрузки между ними.

EGP — Exterior Gateway Protocol, протокол внешнего шлюза. (например: BGPv4, IS-IS);

IGP — Interior gateway protocol, протокол внутреннего шлюза (например: RIP, EIGRP, OSPF);

EBGP — External BGP, взаимодействие протокола BGP с другими (чужими) автономными системами;

IBGP — Internal BGP, взаимодействие протокола BGP внутри своей автономной системы;

peer — Сосед по протоколу динамической маршрутизации;

as-path — «Путь» из номеров AS (автономных систем) до сети назначения;

Номера AS 64512 — 65535 выделены для частного использования («серые» номера AS);

Тестовый стенд: компьютер Intel P4, 4Gb памяти, и два сетевых интерфейса em0, em1

Начнем:

cd /usr/ports/net/quagga/
make install clean

После установки нам необходимо настроить два демона:

  1. zebra
  2. bgpd

Переходим в директорию /usr/local/etc/quagga

Файл: zebra.conf

hostname zebra
password 123
enable password 123
log file /usr/local/etc/quagga/zebra.log
!
interface em0
ip address 10.1.1.1/24
!
interface em1
ip address 2.2.2.2/30
!
interface lo0
!
ip route 10.0.0.0/8 Null0 254
ip route 172.16.0.0/12 Null0 254
ip route 192.168.0.0/16 Null0 254
ip route 64.17.0.0/21 Null0 254
ip route 64.17.0.0/22 10.1.1.2
ip route 64.17.4.0/22 10.1.1.3
!
ip forwarding
!
!
line vty
exec-timeout 0 0
!

Пройдемся по конфигу zebra.conf

em0 — интерфейс смотрящий в сторону локальной сети
em1— интерфейс смотрящий в сторону провайдера
маршруты 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 отправлены в Null0, иными словами все пакеты которые будут приходить от данных сетей будут отбрасываться, т.к. это «серые» сети которые не маршрутизируются в сети Интернет.
64.17.0.0/21 — это выделенный нам, организацией RIPE, блок внешних адресов.
Т.к. для того, что бы протокол BGP мог анонсировать (объявлять) эту подсеть провайдеру он сам должен знать где находится данная сеть. Для того, чтобы в последствии избежать ситуаций когда из-за проблем внутри локальной сети, например недоступность gateway на который (которые) будут маршрутизироваться подсети или сеть 64.17.0.0/21 при использовании внутренних протоколов динамической маршрутизации (RIP, OSPF, EIGRP), BGP перестанет анонсировать наш блок внешних адресов, для этого мы также отправляем маршрут этой сети в Null0. Таким образом мы заставим BGP всегда знать маршрут в эту сеть.
Теперь возмем блок 64.17.0.0/21 и поделим его на две подсети 64.17.0.0/22, 64.17.4.0/22 и «отмаршрутизируем» их внутрь сети на два других сервера 10.1.1.2, 10.1.1.3 где они будут использоваться под клиентов или другое оборудование, где могут быть ещё разбиты на более мелкие подсети.

Вы возможно подумали о том: «как же это будет работать раз /21 отправлена в Null0
Это будет работать по тому, что в таблице маршрутизации роутера будет три маршрута, два из которых более точные (/22), поэтому наш маршрутизатор будет пользоваться ими для продвижения пакетов приходящие от нашего блока.

Файл bgpd.conf:

hostname AS100
password 123
enable password 123
log file /usr/local/etc/quagga/bgpd.log
!
router bgp 100
bgp router-id 2.2.2.2
bgp log-neighbor-changes
no synchronization
network 64.17.0.0/21
neighbor 2.2.2.1 remote-as 200
neighbor 2.2.2.1 description MY-PROVIDER
neighbor 2.2.2.1 next-hop-self
neighbor 2.2.2.1 route-map MY-PROVIDER-in in
neighbor 2.2.2.1 route-map MY-PROVIDER-out out
!
ip prefix-list bogons description bogus nets
ip prefix-list bogons seq 15 permit 0.0.0.0/8 le 32
ip prefix-list bogons seq 20 permit 127.0.0.0/8 le 32
ip prefix-list bogons seq 30 permit 10.0.0.0/8 le 32
ip prefix-list bogons seq 35 permit 172.16.0.0/12 le 32
ip prefix-list bogons seq 40 permit 192.168.0.0/16 le 32
ip prefix-list bogons seq 45 permit 169.254.0.0/16 le 32
ip prefix-list bogons seq 50 permit 224.0.0.0/4 le 32
ip prefix-list bogons seq 55 permit 240.0.0.0/4 le 32
ip prefix-list default description default route
ip prefix-list default seq 10 permit 0.0.0.0/0
ip prefix-list our-CIDR-blocks seq 5 permit 64.17.0.0/21 le 32
ip prefix-list upstream-out seq 10 permit 64.17.0.0/21
!
ip as-path access-list 1 permit _6451[2-9]_
ip as-path access-list 1 permit _645[2-9][0-9]_
ip as-path access-list 1 permit _64[6-9][0-9][0-9]_
ip as-path access-list 1 permit _65[0-9][0-9][0-9]_
!
route-map MY-PROVIDER-in deny 100
match as-path 1
!
route-map MY-PROVIDER-in deny 110
match ip address prefix-list bogons
!
route-map MY-PROVIDER-in deny 115
match ip address prefix-list default
!
route-map MY-PROVIDER-in deny 120
match ip address prefix-list our-CIDR-blocks
!
route-map MY-PROVIDER-in permit 200
set local-preference 100
!
route-map MY-PROVIDER-out permit 100
match ip address prefix-list upstream-out
!
route-map MY-PROVIDER-out deny 200
!
line vty
!

Пройдемся по конфигу bgpd.conf

AS100 — Autonomous system, наш номер автономной системы так же выданный нам организацией RIPE
AS200 — автономная система нашего провайдера
no synchronization — не ждать подтверждения маршрута от протоколов внутреннего шлюза (IGP)
network 64.17.0.0/21 — указываем сеть для анонсирования
командами neighbor мы описываем своего «соседа» (peer`а), указываем номер его AS, его IP-адрес, указываем маршрутные карты на вход и на выход, neighbor 2.2.2.1 next-hop-self — говорит о том, что для всех оглашаемых маршрутов next-hop будет выставлен на нас (в as-path будет содержаться номер нашей AS)
ip prefix-list bogons — описывает те сети маршруты в которые мы не хотим получать от своего «соседа»
ip as-path access-list 1 — описывает «серые» номера AS которые не маршрутизируются в сети Интернет и предоставлены для внутреннего использования, где бы они не встречались в as-path

route-map MY-PROVIDER-in — маршрутная карта которая применяется при передаче соседом маршрутов в нашу AS100

в deny 100 — запрещаем принимать маршруты в as-path которых содержатся «серые» AS, перечисленные в ip as-path access-list 1
в deny 110 — запрещаем принимать маршруты в которых содержатся сети перечисленные в ip prefix-list bogons
в deny 115 — запрещаем принимать default gateway
в deny 120 — запрещаем принимать маршрут в принадлежащие нам сети (наш блок адресов (prefix-list our-CIDR-blocks)) (на всякий случай ;))
в permit 200 — и последние правило которое разрешит все остальные маршруты и выставит на них local-preference 100

route-map MY-PROVIDER-out — маршрутная карта которая применяется при оглашении маршрутов от нашей AS100 к AS200 автономной системы нашего провайдера (prefix-list upstream-out).

в permit 100 — разрешаем свой блок /21

Принцип работы маршрутных карт (route-map) прост, то что разрешает access-list является совпадением, а дальше применяется действие указанное в маршрутной карте: permit или deny.
Последним действием которое не указано, но подразумевается это deny. Тот же самый принцип что и в access-list. Если совпадений не будет, то маршрут будет запрещен.

Рекомендуется присваивать «говорящие» названия для маршрутных карт (route-map) для дальнейшего удобства, когда конфиг будет разрастаться.

Ну вот мы и сделали необходимый минимум.
Пишем в /etc/rc.conf:

quagga_enable=»YES»
quagga_daemons=»zebra bgpd»
quagga_flags=»-d -A 127.0.0.1″

Стартуем:

/usr/local/etc/rc.d/quagga start

либо

/usr/local/sbin/zebra -f /usr/local/etc/quagga/zebra.conf -d -A 127.0.0.1
/usr/local/sbin/bgpd -f /usr/local/etc/quagga/bgpd.conf -d -A 127.0.0.1

Все то что описано в конфиге, можно настроить и через консоль, после запуска демона.
Для того, чтобы настроить и управлять демоном zebra, после его запуска, устанавливаем telnet соединение на порт 2601 localhost (127.0.0.1:2601).
Демон bgpd работает на порту 2605 localhost (127.0.0.1:2605).

Проверяем, что все работает:
telnet 127.0.0.1 2605
вводим пароль 123 и переходим в enable режим опять таки вводя пароль 123
смотрим информацию по соседу, где нас интересует строка состояния:
sh ip bgp neighbors 2.2.2.1
..................
BGP state = Established, up for 09w6d19h
.....................

даем команду sh ip bgp и смотрим получаем ли мы маршруты от соседа

AS100# sh ip bgp
BGP table version is 0, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*> 3.0.0.0 2.2.2.1 100 0 200 310 600 701 703 80 i
*> 4.0.0.0 2.2.2.1 100 0 200 310 3356 i
*> 4.0.0.0/9 2.2.2.1 100 0 200 310 3356 i
*> 4.23.112.0/24 2.2.2.1 100 0 200 310 174 21889 i
*> 4.23.113.0/24 2.2.2.1 100 0 200 310 174 21889 i
*> 4.23.114.0/24 2.2.2.1 100 0 200 310 174 21889 i
*> 4.36.116.0/23 2.2.2.1 100 0 200 310 174 21889 i
*> 4.36.116.0/24 2.2.2.1 100 0 200 310 174 21889 i
*> 4.36.117.0/24 2.2.2.1 100 0 200 310 174 21889 i
*> 4.36.118.0/24 2.2.2.1 100 0 200 310 174 21889 i

………………

Мы видим, что маршруты от соседа к нам приходят.

Теперь посмотрим, что мы огласили своему соседу:

sh ip bgp neighbors 2.2.2.1 advertised-routes
BGP table version is 0, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*> 64.17.0.0/21 2.2.2.2 0 32768 i

Total number of prefixes 1

Мы должны видеть наш блок адресов 64.17.0.0/21 и next-hop наш IP-адрес, если это так то все в порядке, наш маршрут соседу отправлен.

З.Ы.

Данная статья не претендует на гипер HOW-TO, но м.б. поможет кому нить, а так же, возможно, будет дописываться.

При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Мы продолжим тему настройки и понимания протокола BGP в других статьях, предполагается:

  1. настройка BGP на оборудовании от Cisco Systems
  2. настройка протокола BGP на оборудовании от Juniper
  3. как получить номер AS и собственный блок адресов ?
  4. что и как делать в БД RIPE после получения AS и блока адресов ?
  5. как управлять внешними каналами (трафик) ?
  6. транзитные AS

Ссылки:

Сгенерировать полный конфиг для cisco, построить фильтры по as-set , создать access-list / prefix-list можно с помощью: Online BGP tools Т.к. quagga имеет cisco like интерфейс конфиги почти один в один.

Автор: Николаев Дмитрий (virus (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 3, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

CIDR — Classless InterDomain Routing — Бесклассовая адресация

Как выяснить маску подсети исходя из CIDR ?

В кач-ве примера будем использовать
IP-адрес 213.45.64.123 с CIDR /27:

Необходимо взять кол-во бит из CIDR (в бинарном виде), разбить на 4-ре октета и перевести в десятичные.

1. запишем первые 27 бит как 1-цу, а остальные 5-ть (т.к. их всего 32 бита) как 0-ль

11111111111111111111111111100000

2. Разделим на 4-ре октета

11111111.11111111.11111111.11100000

3. Переведем в десятичную систему

255.255.255.224

Вот и все. Получили что /27 равен маске 255.255.255.224

Так же полезно просто помнить что:
сети класса A — это CIDR /8
сети класса B — это CIDR /16
сети класса С — это CIDR /24

————————————————————

Как по CIDR определить адрес сети, широковещательный адрес (broadcast), число хостов в сети ?

В кач-ве примера будем использовать тот же IP-адрес 213.45.64.123 с CIDR /27:

1. 32-27=5 бит

2. 2-йка в пятой степени = 32, а значит получается что рабочих IP-адресов в этой сети 30-ть (т.к. 1-ый адрес это адрес сети, а последний это broadcast)

3. Смотрим последний октет IP-адреса (213.45.64.123), в 123-х целых 32-ек укладывается 3 раза, а значит адрес сети 213.45.64.96 — это 32 умножить на 3 (32х3=96)

4. Широковещательным адресом (broadcast) будет 213.45.64.127 — это 32 умножить на 4 и отнять 1 (32х4-1=127)

————————————————————

Как по хосту и маске подсети определить адрес сети, широковещательный адрес (broadcast), число хостов в сети ?

В кач-ве примера будем использовать IP-адрес 192.168.32.48 с маской подсети 255.255.255.192:

1. 256-192=64, где 192 это последний октет из маски (255.255.255.192), а 64 это общее кол-во хостов в сети,
т.к. 1-ый адрес это адрес сети, а последний это broadcast получаем 62 рабочих хоста в сети.

2. Смотрим последний октет IP-адреса (192.168.32.48), в 48 целых 64-рок укладывается ноль получаем адрес сети 192.168.32.0 (0x64=0)

3. Широковещательным адресом (broadcast) будет 192.168.32.63 (64×1-1=63)

————————————————————

Или воспользуйтесь нашим IP Subnet Calculator 🙂

Ссылки:

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 1, среднее: 4,00 из 5)
Загрузка...
Отправить на почту Отправить на почту
0. Покурить доку (как обычно) 😉

Теперь, можно приступать.
Итак:

1. kldload ng_ubt (если нет в ядре). 

2. Подключить Bluetooth-модуль в USB, если он внешний, либо включить Bluetooth на ноутбуке.
В /var/log/messages должны появиться строки о ubt0:
Aug 11 14:20:51 book root: Unknown USB device: vendor 0x044e product 0x300d bus uhub5
Aug 11 14:20:51 book kernel: ubt0: <ALPS UGX, class 224/1, rev 2.00/19.15, addr 2> on uhub5
Aug 11 14:20:51 book kernel: ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2
Aug 11 14:20:51 book kernel: ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3; wMaxPacketSize=49;
nframes=6, buffer size=294

3. Поднимаем устройство: /etc/rc.d/bluetooth start ubt0
Если после запуска выдается
root: /etc/rc.d/bluetooth: ERROR: Unable to setup Bluetooth stack for device ubt0
то выключаем bluetooth адаптер в компе и включаем его заново, смотрим в /var/log/messages,
что девайс поднялся и определился как ubt0.
Снова запускаем /etc/rc.d/bluetooth start ubt0, если сообщение продолжает появляться, то ждем немного
и пробуем снова и снова, в конечном итоге подцепится.

4. Узнать BD_ADDR (МАС-адрес телефона) можно так:
hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
Inquiry result #0
        BD_ADDR: 00:16:b8:1c:d5:f4
        Page Scan Rep. Mode: 0x1
        Page Scan Period Mode: 00
        Page Scan Mode: 00
        Class: 52:02:04
        Clock offset: 0x3329
Inquiry complete. Status: No error [00]
После чего можно BD_ADDR телефона добавить в /etc/bluetooth/hosts (для облегчения последующих действий):
00:16:b8:1c:d5:f4       W810i
5. Добавить телефон в конфиг /etc/bluetooth/hcsecd.conf:
device {
    bdaddr 00:16:b8:1c:d5:f4;
    name "My Phone";
    key nokey; # 16 bytes key (hex string)
    pin "1112";
}

6. Надо запустить демона, отвечающего за "спаривание 🙂 " двух
"синезубых": hcsecd
Cледующая строка может быть добавлена к /etc/rc.conf, чтобы hcsecd запускался
автоматически во время старта системы:
hcsecd_enable="YES"
7. Добавляем в /etc/ppp/ppp.conf:
mts:
 enable force-scripts
# set device /dev/ttyU0 #Раскомментить эту строку при юзании дата-кабеля. 
 set phone *99***1\#
 set authname mts
 set authkey mts
 set login
 set ctsrts off
 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
            \"\" AT OK-AT-OK ATE1Q0 OK \
            AT+CGDCONT=1,\\\"IP\\\",\\\"internet.mts.ru\\\" OK \
            \\dATDT\\T TIMEOUT 60 CONNECT"
 set timeout 0
 set ifaddr 0/0 10.10.10.10 #10.10.10.10 нужно для удаленного пира,
                                           #иначе ppp может падать с ошибкой
                                           #"Не могу присвоить IP адрес"
 disable pap
 disable chap
 disable ipv6cp
 set timeout 180                    # 3 minute idle timer (the default)
 enable dns                            # request DNS info (for resolv.conf)
 add! default HISADDR		#Add (Overwrite) default route
Внимание! ВСЕ строки после метки mts: должны начинаться с пробела!

8. Теперь соединение по синему зубу установлено, осталось через него
организовать ppp-канал, что вполне реально сделать при помощи команды:
rfcomm_pppd -a W810i -c -C DUN -l mts
Теперь телефон спросит пин - введите тот, что вписан в /etc/bluetooth/hcsecd.conf.

P.S. Тестилось на:
    Оператор: МТС
    Телефоны: Nokia 6310i, SonyEricsson W810i
    USB-Bluetooth донгл: Tekram TM-304
    Ноутбук: Sony VAIO VGN-SZ6RMN
    ОС: FreeBSD 6.3, 7.0

P.P.S. Если используется дата-кабель, то делаем:
kldload umodem.ko
и используем только п.7 (в нем убираем коммент про set device)
и запускаем ррр: ppp -ddial mts

P.P.P.S. Для "слива-залива" инфы на телефон можно использовать порт /usr/ports/comm/obexapp
(Инфа взята с http://www.lissyara.su/?id=1380):
obexapp -c -a W810i -C ftrn
Теперь телефон спросит пин - введите тот, что вписан в /etc/bluetooth/hcsecd.conf.
obex> ?
CApability, CD, DElete, DIsconnect, Empty, GET, GETDefault, Ls, Mkdir, Put?
obex> ls
Access    Owner    Group    Size       Modified         Name
          n/a      n/a      n/a        n/a              Память телефона/
          n/a      n/a      n/a        n/a              Memory Stick/
Success, response: OK, Success (0x20)

При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !
Автор: Панфилов Алексей (lehis (at) subnets.ru)

Мегафон:

megafon:

 shell rfcomm_sppd -c DUN -t /dev/ttyp9 -a dru -b
 # shell rfcomm_sppd -t /dev/ttyp9 -a dru -b
 set log Chat command
 set device /dev/ttyp9
 set speed 115200
 set ctsrts off
 set phone "*99***2#"
 set dial "ABORT ERROR TIMEOUT 40 \
 \"\" AT OK-AT-OK ATE1Q0 OK \
 \\AT+CGDCONT=1,\\\"IP\\\",\\\"internet\\\" OK \
 \\dATDT\\T TIMEOUT 40 CONNECT"
 # TIMEOUT 40 CONNECT"
 set logout "ABORT BUSY ABORT ERROR TIMEOUT 30 \
 \"\" +++ATH OK-ATH-OK AT+CGATT=0 OK"
 set login
 set authname "gdata"
 set authkey "megafon"
 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
 add! default HISADDR
 set ipcpretries 10 5
 disable pap
 disable chap
 enable dns

Билайн

beeline_dru:
 #set log Chat command
 set device /dev/ttyU0
 set speed 115200
 set ctsrts off
 set phone "*99#"
 set dial "ABORT ERROR TIMEOUT 40 \
 \"\" AT OK-AT-OK ATE1Q0 OK \
 \\AT+CGDCONT=1,\\\"IP\\\",\\\"internet.beeline.ru\\\" OK \
 \\dATDT\\T TIMEOUT 10 CONNECT" 

 # TIMEOUT 40 CONNECT"
 set logout "ABORT BUSY ABORT ERROR TIMEOUT 10 \
 \"\" +++ATH OK-ATH-OK AT+CGATT=0 OK"
 set login
 set authname "beeline"
 set authkey "beeline"
 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
 add! default HISADDR
 # set ipcpretries 10 5
 # disable pap
 # disable chap
 enable dns

Взято тут: http://www.bsdportal.ru/


Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 2, среднее: 4,50 из 5)
Загрузка...
Отправить на почту Отправить на почту