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

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

Топология

В качестве бордера c7206-npe-g1, на него принимаю 2 фул от ISP1 и ISP2.
Один из клиентов , со своей AS ходит через меня анонсами в обоих аплинков…
Каналы на аплинков разной толщины :

  • ISP1 — 200 мб/с
  • ISP2 — 155 мб/с

Описание поставленной задачи

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

  • при нормальной работе обоих аплинков клиент работает только через ISP1
  • при падении ISP1 клиент работает через ISP2

При этом чтобы клиент не ел полосу у ISP2 я решил его туда не анонсировать пока не упадет ISP1 …

Решение

router bgp OurAS
~skip~
neighbor Peering_IP_Customer remote-as CustomerAS
neighbor Peering_IP_Customer update-source GigabitEthernet0/3
neighbor Peering_IP_Customer fall-over
neighbor Peering_IP_ISP2 remote-as ISP2AS
neighbor Peering_IP_ISP2 update-source POS1/0
neighbor Peering_IP_ISP1 remote-as ISP2AS
neighbor Peering_IP_ISP1 update-source GigabitEthernet0/2
neighbor Peering_IP_ISP1 fall-over
!
address-family ipv4
~skip~

описываем пир с абонентом

neighbor Peering_IP_Customer activate
neighbor Peering_IP_Customer default-originate
neighbor Peering_IP_Customer prefix-list Customer_in in
neighbor Peering_IP_Customer prefix-list Customer_out out

описываем пир с ISP2, юзаем Advertise Condition Т.е. пока есть маршрут полученный через ISP1 сети 217.150.32.0/19 не анонсировать сеть абонента

neighbor Peering_IP_ISP2 activate
neighbor  Peering_IP_ISP2 advertise-map Cus2ISP2 non-exist-map NON-EXIST

при этом в любом случае анонсировать свои сети

neighbor Peering_IP_ISP2 route-map ISP2-in in
neighbor Peering_IP_ISP2 route-map ISP2-out out

описываем пир с ISP1


neighbor Peering_IP_ISP1 activate
neighbor Peering_IP_ISP1 route-map ISP1-in in
neighbor Peering_IP_ISP1 route-map ISP1-out out
~skip~
exit-address-family
!

собственно роутмапы
выпускаем только наши сети + абонент и режем то, что может не дай бог вылететь не нужное

!
route-map ISP1-out deny 5
match ip address prefix-list lan
!
route-map ISP1-out permit 10
match ip address prefix-list ourAS.all
!
route-map ISP1-out permit 20
match ip address prefix-list CustomerAS
!

тоже самое на второго апстрима

route-map ISP2-out deny 5
match ip address prefix-list lan
!
route-map ISP2-out permit 10
match ip address prefix-list ourAS.all CustomerAS
!

роутмап для определения есть ли анонс интересующей нас сети через первый апстрим

route-map NON-EXIST permit 10
match ip address prefix-list ISP1-in-net
match as-path 1
!

собственно роутмап анонса клиента

route-map Cus2ISP2 deny 5
match ip address prefix-list lan
!
route-map Cus2ISP2 permit 10
match ip address prefix-list CustomerAS
!

префикс листы

ip prefix-list ourAS.all seq 5 permit our_net1/21 le 24
ip prefix-list ourAS.all seq 10 permit our_net2/21 le 24
!
ip prefix-list CustomerAS seq 5 permit customer_net/22
!

собственно сеть которую мониторим

ip prefix-list ISP1-in-net seq 5 permit 217.150.32.0/19
!

так как на этом роутере у нас используются дополнительные демоны динамической маршрутизации (eigrp + ospf), в случае ошибки эти сети !не будут анонсированы нашим апстримам и абоненту

ip prefix-list lan seq 5 permit 0.0.0.0/0
ip prefix-list lan seq 10 permit 10.0.0.0/8 le 32
ip prefix-list lan seq 15 permit 172.16.0.0/12 le 32
ip prefix-list lan seq 20 permit 192.168.0.0/16 le 32
!

as-path лист для фильтра номера автономки ISP1

ip as-path access-list 1 permit ^AS_ISP1_NUM$
!

Результат

При такой настройке получаем:

  1. наши сети анонсятся через обоих апстримов
  2. абонент анонсится
    • при нормальной работе ISP1 только через него
    • при падении ISP1 идет анонс через ISP2

При этом вы могли заметить что на ISP2 прописано анонсить route-map ISP2-out в данный роут-мап входит и подсеть абонента.
Но она не будет анонсироваться пока не выполниться условие advertise-map Cus2ISP2 non-exist-map NON-EXIST, что нам и требовалось.
З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Green

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

Один из наших читателей (пожелавший остаться анонимом) прислал нам по мылу конфигурацию для схемы с Juniper MX80, в которой прокидывается vlan через trunk проходящий через 80тые Juniper`ы.
Спасибо ему за инфу, т.к. она точно будет полезна всем кто столкнется с подобной задачей.

Топология

MX80-client [ge-1/0/2] <—> [ge-1/0/4] MX80-1 [ge-1/0/1] <—> [ge-1/0/7] MX80-2 [ge-1/1/1] <—> [ge-2/0/0] M120-client

Описание топологии

Access port   <—>    (Trunk port back to back)  <—>    Access port

IP-адрес на MX80-client (слева) — 200.200.200.1/30
IP-адрес на M120-client  (справа) — 200.200.200.2/30

Конфиги

MX80-1

root@MX80-1# show interfaces ge-1/0/1
flexible-vlan-tagging;
native-vlan-id 100;
encapsulation flexible-ethernet-services;
unit 2 {
    encapsulation vlan-bridge;
    vlan-id 10;
}
root@MX80-1# show interfaces ge-1/0/4
encapsulation ethernet-bridge;
unit 0 {
    family bridge;
}
root@MX80-1# show bridge-domains
DEV {
    domain-type bridge;
    vlan-id 10;
    interface ge-1/0/1.2;
    interface ge-1/0/4.0;
}

MX80-2

root@MX80-2# show interfaces ge-1/0/7
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 2 {
    encapsulation vlan-bridge;
    vlan-id 10;
}
root@MX80-2# show interfaces ge-1/1/1
encapsulation ethernet-bridge;
unit 0 {
    family bridge;
}
root@MX80-2# show bridge-domains
DEV {
     domain-type bridge;
     vlan-id 10;
     interface ge-1/0/7.2;
     interface ge-1/1/1.0;
}

MX80-client

root@MX80-client# show interfaces ge-1/0/2
unit 0 {
    family inet {
        address 200.200.200.1/30;
    }
}
root@MX80-client# run show interfaces ge-1/0/2
Physical interface: ge-1/0/2, Enabled, Physical link is Up
Interface index: 160, SNMP ifIndex: 514
Link-level type: Ethernet, MTU: 1514, Speed: 1000mbps, BPDU Error:
None, MAC-REWRITE Error: None, Loopback: Disabled,
Source filtering: Disabled, Flow control: Enabled, Auto-negotiation:
Enabled, Remote fault: Online, Speed-negotiation: Disabled,
Auto-MDIX: Enabled
Device flags   : Present Running
Interface flags: SNMP-Traps Internal: 0x0
Link flags     : None
CoS queues     : 8 supported, 8 maximum usable queues
Current address: 80:71:1f:c2:05:62, Hardware address: 80:71:1f:c2:05:62
Last flapped   : 2011-01-19 13:12:48 UTC (17:20:05 ago)
Input rate     : 0 bps (0 pps)
Output rate    : 0 bps (0 pps)
Active alarms  : None
Active defects : None

Logical interface ge-1/0/2.0 (Index 71) (SNMP ifIndex 656)
Flags: SNMP-Traps 0x0 Encapsulation: ENET2
Input packets : 30
Output packets: 9
Protocol inet, MTU: 1500
Flags: Sendbcast-pkt-to-re
Addresses, Flags: Is-Preferred Is-Primary
Destination: 200.200.200.0/30, Local: 200.200.200.1,
Broadcast: 200.200.200.3
Protocol multiservice, MTU: Unlimited

M120-client

root@M120# show interfaces ge-2/0/0
unit 0 {
    family inet {
        address 200.200.200.2/30;
    }
}
root@M120# run show interfaces ge-2/0/0
Physical interface: ge-2/0/0, Enabled, Physical link is Up
Interface index: 143, SNMP ifIndex: 523
Link-level type: Ethernet, MTU: 1514, Speed: 1000mbps, Loopback:
Disabled, Source filtering: Disabled, Flow control: Enabled,
Auto-negotiation: Enabled, Remote fault: Online
Device flags   : Present Running
Interface flags: SNMP-Traps Internal: 0x4000
Link flags     : None
CoS queues     : 8 supported, 8 maximum usable queues
Current address: 00:19:e2:67:f3:fc, Hardware address: 00:19:e2:67:f3:fc
Last flapped   : 2011-01-19 18:32:34 UTC (17:19:47 ago)
Input rate     : 0 bps (0 pps)
Output rate    : 0 bps (0 pps)
Active alarms  : None
Active defects : None

Logical interface ge-2/0/0.0 (Index 87) (SNMP ifIndex 310)
Flags: SNMP-Traps Encapsulation: ENET2
Input packets : 7
Output packets: 2430
Protocol inet, MTU: 1500
Flags: None
Addresses, Flags: Is-Preferred Is-Primary
Destination: 200.200.200.0/30, Local: 200.200.200.2,
Broadcast: 200.200.200.3

Проверка ICMP запросами

root@M120# run ping 200.200.200.1
PING 200.200.200.1 (200.200.200.1): 56 data bytes
64 bytes from 200.200.200.1: icmp_seq=0 ttl=64 time=0.541 ms
64 bytes from 200.200.200.1: icmp_seq=1 ttl=64 time=0.499 ms
64 bytes from 200.200.200.1: icmp_seq=2 ttl=64 time=0.496 ms
64 bytes from 200.200.200.1: icmp_seq=3 ttl=64 time=0.505 ms
^C
--- 200.200.200.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.496/0.510/0.541/0.018 ms
root@MX80-client# run ping 200.200.200.2
PING 200.200.200.2 (200.200.200.2): 56 data bytes
64 bytes from 200.200.200.2: icmp_seq=0 ttl=64 time=0.652 ms
64 bytes from 200.200.200.2: icmp_seq=1 ttl=64 time=0.511 ms
64 bytes from 200.200.200.2: icmp_seq=2 ttl=64 time=0.445 ms
64 bytes from 200.200.200.2: icmp_seq=3 ttl=64 time=0.504 ms
^C
--- 200.200.200.2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.445/0.528/0.652/0.076 ms

Таблица MAC адресов на MX80`ых расположенных в центре по топологии

root@MX80-1# run show bridge mac-table
MAC flags (S -static MAC, D -dynamic MAC,
SE -Statistics enabled, NM -Non configured MAC)

Routing instance : default-switch
Bridging domain : DEV, VLAN : 10
MAC                 MAC      Logical
address             flags    interface
00:19:e2:67:f3:fc   D        ge-1/0/1.2
80:71:1f:c2:05:62   D        ge-1/0/4.0
root@MX80-2# run show bridge mac-table
MAC flags (S -static MAC, D -dynamic MAC,
SE -Statistics enabled, NM -Non configured MAC)

Routing instance : default-switch
Bridging domain : DEV, VLAN : 10
MAC                 MAC      Logical
address             flags    interface
00:19:e2:67:f3:fc   D        ge-1/1/1.0
80:71:1f:c2:05:62   D        ge-1/0/7.2
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 2, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту
    Не найдено

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

Давно хотели попробовать (модную нынче) виртуализацию, когда на одном физическом сервере располагается более одной системы и вот как раз такой случай.

На просторах тырнета с помощью гугла была найдена статейка «Ставим VirtualBox на FreeBSD без использования X11«, собственно хорошая статья для старта разборок с виртуализацией.

Приведу копию статьи с моими дополнениями после нее.

Текущая актуальная версия порта VirtualBox — 3.2.4. Начиная, с 3.1.0 версии порт разбит на два: virtualbox-ose-kmod (модули ядра) и virtualbox-ose (сам virtualbox).

 

В текущей версии порта решена проблема с установкой VirtualBox без X11 и со встроенным vnc сервером. Поэтому процесс установки сводится к стандартным действиям.
Действия по шагам:
# cd /usr/ports/net/libvncserver
# make
# make install
# cd /usr/ports/emulators/virtualbox-ose-kmod
# make
# make install

После этого ставим непосредственно VirtualBox:
# cd /usr/ports/emulators/virtualbox-ose
# make config

далее, выбираем нужные нам опции:

# make
# make install

Добавляем загрузку модуля VirtualBox и запуск скрипта для возможности работы адаптера виртульной машины в bridge-режиме (без нее — только NAT):
# echo ‘vboxdrv_load=»YES»‘ >> /boot/loader.conf
# echo ‘vboxnet_enable=»YES»‘ >> /etc/rc.conf

Чтобы лишний раз не перезагружаться, вручную грузим модуль и скрипт:
# kldload vboxdrv
# /usr/local/etc/rc.d/vboxnet start

Создание и настройка виртуальной машины

 

Создаем виртуальную машину (посмотреть все возможные ostype: VBoxManage list ostypes)

# VBoxManage createvm --name MicroXP --ostype WindowsXP --register --basefolder /usr/vbox

Задаем парамерты виртуалки (bridgeadapter1 указывает адаптер хоста, к которому привязываем виртуалку)

# VBoxManage modifyvm MicroXP --memory 512 --floppy disabled --audio none --nic1 bridged --bridgeadapter1 em0 --vram 4 --accelerate3d off --boot1 disk --acpi on --cableconnected1 on

Создаем жесткий диск, размер указывается в мегабайтах

# VBoxManage createhd --filename /usr/local/vbox/iso/MicroXP.vdi --size 1000 --register

Создаем контроллер на виртуалке

# VBoxManage storagectl MicroXP --name "IDE Controller" --add ide

Подключаем диск к контроллеру

# VBoxManage storageattach MicroXP --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium /usr/local/vbox/MicroXP.vdi

Подключаем установочный образ к контроллеру

# VBoxManage storageattach MicroXP --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium /usr/local/vbox/MicroXP-v0.82.iso

Устанавливаем загрузку с установочного образа

# VBoxManage modifyvm MicroXP --boot1 dvd

Далее, запускаем машину и указываем ей параметры vnc:

# VBoxHeadless -s MicroXP -n -m 5900 -o password

Подключаемся любым vnc-клиентом (например, RealVNC или UltraVNC) и ставим ОС.

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

Добавлено 24.01.2013

Внимание.

Virtualbox с версии 4.2 изменил работу виртуалок с VNC. Теперь вместо ключа -n нужно запускать так:

# VBoxManage setproperty vrdeextpack VNC
# VBoxManage modifyvm MicroXP --vrdeproperty VNCPassword=password
# VBoxManage modifyvm MicroXP --vrdeauthlibrary null
# VBoxManage modifyvm MicroXP --vrdeport 5900
# VBoxHeadless --startvm MicroXP

Ссылки:

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

Затем нужно поставить guest additions в виртуалку, без них vnc сервер иногда глючит:

# VBoxManage storageattach MicroXP --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium /usr/local/lib/virtualbox/additions/VBoxGuestAdditions_3.2.4.iso

После этого, виртуальная машина готова к использованию.

Правда, несмотря на установленные guest additions, заставить работать курсор мыши мне не удалось.

—————————

Мои дополнения/заметки

Вышеописанным способом мне удалось установить две виртуальные машины с OS:

  1. FreeBSD 8.1 — в кач-ве сервера
  2. Windows XP — в кач-ве клиента

Запускать с vnc нужно тогда когда необходим доступ к консоли сервера, т.е. получается как удаленная KVM.
Если нужно просто запустить уже готовую и настроенную виртуальную машину, то пользуем:

# VBoxManage startvm MicroXP --type headless

Останавливаем виртуальную машину  через acpi:

# VBoxManage controlvm MicroXP acpipowerbutton

или более жестко:

# VBoxManage controlvm MicroXP poweroff

Выставляем hdd как загрузчик, послее того как установили OS:

# VBoxManage modifyvm MicroXP --boot1 disk

Отцепить установочный диск:

 # VBoxManage storageattach MicroXP —storagectl «IDE Controller» —port 1 —device 0 —medium none

Просмотр всех запущенных машин:

# VBoxManage list runningvms

Просмотр всех зарегистрированных машин:

# VBoxManage list vms

Просмотр информации о виртуальной машине:

# VBoxManage showvminfo MicroXP

Backup

Бекап виртуальных машин можно сделать через команду export, перед выполнением команды export необходимо выключить виртуалку или поставить сделать сохранение состояния:

Выключение:

# VBoxManage controlvm MicroXP poweroff
Сохранение состояния:
# VBoxManage controlvm MicroXP savestate

После чего можно выполнить export:

# VBoxManage export MicroXP -o /usr/WinXP.ovf

Внимание: после выполнения команды на выключение или команды на сохранения состояния виртуальную машину необходимо запускать снова, не забудьте об этом.

Недавно я заморочился над темой автоматического резервного копирование виртуальных машин Virtualbox, чтобы они сами ежедневно бекапились. Почитал в Инете каждый «во что горазд» делает. Кто то через export, кто то через clonehd, а кто то через snapshot.

Поразмыслив я для себя все же остановился на варианте с export. Для выполнения задачи резервного копирования виртуальных машин Virtualbox я накатал скрипт на PERL, который запихнул в /etc/crontab OS FreeBSD.

Кому интересно, то вот исходник скрипта для backup`а всех запущенных виртуальных машин: http://subnets.ru/files/virtualbox_backup.pl.txt

Что делает скрипт автоматического backup`а для virtualbox машин:

  • получает листинг всех запущенных виртуальных машин, которые и будут подвергаться бекапу
  • создает директорию для backup`а: /some/path/backup/год/месяц/день/имя_виртуальной_машины
  • создает в backup дире файл readme.txt куда помещает вывод команды showvminfo по бекапируемой виртуалке
  • выполняет savestate виртуальной машины
  • выполняет export виртуальной машины
  • выполняет запуск виртуальной машины
  • после завершения бекапирования всех запущенных машин, скрипт выполняет удаление папки с бекапом месячной давности

Import

Импорт виртуальных машин:
Может понадобиться или при восстановлении из backup`а или просто при переносе на другой физический сервер.
По умолчанию каталог для хранения виртуальных машин является home каталогом юзера под котором вы вошли в систему, чтобы изменить местоположение выполним:

# mkdir -p /usr/vbox/machines
# mkdir /usr/vbox/hdd
# VBoxManage setproperty machinefolder /usr/vbox/machines
# VBoxManage setproperty hdfolder /usr/vbox/hdd

Сначала проверим как оно импортнется:

# VBoxManage import /usr/WinXP.ovf --dry-run

Если все ОК, то теперь можно импортить:

# VBoxManage import /usr/WinXP.ovf

Отныне все виртуалки будут «жить» в каталоге /usr/vbox.

Добавить ещё сетевуху можно командой:

# VBoxManage modifyvm MicroXP --nic2 bridged --bridgeadapter2 vlan4 --cableconnected2 on

Этим мы добавили вторую сетевую карту, забриджевали её с vlan4 на реальном сервере.
Все последущие карты добавляются/изменяются/удаляются так же с указанием —nicX, где X это номер карты

Махнуть MAC-адрес на втором адаптере можно командой:

# VBoxManage modifyvm MicroXP --macaddress2 auto

MAC-адрес будет выбран автоматически, либо можно самому задать мак:

# VBoxManage modifyvm MicroXP --macaddress2 444444444444

Удалить любую сетевуху из виртуалки можно по её номеру, мы удалим вторую, которую создали выше:

# VBoxManage modifyvm MicroXP --nic2 none

Проблем или отличий в работе виртуальной машины и реальной я не заметил. Все работает как надо.

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

Например мы собирали тестовый стенд из 3-х виртуалок и гоняли на них BGP с использованием Quagga.

—————————

Добавлено 24.01.2013

Внимание. Virtualbox с версии 4.2 инсталит свои модули в папку с ядром /boot/kernel вместо папки /boot/modules:

# ls -la /boot/kernel/vbox*
-r-xr-xr-x  1 root  wheel  243579 24 янв 17:38 /boot/kernel/vboxdrv.ko
-r-xr-xr-x  1 root  wheel  639853 24 янв 17:38 /boot/kernel/vboxdrv.ko.symbols
-r-xr-xr-x  1 root  wheel    9075 24 янв 17:38 /boot/kernel/vboxnetadp.ko
-r-xr-xr-x  1 root  wheel   48281 24 янв 17:38 /boot/kernel/vboxnetadp.ko.symbols
-r-xr-xr-x  1 root  wheel   23080 24 янв 17:38 /boot/kernel/vboxnetflt.ko
-r-xr-xr-x  1 root  wheel   76126 24 янв 17:38 /boot/kernel/vboxnetflt.ko.symbols

Поэтому если вы апгрейднули версию Virtualbox и у вас полезли ошибки такого плана:

# /usr/local/etc/rc.d/vboxnet start
/usr/local/etc/rc.d/vboxnet: WARNING: Can't load vboxnetflt module.

А в /var/log/messages у вас появилось:

kernel: link_elf: symbol ng_free_item undefined

То вам необходимо:

  • выгрузить vboxdrv.ko если он загружен: # kldunload vboxdrv.ko
  • пересобрать virtualbox-ose-kmod
  • загрузить vboxdrv: # kldload vboxdrv.ko
  • # /usr/local/etc/rc.d/vboxnet start

Если и это не помогает, то нужно пересобрать ядро, а потом снова повторить вышеописанную процедуру.

Пересбор ядра:

# cd /usr/src
# make kernel KERNCONF=YOUR_KERNEL_NAME

И с этого момента не забывайте, что если вы по какой то причине пересобирали ядро, то вам нужно после этого пересобирать и virtualbox-ose-kmod.

Ссылки:

—————————

Ссылки

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

Автор: Николаев Дмитрий (virus (at) subnets.ru)

 

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

В продолжении статьи Настройка Cisco AS5350 в качестве VoIP-шлюза.

Имеем:

  • Cisco AS5350 (VoIP-шлюз)
  • Сервер FreeBSD с установленным freeradius

Прикручиваем RADIUS к AS5350 для сохранения информации о совершаемых VoIP-звонках. log voip calls, log ip voip calls

Основная задача это обеспечение возможности однозначного сопоставления IP-шной и TDM-ной частей (legs) VoIP-звонка, а также логирование IP-адресов, с которых производятся звонки через наш VoIP-шлюз, что по умолчанию не делается.

Я не буду подробно на этом останавливаться и просто приведу настройки Cisco в части акаутинга и radius:

aaa new-model
aaa authorization exec h323 group radius local
aaa authorization exec sip group radius local
aaa authorization network default group radius local
aaa authorization network h323 group radius local
aaa accounting delay-start
aaa accounting exec default start-stop group radius
aaa accounting exec h323 start-stop group radius
aaa accounting exec sip start-stop group radius
aaa accounting network default start-stop group radius
aaa accounting network h323 start-stop group radius
aaa accounting network sip start-stop group radius
aaa accounting connection h323 start-stop group radius
aaa accounting connection sip start-stop group radius
aaa nas port extended
aaa session-id common
gw-accounting aaa

ip radius source-interface FastEthernet0/0
radius-server host 1.1.1.2 auth-port 1812 acct-port 1813
radius-server timeout 30
radius-server key 7 10491D54261E210823493A2A373B
radius-server vsa send accounting

Обратите внимание на команду на VoIP-шлюзе Cisco:

radius-server vsa send accounting

Благодаря ей VoIP-шлюз будет передавать нужные нам атрибуты, определенные производителем (так называемые Vendor-Specific Attributes), а именно:

  • h323-incoming-conf-id — ID звонка
  • h323-remote-address — IP, с которого/на который был звонок
  • iphop — этот атрибут заполняется при исходящих из IP-сетей звонках количеством хопов до IP-адреса звонящего и их IP-адресами.

Увидеть что Cisco отдает Radius`у можно выполнив в её консоли команды:

terminal monitor
debug radius

Вот пример вывода:

RADIUS(000B0086): Send Accounting-Request to 1.1.1.2:1813 id 1646/229, len 1084
RADIUS:  authenticator 44 55 FD 7F DC D2 19 C3 - 3D 1B D2 B1 82 E6 C4 52
RADIUS:  Acct-Session-Id     [44]  10  "001069EA"
RADIUS:  Calling-Station-Id  [31]  9   "3332211"
RADIUS:  Called-Station-Id   [30]  13  "89259998877"
RADIUS:  Vendor, Cisco       [26]  66
RADIUS:   Cisco AVpair       [1]   60  "call-id=93FA01A7-1FD111E0-B101EAE7-244362EB@1.1.1.194"
RADIUS:  Vendor, Cisco       [26]  21
RADIUS:   Cisco AVpair       [1]   15  "iphop=count:1"
RADIUS:  Vendor, Cisco       [26]  33
RADIUS:   Cisco AVpair       [1]   27  "iphop=hop1:1.1.1.194"
RADIUS:  Vendor, Cisco       [26]  56
RADIUS:   h323-setup-time    [25]  50  "h323-setup-time=14:29:41.703 MSK Sat Jan 15 2011"
RADIUS:  Vendor, Cisco       [26]  28
RADIUS:   h323-gw-id         [33]  22  "h323-gw-id=as5350."
RADIUS:  Vendor, Cisco       [26]  56
RADIUS:   Conf-Id            [24]  50  "h323-conf-id=93F51D6D 1FD111E0 99AD0014 F26ABCA0"
RADIUS:  Vendor, Cisco       [26]  31
RADIUS:   h323-call-origin   [26]  25  "h323-call-origin=answer"
RADIUS:  Vendor, Cisco       [26]  27
RADIUS:   h323-call-type     [27]  21  "h323-call-type=VoIP"
RADIUS:  Vendor, Cisco       [26]  65
RADIUS:   Cisco AVpair       [1]   59  "h323-incoming-conf-id=93F51D6D 1FD111E0 99AD0014 F26ABCA0"
RADIUS:  Vendor, Cisco       [26]  26
RADIUS:   Cisco AVpair       [1]   20  "subscriber=Unknown"
RADIUS:  Vendor, Cisco       [26]  30
RADIUS:   Cisco AVpair       [1]   24  "session-protocol=sipv2"
RADIUS:  Vendor, Cisco       [26]  44
RADIUS:   Cisco AVpair       [1]   38  "gw-rxd-cdn=ton:0,npi:0,#:89259998877"
RADIUS:  Vendor, Cisco       [26]  148
RADIUS:   Cisco AVpair       [1]   142 "feature-vsa=fn:TWC,ft:01/15/2011 14:29:41.703,cgn:3803234,cdn:89259998877,frs:0,fid:730309,fcid:93F51D6D1FD111E099AD0014F26ABCA0,legID:B3920"
RADIUS:  Vendor, Cisco       [26]  58
RADIUS:   h323-connect-time  [28]  52  "h323-connect-time=14:29:52.352 MSK Sat Jan 15 2011"
RADIUS:  Acct-Input-Octets   [42]  6   144960
RADIUS:  Acct-Output-Octets  [43]  6   167360
RADIUS:  Acct-Input-Packets  [47]  6   906
RADIUS:  Acct-Output-Packets [48]  6   1046
RADIUS:  Acct-Session-Time   [46]  6   18
RADIUS:  Vendor, Cisco       [26]  61
RADIUS:   h323-disconnect-tim[29]  55  "h323-disconnect-time=14:30:10.517 MSK Sat Jan 15 2011"
RADIUS:  Vendor, Cisco       [26]  32
RADIUS:   h323-disconnect-cau[30]  26  "h323-disconnect-cause=10"
RADIUS:  Vendor, Cisco       [26]  42
RADIUS:   h323-remote-address[23]  36  "h323-remote-address=1.1.1.194"
RADIUS:  Vendor, Cisco       [26]  24
RADIUS:   Cisco AVpair       [1]   18  "release-source=3"
RADIUS:  Vendor, Cisco       [26]  28
RADIUS:   h323-voice-quality [31]  22  "h323-voice-quality=0"
RADIUS:  Vendor, Cisco       [26]  43
RADIUS:   Cisco AVpair       [1]   37  "remote-media-address=1.1.1.194"
RADIUS:  Vendor, Cisco       [26]  50
RADIUS:   Cisco AVpair       [1]   44  "gw-rxd-cgn=ton:0,npi:0,pi:0,si:0,#:3332211"
RADIUS:  User-Name           [1]   9   "3332211"
RADIUS:  Acct-Status-Type    [40]  6   Stop                      [2]
RADIUS:  Service-Type        [6]   6   Login                     [1]
RADIUS:  NAS-IP-Address      [4]   6   1.1.1.3
RADIUS:  Acct-Delay-Time     [41]  6   0
RADIUS: Received from id 1646/229 1.1.1.2:1813, Accounting-response, len 20

Что ж, для решения основной поставленной перед нами задачи достаточно выполнить следующее:
в /usr/local/etc/raddb/radiusd.conf в секции preprocess указать, что нам нужно преобразовывать VSA :

preprocess {
       with_cisco_vsa_hack = yes
}

Radius разбирает Vendor-Specific Attributes благодаря словарям, которые расположены в папке /usr/local/share/freeradius, в частности файл-словарь по cisco.

dictionary.cisco:

VENDOR          Cisco                           9

#
#       Standard attribute
#
BEGIN-VENDOR    Cisco

ATTRIBUTE       Cisco-AVPair                            1       string
ATTRIBUTE       Cisco-NAS-Port                          2       string

#
#  T.37 Store-and-Forward attributes.
#
ATTRIBUTE       Cisco-Fax-Account-Id-Origin             3       string
ATTRIBUTE       Cisco-Fax-Msg-Id                        4       string
ATTRIBUTE       Cisco-Fax-Pages                         5       string
ATTRIBUTE       Cisco-Fax-Coverpage-Flag                6       string
ATTRIBUTE       Cisco-Fax-Modem-Time                    7       string
ATTRIBUTE       Cisco-Fax-Connect-Speed                 8       string
ATTRIBUTE       Cisco-Fax-Recipient-Count               9       string
ATTRIBUTE       Cisco-Fax-Process-Abort-Flag            10      string
ATTRIBUTE       Cisco-Fax-Dsn-Address                   11      string
ATTRIBUTE       Cisco-Fax-Dsn-Flag                      12      string
ATTRIBUTE       Cisco-Fax-Mdn-Address                   13      string
ATTRIBUTE       Cisco-Fax-Mdn-Flag                      14      string
ATTRIBUTE       Cisco-Fax-Auth-Status                   15      string
ATTRIBUTE       Cisco-Email-Server-Address              16      string
ATTRIBUTE       Cisco-Email-Server-Ack-Flag             17      string
ATTRIBUTE       Cisco-Gateway-Id                        18      string
ATTRIBUTE       Cisco-Call-Type                         19      string
ATTRIBUTE       Cisco-Port-Used                         20      string
ATTRIBUTE       Cisco-Abort-Cause                       21      string

#
#  Voice over IP attributes.
#
ATTRIBUTE       h323-remote-address                     23      string
ATTRIBUTE       h323-conf-id                            24      string
ATTRIBUTE       h323-setup-time                         25      string
ATTRIBUTE       h323-call-origin                        26      string
ATTRIBUTE       h323-call-type                          27      string
ATTRIBUTE       h323-connect-time                       28      string
ATTRIBUTE       h323-disconnect-time                    29      string
ATTRIBUTE       h323-disconnect-cause                   30      string
ATTRIBUTE       h323-voice-quality                      31      string
ATTRIBUTE       h323-gw-id                              33      string
ATTRIBUTE       h323-incoming-conf-id                   35      string

ATTRIBUTE       h323-credit-amount                      101     string
ATTRIBUTE       h323-credit-time                        102     string
ATTRIBUTE       h323-return-code                        103     string
ATTRIBUTE       h323-prompt-id                          104     string
ATTRIBUTE       h323-time-and-day                       105     string
ATTRIBUTE       h323-redirect-number                    106     string
ATTRIBUTE       h323-preferred-lang                     107     string
ATTRIBUTE       h323-redirect-ip-address                108     string
ATTRIBUTE       h323-billing-model                      109     string
ATTRIBUTE       h323-currency                           110     string
ATTRIBUTE       subscriber                              111     string
ATTRIBUTE       gw-rxd-cdn                              112     string
ATTRIBUTE       gw-final-xlated-cdn                     113     string
ATTRIBUTE       remote-media-address                    114     string
ATTRIBUTE       release-source                          115     string
ATTRIBUTE       gw-rxd-cgn                              116     string
ATTRIBUTE       gw-final-xlated-cgn                     117     string
ATTRIBUTE       iphop                                   118     string

# SIP Attributes
ATTRIBUTE       call-id                                 141     string
ATTRIBUTE       session-protocol                        142     string
ATTRIBUTE       method                                  143     string
ATTRIBUTE       prev-hop-via                            144     string
ATTRIBUTE       prev-hop-ip                             145     string
ATTRIBUTE       incoming-req-uri                        146     string
ATTRIBUTE       outgoing-req-uri                        147     string
ATTRIBUTE       next-hop-ip                             148     string
ATTRIBUTE       next-hop-dn                             149     string
ATTRIBUTE       sip-hdr                                 150     string

#
#       Extra attributes sent by the Cisco, if you configure
#       "radius-server vsa accounting" (requires IOS11.2+).
#
ATTRIBUTE       Cisco-Multilink-ID                      187     integer
ATTRIBUTE       Cisco-Num-In-Multilink                  188     integer
ATTRIBUTE       Cisco-Pre-Input-Octets                  190     integer
ATTRIBUTE       Cisco-Pre-Output-Octets                 191     integer
ATTRIBUTE       Cisco-Pre-Input-Packets                 192     integer
ATTRIBUTE       Cisco-Pre-Output-Packets                193     integer
ATTRIBUTE       Cisco-Maximum-Time                      194     integer
ATTRIBUTE       Cisco-Disconnect-Cause                  195     integer
ATTRIBUTE       Cisco-Data-Rate                         197     integer
ATTRIBUTE       Cisco-PreSession-Time                   198     integer
ATTRIBUTE       Cisco-PW-Lifetime                       208     integer
ATTRIBUTE       Cisco-IP-Direct                         209     integer
ATTRIBUTE       Cisco-PPP-VJ-Slot-Comp                  210     integer
ATTRIBUTE       Cisco-PPP-Async-Map                     212     integer
ATTRIBUTE       Cisco-IP-Pool-Definition                217     string
ATTRIBUTE       Cisco-Assign-IP-Pool                    218     integer
ATTRIBUTE       Cisco-Route-IP                          228     integer
ATTRIBUTE       Cisco-Link-Compression                  233     integer
ATTRIBUTE       Cisco-Target-Util                       234     integer
ATTRIBUTE       Cisco-Maximum-Channels                  235     integer
ATTRIBUTE       Cisco-Data-Filter                       242     integer
ATTRIBUTE       Cisco-Call-Filter                       243     integer
ATTRIBUTE       Cisco-Idle-Limit                        244     integer
ATTRIBUTE       Cisco-Account-Info                      250     string
ATTRIBUTE       Cisco-Service-Info                      251     string
ATTRIBUTE       Cisco-Command-Code                      252     string
ATTRIBUTE       Cisco-Control-Info                      253     string
ATTRIBUTE       Cisco-Xmit-Rate                         255     integer

VALUE   Cisco-Disconnect-Cause          Unknown                 2
VALUE   Cisco-Disconnect-Cause          CLID-Authentication-Failure 4
VALUE   Cisco-Disconnect-Cause          No-Carrier              10
VALUE   Cisco-Disconnect-Cause          Lost-Carrier            11
VALUE   Cisco-Disconnect-Cause          No-Detected-Result-Codes 12
VALUE   Cisco-Disconnect-Cause          User-Ends-Session       20
VALUE   Cisco-Disconnect-Cause          Idle-Timeout            21
VALUE   Cisco-Disconnect-Cause          Exit-Telnet-Session     22
VALUE   Cisco-Disconnect-Cause          No-Remote-IP-Addr       23
VALUE   Cisco-Disconnect-Cause          Exit-Raw-TCP            24
VALUE   Cisco-Disconnect-Cause          Password-Fail           25
VALUE   Cisco-Disconnect-Cause          Raw-TCP-Disabled        26
VALUE   Cisco-Disconnect-Cause          Control-C-Detected      27
VALUE   Cisco-Disconnect-Cause          EXEC-Program-Destroyed  28
VALUE   Cisco-Disconnect-Cause          Timeout-PPP-LCP         40
VALUE   Cisco-Disconnect-Cause          Failed-PPP-LCP-Negotiation 41
VALUE   Cisco-Disconnect-Cause          Failed-PPP-PAP-Auth-Fail 42
VALUE   Cisco-Disconnect-Cause          Failed-PPP-CHAP-Auth    43
VALUE   Cisco-Disconnect-Cause          Failed-PPP-Remote-Auth  44
VALUE   Cisco-Disconnect-Cause          PPP-Remote-Terminate    45
VALUE   Cisco-Disconnect-Cause          PPP-Closed-Event        46
VALUE   Cisco-Disconnect-Cause          Session-Timeout         100
VALUE   Cisco-Disconnect-Cause          Session-Failed-Security 101
VALUE   Cisco-Disconnect-Cause          Session-End-Callback    102
VALUE   Cisco-Disconnect-Cause          Invalid-Protocol        120

END-VENDOR      Cisco

Далее, будем формировать уникальный ID звнока в виде MD5 хэша на основании атрибута h323-incoming-conf-id:

acct_unique {
       key = "h323-incoming-conf-id"
}

Однозначние сопоставление IP-шной и TDM-ной частей (legs) VoIP-звонка возможно по полю AcctUniqueId таблицы radacct — оно будет у них одинаковым.

Далее, указываем, что перед аккаунтингом следует данные преобразовать (с использованием словарей):

preacct {
     preprocess
     acct_unique
}

Теперь в /usr/local/etc/raddb/sql.conf мы можем использовать полученные нами данные, которые содержатся в переменных, которые, в свою очередь, определяются в словаре (/usr/local/share/freeradius/dictionary.cisco):

%{h323-remote-address} — в этой переменной содержится IP, с которого/на который был звонок.

Все бы хорошо, но у атрибута iphop есть одна тонкость — он может содержать множественные значения, например:

iphop=count:2
iphop=hop1:192.168.68.4
iphop=hop2:10.10.255.7

и если в sql.conf использовать переменную %{iphop}, то в нее будет попадать только первая строка iphop=count.

Это решаемая проблема. Если атрибут содержит множественные значения, то к ним возможно обращаться как к массиву.

В нашем примере:

  • %{iphop[0]} — будет содержать значение «count:2»
  • %{iphop[1]} — будет содержаться «hop1:192.168.68.4»
  • %{iphop[2]} — будет «iphop=hop2:10.10.255.7»

Добавив в таблицу radacct поля:

  • remote-address
  • hopcount
  • hop1
  • hop2

можно добавить их в SQL запрос в sql.conf:

accounting_stop_query = "UPDATE ${acct_table2} SET AcctStopTime = '%S', \
AcctSessionTime = '%{Acct-Session-Time}', \
AcctInputOctets = '%{Acct-Input-Octets}', \
AcctOutputOctets = '%{Acct-Output-Octets}', \
AcctTerminateCause = '%{h323-disconnect-cause}', \
AcctStopDelay = '%{Acct-Delay-Time}', \
ConnectInfo_stop ='%{Connect-Info}', \
`remote-address`='%{h323-remote-address}', \
`hopcount`='%{iphop[0]}', \
`hop1`='%{iphop[1]}', \
`hop2`='%{iphop[2]}' \
WHERE AcctSessionId = '%{Acct-Session-Id}' \
AND UserName = '%{SQL-User-Name}' \
AND NASIPAddress = '%{NAS-IP-Address}'"

По итогу таблица radacct выглядит так:

CREATE TABLE IF NOT EXISTS `radacct` (
  `RadAcctId` bigint(21) NOT NULL auto_increment,
  `AcctSessionId` varchar(32) NOT NULL default '',
  `AcctUniqueId` varchar(32) NOT NULL default '',
  `UserName` varchar(64) NOT NULL default '',
  `Realm` varchar(64) default '',
  `NASIPAddress` varchar(15) NOT NULL default '',
  `NASPortId` varchar(15) default NULL,
  `NASPortType` varchar(32) default NULL,
  `AcctStartTime` datetime NOT NULL default '0000-00-00 00:00:00',
  `AcctStopTime` datetime NOT NULL default '0000-00-00 00:00:00',
  `AcctSessionTime` int(12) default NULL,
  `AcctAuthentic` varchar(32) default NULL,
  `ConnectInfo_start` varchar(50) default NULL,
  `ConnectInfo_stop` varchar(50) default NULL,
  `AcctInputOctets` bigint(12) default NULL,
  `AcctOutputOctets` bigint(12) default NULL,
  `CalledStationId` varchar(50) NOT NULL default '',
  `CallingStationId` varchar(50) NOT NULL default '',
  `AcctTerminateCause` varchar(32) NOT NULL default '',
  `ServiceType` varchar(32) default NULL,
  `FramedProtocol` varchar(32) default NULL,
  `FramedIPAddress` varchar(15) NOT NULL default '',
  `AcctStartDelay` int(12) default NULL,
  `AcctStopDelay` int(12) default NULL,
  `proc` smallint(1) NOT NULL default '0',
  `remote-address` varchar(15) NOT NULL default '',
  `hopcount` varchar(16) default NULL,
  `hop1` varchar(20) default NULL,
  `hop2` varchar(20) default NULL,
  PRIMARY KEY  (`RadAcctId`),
  KEY `UserName` (`UserName`),
  KEY `FramedIPAddress` (`FramedIPAddress`),
  KEY `AcctSessionId` (`AcctSessionId`),
  KEY `AcctUniqueId` (`AcctUniqueId`),
  KEY `AcctStartTime` (`AcctStartTime`),
  KEY `AcctStopTime` (`AcctStopTime`),
  KEY `NASIPAddress` (`NASIPAddress`),
  KEY `import` (`NASPortType`,`AcctSessionTime`,`AcctStartTime`),
  KEY `proc` (`NASPortType`,`proc`,`AcctSessionTime`)
) TYPE=MyISAM;

Таким образом мы получаем, что в sql складывается информация о совершенных VoIP звонках и с каких IP-адресов они совершены.

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

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

Возможности создаваемой системы:

  • Отправка факсов с windows машин в локальных доверенных сетях
  • Отправка факсов с почты
  • Отправка факсов с web-интерфейса
  • Уведомление о состоянии отправленных факсов по почте/сообщения по сети индивидуальному/групповому пользователю
  • Прием факсов и распечатка на принтере
  • Доступность списка полученных факсов через сетевую директорию (в нашем случае samba)
  • Доступность с писка полученных факсов через web-интерфейс
  • Здесь сильно нехвататет:

  • dialup доступ к системе на случай аварии
  • Использования голосовых функций модема при отправке и приеме, т.к. у меня просто нет такого модема
  • Установлена Freebsd 7.3-stable, hylafax-6.0.4_1.
    Для работы с почтой:

    • Любой MTA (я буду использовать exim)

    Для работы в виндовой сетке

    • samba
    • cups/lpr
    • /usr/ports/print/hplip — драйвера для моего HP принтера

    Для работы через веб интерфейс:

    • apache22-itk
    • php5
    • mysql
    • phpmyadmin
    • cd /usr/ports/databases/pear-MDB2_Driver_mysql
    • pear-1.9.0
    • PHP PEAR 5 including MDB2_driver_mysql, Mail and Mail_Mime
    • PECL FileInfo
    • PHP mbstring — for improved UTF-8 sorting support (optional)
    • PHP MySQL 5
    • MySQL server 4.1.12 or better (see Important Notes below)
    • ImageMagick
    • ghostscript
    • libtiff
    • netpbm-devel
    • libungif
    • sudo

    Характеристики железа, на котором все это работает:

    1. pentium3-1Ghz/512Mb/40Gb hdd
    2. 4 модема courier
    3. МУльтикарта mosChip nm9835

    У меня установлена мультикарта для работы 2 модемов и можно подгрузить puc модуль, но модемы у меня упорно не виделись, так что тем, кто использует мультикарты, надо собрать ядро с device puc.

    Все поставлено, можно начинать настройку.

    Настройка hylafax
    Команды:

    • faxsetup — сделает общие настройки факс- сервера.
    • faxaddmodem — позволит добавить модем

    Файлы (все конфиги находятся в /var/spool/hylafax/etc):

  • FaxDispatch
    • FILETYPE=tif;
      SENDTO=mail@your-server.ru;
  • FaxNotify
    • NOTIFY_FAXMASTER=yes;
      RETURNFILETYPE=tif
  • В файл конфига модема:
    • FaxrcvdCmd: «bin/faxrcvd.php»
      DynamicConfig: «bin/dynconf.php»
      NotifyCmd: «bin/notify.php «
  • В файл /etc/ttys
    • cuad0  «/usr/local/sbin/faxgetty»  unknown on insecure
      ln -s /var/spool/hylafax/bin/ps2fax /var/spool/hylafax/bin/ps2fax.gs
      ln -s /var/spool/hylafax/bin/pdf2fax /var/spool/hylafax/bin/pdf2fax.gs

    —————————————————————————————————————
    Настроим веб сервер.

    Т.к. сервер будет исполнять системные команды, я предпочел использовать apache22 с патчем itk. Это позволит мне ограничить работу виртуального хоста в системе действиями от непривелигированного пользователя uucp, например. Для активации патча необходимо сделать:
    # sudo make WITH_MPM=itk -C /usr/ports/www/apache22/

    Этот рецепт можно также использовать на собственном виртуальном хостинге, но следует учитывать, что apache22-itk работает примерно в 5 раз медленнее простого апача, так что может это кому-то пойдет только во вред. Мне нет, у меня нет больших нагрузок и я решил попробовать что-то необычное

    ServerAdmin it@your-server.ru
    DocumentRoot «/usr/local/www/avantfax»
    ServerName fax.your-server.ru
    ErrorLog «/var/log/fax-error_log»
    CustomLog «/var/log/fax-access_log» common
    # Включилась паранойя, и я изменил все запросы с http на https
    RewriteEngine on
    RewriteCond %{SERVER_PORT} ^80$
    RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
    # Настроим от чьего имени будет работать этот виратуальный хост

    AssignUserId uucp uucp

    # Тут настроим работу php
    php_admin_value upload_tmp_dir /usr/local/www/avantfax/tmp
    php_admin_flag safe_mode off # Обязательно, иначе не будет работать avantfax, указываю не в глобальной конфигурации, чтобы остальные вируальные хосты работали в сейвмоде
    php_admin_flag display_errors on # Посмотрим будут ли ошибки, потом можно отключить
    php_admin_value doc_root /usr/local/www/avantfax
    php_admin_value user_dir «www»
    php_admin_value open_basedir «/usr/local/www/avantfax:/usr/local/share/pear:/var/spool/hylafax:/usr/local/bin» # Разрешим этому вируальному хосту испольнять код-пхп в определенных директориях.
    php_admin_value session.save_path /usr/local/www/avantfax/tmp
    php_admin_value memory_limit «64M»
    php_flag max_execution_time 60

    —————————————————————————————————————
    Делаем веб морду

    0. Качаем архив с скриптами http://downloads.sourceforge.net/project/avantfax/avantfax-3.2.2.tgz?use_mirror=ignum

    1. Этот скрипт написан для разных систем, поэтому сперва изменим пути в нескольких скриптах, или создадим символические ссылки.

    Я предпочитаю сменить пути в файлах:
    avantfax/includes/faxrcvd.php, notify.php, remold.php, faxcover.php, phb.php

    Создадим базу вебморды нашей факс машины
    # mysql -uroot -p < create_user.sql
    # mysql -uavantfax -ppassword avantfax < create_tables.sql

    2. Приведем avantfax/includes/local_config.php в соответстви с нашей системой:
    cp /usr/local/www/avantfax/avantfax/includes/local_config-example.php /usr/local/www/avantfax/avantfax/includes/local_config.php

    Опишу необходимые настройки в local_config.php:

  • Ищем $BINARYDIR = ‘/usr/bin’;, меняем на $BINARYDIR = ‘/usr/local/bin’;
  • $dft_config_lang поставим ru вместо en
  • $HYLAFAX_PREFIX
  • 3. # sudo chmod -R 777 tmp faxes templates/admin_theme/templates_c и templates/main_theme/templates_c

    4. Сделаем символическую ссылки на наши скрипты:

  • # ln -s /usr/local/www/avantfax/includes/faxrcvd.php /var/spool/hylafax/bin/faxrcvd.php
  • # ln -s /usr/local/www/avantfax/includes/dynconf.php /var/spool/hylafax/bin/dynconf.php
  • # ln -s /usr/local/www/avantfax/includes/notify.php /var/spool/hylafax/bin/notify.php
  • 5. Отредактируем конфигурацию модема (первый модем в моей системе /dev/cuad0):
    # vi /var/spool/hylafax/etc/config.cuad0

      FaxrcvdCmd: bin/faxrcvd.php
      DynamicConfig: bin/dynconf.php
      UseJobTSI: true

    6. # vi /var/spool/hylafax/etc/config

      NotifyCmd: bin/notify.php

    7. Заменим стандарный faxcover на авантфаксовый:

      # mv /usr/bin/faxcover /usr/bin/faxcover.old
      # ln -s /usr/local/www/avantfax/avantfax/includes/faxcover.php /usr/local/bin/faxcover

    8. Настроим управление очередью факса от имени нашего веб сервера (добавим аккаунт в фаил hosts.faxd uucp). Именно поэтому я использую апач c патчем itk, с ним легко можно ограничить действия виртуального хоста в системе. Это нужно для того, чтобы администратор системы был юзер hylafax, от имени которого работает вся наша система:

      # /usr/sbin/faxadduser -a my_password apache
      # /usr/sbin/faxdeluser localhost
      # /usr/sbin/faxdeluser 127.0.0.1
      # echo 127.0.0.1 >> /var/spool/hylafax/etc/hosts.hfaxd

    Помните , что указанный пароль используется в файле local_config.php as $FAXRMPWD.

    9. Добавим два скрипта от рута в крон (/etc/crontab). Один нужен для создания адресной книги, а второй удаляет все временные файлы, которые остают после заливки файлов юезрами в факс-машину через веб морду:

      0 * * * * /var/www/avantfax/includes/phb.php
      0 0 * * * /var/www/avantfax/includes/avantfaxcron.php -t 2

    10. Настроим возможность выполнения некоторых команд в системе от имени root, но с правами юзера hylafax (/usr/local/etc/sudoers):
    hylafax ALL = NOPASSWD: /sbin/reboot, /sbin/halt, /usr/local/sbin/faxdeluser, /usr/local/sbin/faxadduser -u * -p * *

    11. Теперь можно перезапустить машину для проверки, что все само стартует в случае перегрузки и пробовать войти в вебинтерфейс avantfax:

    http://fax.your-server.ru/admin/

    Если все в порядке, то появится запрос на ввод логина/пароля.

    ПО-умолчанию: admin/password. При первом входе будет предложено сменить пароль на что-то иное.

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

    Например:

    • device: cuad0
    • alias: dep1
    • contact: faxdep1@your-server.ru

    Теперь каждый факс, пришедший на факс cuad0, будет отправлен в pdf на адрес faxdep1@your-server.ru.

    Настроить как будет рассылать MTA эти письма, вы сами решайте. У нас пересылается на секретаря. Остальные модемы настраиваются аналогично.

    На всякий случай, импортировать уже принятые факсы в вебморду можно следующим образом:

      # cd /var/spool/hylafax; for i in `ls recvq/*`; do bin/faxrcvd.php $i ttyS0; done

    Для импорта отправленных:

      # cd /var/spool/hylafax; for i in `ls doneq/q*`; do bin/notify.php $i done :30; done

    —————————————————————————————————————
    Настройка самба для расшаривания папки с принятыми факсами:

    [Fax_Rec]
    comment = Incoming Faxes
    browseable = yes
    writable = yes
    path = /var/spool/hylafax/recvq
    public = yes

    Зная умения пользователей, подстрахуемся сетевой корзиной:
    vfs objects = recycle full_audit
    recycle:repository = /usr/home/data/fax/.killed
    recycle:keeptree = yes
    recycle:versions = yes

    —————————————————————————————————————
    Автоматическое распечатывание cups принятых факсов.

    Установим и настроим cups.
    Я поставил вот такие пакеты: cups-base-1.4.2_4, cups-client-1.4.2_4, cups-image-1.4.2_4, cups-pstoraster-8.15.4_5, cups-samba-6.0_3, cups-smb-backend-1.0_3.
    Последние 2 нужны были для публикации притеров посредством самбы. Некоторые из отправляющих факсы с клиента программ работают через самба-принтер. Так что возможно многим оно и не понадобится. Далее установим hplip-2.8.2_7 — это драйвера для принтеров HP.

    Установка закончена, теперь настраиваем:

    В файле /usr/local/etc/cups/cupsd.conf делаем следующие изменения:

      Listen 127.0.0.1:631
      Listen :631

    Остальное я не правил, меня устроил дефолтный конфиг. Теперь добавим принтер:

      1. http://local_address:631/
      2. Нажимаем на Printers.
      3. Add Printer. Вводим имя root и его пароль.
      4. Name: имя вашего принтера (название может быть любое). Все остальное не заполняем. Continue.
      6. Не забудьте сделать печать тестовой страницы. Если увидели картинку, то все в порядке.
      7. Далее я долго мучался, почему мой принтер не печататет и нашел ответ. Надо сделать симлинки от старого lpr:
      # cd /usr/bin
      # mv lp lp.bak
      # mv lpq lpq.bak
      # mv lpr lpr.bak
      # mv lprm lprm.bak
      # ln -s /usr/local/bin/lp /usr/bin/lp
      # ln -s /usr/local/bin/lpq /usr/bin/lpq
      # ln -s /usr/local/bin/lpr /usr/bin/lpr
      # ln -s /usr/local/bin/lprm /usr/bin/lprm
      У меня возникла проблема с принтером принтером HP 2055dn, его драйверов не было, поэтому я воспользовался драйвером входящим в состав порта hplip-2.8.2_7 и положил его в /usr/local/etc/cups/ppd/HP_2055.ppd. Больше проблем не было,я и не настраивал больше ничего тут. Таким образом идем далее..

      Для автоматического распечатывания пришедших факсов используйте код в файле

      # /usr/local/bin/tiff2ps -1 $1 | /usr/bin/lpr

    Ваш принтер должен быть PostScript своместимый. Можно указать явно размер бумаги, это необходимо для некоторых типов принтеров:

      # /usr/bin/tiff2ps -1 -h 11.1082 -w 7.8543 $1 | /usr/bin/lpr

    Мы используем для получения аванфаксовый файл faxrcvd.php поэтому в конфиге надо выставить

      $PRINTFAXRCVD = true;
      $PRINTFAX2PS  = ‘/usr//local/bin/fax2ps’;

    —————————————————————————————————————
    Рассмотрим работу с несколькими модемами и принтерами.

    Тут все очень просто. Т.к. наша система плотно связана с avantfax, то и настройки мы должны проводить в неё.Идем в админку http://fax.your-server.ru/admin/. Тут Заходим в пункт «параметры модемов» и заполняем: название модем, на какой принтер печатать, какой номер. Собственно после этого у вас должно заработать как надо.
    —————————————————————————————————————
    Что делать тем, кто не хочет установить avantfax?

    Вполне законное желание, во многих компания к этому уже пришли. Пропустите все изменения, которые связаны с avantfax.
    Далее вам необходимо поместить примерно такой код в FaxDispatch:

      case «$DEVICE» in cuad0)
      SENDTO=name@your-server.ru
      PRINTER=lj2015
      ;;
      esac

    —————————————————————————————————————
    Отправка факсов с рабочих мест:
    Скачаем вот это http://prdownloads.sourceforge.net/winprinthylafax/WinprintHylaFAX-1.2.9.exe?download, и несколько автоматизируем процесс настройки клиентов таким reg-файлом:

      reg add «HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Winprint Hylafax\Ports\HFAX1:» /v Username /t reg_sz /d %username% /f
      reg add «HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Winprint Hylafax\Ports\HFAX1:» /v Password /t reg_sz /d PassWord /f
      reg add «HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Winprint Hylafax\Ports\HFAX1:» /v DefaultEmail /t reg_sz /d %username%@your-server.ru /f
      reg add «HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Winprint Hylafax\Ports\HFAX1:» /v AddressBookPath /t reg_sz /d %userprofile% /f

    Этот кусок реестра форточек позволяет настроить параметры winprint, для настройки уведомлений и авторизированного доступа к системе. Теперь пользователь может отправить факс простым распечатыванием на специальный факсовый принтер. Впрочем, можно обойти все машины и настроить факсовый притер вручную.
    —————————————————————————————————————
    Работа с почтовым сервером

    Мозга до sendmail мне никогда не хватало, поэтому в /etc/mail/mailer.conf:

      sendmail /usr/local/sbin/exim
      send-mail /usr/local/sbin/exim
      mailq /usr/local/sbin/exim -bp
      newaliases /usr/local/sbin/exim -bi
      hoststat /usr/local/sbin/exim
      purgestat /usr/local/sbin/exim

    Транспорт
    faxmail:
    driver = accept
    condition = ${if eq{$local_part}{fax}{yes}{no}}
    transport = faxmail
    no_more

    faxmail:
    driver = pipe
    command =»/usr/local/bin/faxmail -n -t done -d $h_subject $sender_address»

    Теперь при посылке почты на fax@your-server.ru ексим выполнит отправку факса. Соответвенно, если у вас почтовый сервер и сервер с факсами разные, то на основном сервере надо настроить пересылку почты на смтп нашей факсмашины.

    Дальше больше и интереснее.
    Теперь рассмотрим работу hylafax с asterisk и iaxmodem. Как настраивать астреиск, тема другой статьи, поэтому я предполагаю, что он уже настроен у вас.
    Итак, устанавливаем /usr/ports/net/iaxmodem. Создаем конфиг программного модема /usr/local/etc/iaxmodem/ttyIAX0:
    mode 660
    port 4570
    refresh 300
    server 127.0.0.1
    peername iaxmodem0
    secret parolka
    cidname subnets.ru
    cidnumber 203
    codec alaw

    В /etc/rc.conf для автостарта:
    iaxmodem_enable=»YES»

    Командой faxaddmodex ttyIAX0 добавим новый модем и настроим его. В итоге получим конфиг модема IAX0 для hylafax.

    Настроим iax.conf для астериска:
    [general]
    bindport=4569
    bindaddr=127.0.0.1
    bandwidth=low
    disallow=lpc10
    jitterbuffer=no
    forcejitterbuffer=no
    autokill=yes

    [iaxmodem0]
    type=friend
    username=iaxmodem0
    context=office
    secret=parolka
    host=127.0.0.1
    port=4570
    qualify=yes
    disallow=all
    allow=ulaw
    trunk=no

    Ну и sip.conf:
    exten => 203,1,Set(LANGUAGE()=ru)
    exten => 203,n,Dial(IAX2/iaxmodem0/${EXTEN},10,r)

    Несколько советов по управлению факс-машиной:

      Очистка факс машины:
      # cd /var/spool/hylafax/
      # rm archive/* docq/* log/* recvq/* sendq/* tmp/*

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

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