четверг, 15 октября 2020 г.

Freeswitch первоначальная настройка.

 Freeswitch установлен из репозитория. Как известно, Freeswitch имеет свой репозиторий, а не как Asterisk. Да, я собирал из исходников Freeswitch, но видимо что-то пошло не так, видимо из-за отсутствия опыта, по этому я переставил Freeswitch из репозитория.

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

Делаем:

cd /etc/freeswitch/directory

mv default.xml default.xml.orig

nano default.xml.orig

здесь меняем:

<X-PRE-PROCESS cmd="include" data="default/*.xml"/>

на 

<X-PRE-PROCESS cmd="include" data="test/*.xml"/> 

при выходе из nano сохраняем файл под именем test.xml.

Находясь в каталоге /etc/freeswitch/directory создаем каталог test, в 

него копируем два-три профиля телефонных аппаратов (каждый файл - аппарат), и файл default.xml из каталога default. Каталог default я на всякий случай переименовал переименовал.

mv default default.orig

Открываем профили учеток телефонных аппаратов:

nano  /etc/freeswitch/directory/test/100X.xml

Приводим в соответствие контекст:

<variable name="user_context" value="test"/>

На всякий выкладываю листинг:

cat /etc/freeswitch/directory/test/1000.xml

<include>

<user id="1000">

    <params>

      <param name="password" value="1000"/>

      <param name="vm-password" value="1000"/>

    </params>

    <variables>

      <variable name="toll_allow" value="domestic,international,local"/>

      <variable name="accountcode" value="1000"/>

      <variable name="user_context" value="test"/>

      <variable name="effective_caller_id_name" value="1000"/>

      <variable name="effective_caller_id_number" value="1000"/>

      <variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>

      <variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>

      <variable name="callgroup" value="techsupport"/>

    </variables>

  </user>

</include>


Делаем на всякий копию файла 

mv /etc/freeswitch/autoload_configs/acl.conf.xml /etc/freeswitch/autoload_configs/acl.conf.xml.orig

Открываем /etc/freeswitch/autoload_configs/acl.conf.xml, и приводим его к такому виду:

<configuration name="acl.conf" description="Network Lists">

 <network-lists>

<list name="lan" default="allow">

<node type="allow" cidr="192.168.11.0/26"/>

<node type="allow" cidr="192.168.11.9/32"/>

</list>

<list name="domains" default="deny">

</list>

</network-lists>

</configuration>

192.168.11.0/26 моя подсеть, 192.168.11.9/32 хост с freeswitch.

Открываем файл /etc/freeswitch/vars.xml (так же предварительно можно скопировать оригинал, и переименовать). Здесь добавляем:

звуки

<X-PRE-PROCESS cmd="set" data="default_language=ru"/>

общий пароль для аппаратов

<X-PRE-PROCESS cmd="set" data="default_password=1000"/>

IP сервера для sip и rtp:

<X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=192.168.11.9"/>
<X-PRE-PROCESS cmd="stun-set" data="external_sip_ip=192.168.11.9"/>

Дефолтное удаляем или комментим
<X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=stun:stun.freeswitch.org"/>
<X-PRE-PROCESS cmd="stun-set" data="external_sip_ip=stun:stun.freeswitch.org"/>

Далее идем в /etc/freeswitch/sip_profiles/external, и здесь создаем файлы с учетками своих транков, у меня их два. Привожу как пример, вам самим (с помощью провайдера sip) нужно будет их настроить. Мои учетки транков:
cat sip1.xml
<include>
    <gateway name="sip1">
        <param name="username" value="1111111"/>
        <param name="password" value="XXXXXXXXX"/>
        <param name="realm" value="sip1.ru"/>
        <param name="from-user" value="1111111"/>
        <param name="from-domain" value="sip1.ru"/>
        <param name="proxy" value="sip1.ru"/>
        <param name="expire-seconds" value="300"/>
        <param name="register" value="true"/>
        <param name="register-transport" value="udp"/>
        <param name="context" value="sip1"/>
    </gateway>
</include>

cat sip2.xml
<include>
    <gateway name="sip2">
        <param name="username" value="2222222"/>
        <param name="password" value="XXXXXXXXX"/>
        <param name="realm" value="sip2.ru"/>
        <param name="from-user" value="2222222"/>
        <param name="from-domain" value="sip2.ru"/>
        <param name="proxy" value="sip2.ru"/>
        <param name="expire-seconds" value="300"/>
        <param name="register" value="true"/>
        <param name="register-transport" value="udp"/>
        <param name="context" value="sip2"/>
    </gateway>
</include>

Теперь идем в /etc/freeswitch/dialplan и создаем тут файл test.xml
Обращаю внимание, что входящие вызовы тут не описаны, только исходящие.
Мой text.xml - диалплан.
<?xml version="1.0" encoding="UTF-8"?>
<include>
    <context name="test">
        <extension name="unloop">
            <condition field="$${unroll_loops}" expression="^true$" />
            <condition field="${sip_looped_call}" expression="^true$" >
                <action application="deflect" data="${destination_number}" />
            </condition>
        </extension>
      <extension name="out-sip1">
            <condition field="destination_number" expression="^(8\d{10})$">
                <action application="bridge" data="sofia/gateway/sip1/$1" />
                <action application="hangup"/>
            </condition>
        </extension>
        <extension name="out-sip2">
               <condition field="destination_number" expression="^(7\d{10})$">
               <action application="bridge" data="sofia/gateway/sip2/$1" />
                <action application="hangup" />
            </condition>
        </extension>
       <extension name="local">
            <condition field="destination_number" expression="^\d{4}$">
                <action application="answer" />
                <!-- <action application="sleep" data="1000" /> -->
                <action application="bridge" data="user/${destination_number}@$${domain}" />
                <action application="hangup" />
            </condition>
            </extension>
    </context>
</include>

Обратите внимание, на то, что выделено красным - вызов с первой цифры 8 и затем 10 цифр, и вызов пойдет через sip1, вызов с первой цифры 7 и затем 10 цифр, и вызов пойдет через sip2.

Можно настроить аппараты или софтфоны, перезапустить Freeswitch и попробовать позвонить.
Вход в консоль: FS - fs_cli
Статус транков: sofia status gateways
Статус транка: sofia status gateway sip

Если вы работали с Asterisk полезно взглянуть сюда
Я не претендую на абсолютную правильность написанного, т.к. основная цель данного текста зафиксировать свой опыт по работе с новой платформой. С данным конфигом у меня все работало - звонили внутренние телефоны, уходили звонки на внешние транки. Если будут вопросы - пишите, постараюсь ответить.



четверг, 29 августа 2019 г.

cisco l2tp ipsec vpn, разграничения для клиентов по подсетям

В офисе завалялся Cisco router 2611, это модель начала 2000 годов, решили сделать из него VPN gate. Скорее всего конфиг подойдет и для других Cisco. На нашей 2611 System image file is "flash:c2600-advsecurityk9-mz.124-18.bin", на всякий случай.
Суть: пользователь i_ivanov подключаясь получает адрес из пула VPN-POOL-1,
пользователь n_romanov подключаясь получает адрес из пула VPN-POOL-2.

Для этих пулов разные права доступа - см. ip access-list extended office_and_tech.
vpn-gate#sh run
Building configuration...

Current configuration : 3734 bytes
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
!
hostname vpn-gate
!
boot-start-marker
boot-end-marker
!
logging buffered 4096 debugging
enable secret 5 $1$Q/p7$AFkWerymo9xG1/h.g/NdB3.
!
aaa new-model
!
!
aaa authentication ppp VPDN_AUTH local
aaa authorization network VPDN_AUTH local
!
aaa attribute list ATTR-LIST-2
 attribute type addr-pool "VPN-POOL-2" service ppp protocol ip
!
aaa attribute list ATTR-LIST-1
 attribute type addr-pool "VPN-POOL-1" service ppp protocol ip
!
aaa session-id common
no network-clock-participate slot 1
no network-clock-participate wic 0
ip cef
!
!
ip auth-proxy max-nodata-conns 3
ip admission max-nodata-conns 3
!
!
ip domain name domain.name.local
vpdn enable
!
vpdn-group L2TP
! Default L2TP VPDN group
 description Default L2TP VPDN group
 accept-dialin
  protocol l2tp
  virtual-template 1
 no l2tp tunnel authentication
!
vpdn-group L2TP2
 description Default L2TP2 VPDN group
 accept-dialin
  protocol l2tp
  virtual-template 2
 no l2tp tunnel authentication
!
!
!
!
!
username admin privilege 15 secret 5 $1$N5A.$2H.pEryBrQwmTFiAD93/
username i_ivanov password 7 1133101712051F5A53333E
username i_ivanov aaa attribute list ATTR-LIST-1
username j_johnson password 7 1423171915087205147D040725
username i_ivanov aaa attribute list ATTR-LIST-2
username v_lenin password 7 10400810161E17532D
username v_lenin aaa attribute list ATTR-LIST-1
username l_trotskiy password 7 09674F1B1808151D075F500A
username l_trotskiy aaa attribute list ATTR-LIST-1
username n_romanov password 7 013B14100C535502356C
username n_romanov aaa attribute list ATTR-LIST-2
username queen_victoria password 7 09494B1A1C0C0F1B0E
username queen_victoria aaa attribute list ATTR-LIST-1
archive
 log config
  logging enable
  hidekeys
 path tftp://192.168.2.1/cisco_2611/cisco_2611
 write-memory
 time-period 10080
!
!
controller E1 0/0
!
ip ssh version 2
!
!
crypto isakmp policy 1
 encr 3des
 authentication pre-share
 group 2
crypto isakmp key YOUR_SECRET_KEY address 0.0.0.0 0.0.0.0
!
!
crypto ipsec transform-set L2TP-Set2 esp-3des esp-sha-hmac
 mode transport
!
crypto dynamic-map dyn-map 10
 set nat demux
 set transform-set L2TP-Set2
!
!
crypto map outside_map 65535 ipsec-isakmp dynamic dyn-map
!
!
!
interface Loopback1
 description loopback for IPsec-pool
 ip address 192.168.19.1 255.255.255.255
!
interface Loopback2
 description loopback for IPsec-pool2
 ip address 192.168.19.65 255.255.255.255
!
interface FastEthernet0/0
 ip address 8.8.8.8 255.255.255.252
 ip access-group office_and_tech out
 no ip route-cache cef
 duplex auto
 speed auto
 crypto map outside_map
!
interface FastEthernet0/1
 no ip address
 shutdown
 duplex auto
 speed auto
!
interface Virtual-Template1
 ip unnumbered Loopback1
 peer default ip address pool VPN-POOL-1
 ppp authentication ms-chap-v2 VPDN_AUTH
 ppp authorization VPDN_AUTH
!
interface Virtual-Template2
 ip unnumbered Loopback2
 peer default ip address pool VPN-POOL-2
 ppp authentication ms-chap-v2 VPDN_AUTH
 ppp authorization VPDN_AUTH
!
ip local pool VPN-POOL-1 192.168.19.5 192.168.19.62
ip local pool VPN-POOL-2 192.168.19.70 192.168.19.126
ip forward-protocol nd
ip route 0.0.0.0 0.0.0.0 8.8.8.1
!
no ip http server
no ip http secure-server
!
ip access-list extended office_and_tech
 permit ip host 8.8.8.8 any
 permit ip 192.168.19.0 0.0.0.255 172.16.0.0 0.15.255.255
 permit ip 192.168.19.0 0.0.0.63 192.168.0.0 0.0.255.255
!
access-list 23 permit 192.168.2.0 0.0.0.255
!
!
control-plane
!
!
!
!
line con 0
line aux 0
line vty 0 4
 access-class 23 in
 exec-timeout 60 0
 logging synchronous
 transport input ssh
 transport output ssh
!
!
end


вторник, 20 августа 2019 г.

Отправка писем с вложением из консоли. Mutt.

echo "Текст письма" | mutt -a "/path/to_file/attachment.txt" -s "subject of message" -- user@mail.com

Чтобы работало нужен настроенный MTA - ssmtp или sendmail, ну и собственно mutt.

вторник, 30 апреля 2019 г.

Asterisk запись разговоров

Можно так, все валить в одну кучу:
[ringroup_1]
exten => s,1,NoOp(<- Otdel klassnykh devchonok ->)
exten => s,n,Set(fname=${STRFTIME(${EPOCH},,%Y-%m-%d-%H-%M)}--${CALLERID(number)}--${EXTEN})
exten => s,n,MixMonitor(/home/records_call/${fname}.wav)
exten => s,n,Dial(SIP/001,60,${DIALOPTIONS}i)
exten => s,n,Hangup


А можно создавать каталоги с годом и месяцем в имени:
[ringroup_2]
exten => s,1,NoOp(<- Otdel khoroshikh rebyat ->)
exten => s,n,Set(DESTDIR=/home/records_call/${STRFTIME(${EPOCH},,%Y-%m)})
exten => s,n,System(mkdir -p ${DESTDIR})
exten => s,n,Set(fname=${STRFTIME(${EPOCH},,%Y-%m-%d-%H-%M)}--${CALLERID(number)}--${EXTEN})
exten => s,n,MixMonitor(${DESTDIR}/${fname}.wav)
exten => s,n,Dial(SIP/002,60,${DIALOPTIONS}i)
exten => s,n,Hangup

среда, 16 января 2019 г.

Назначение и удаление привилегий на коммутаторе Cisco 2960.

Добавить привилегии:
privilege interface level 4 shutdown
privilege interface level 4 switchport
privilege interface level 4 description
privilege configure level 4 interface
privilege exec level 4 vlan
privilege exec level 4 write memory
privilege exec level 4 write
privilege exec level 4 configure terminal
privilege exec level 4 configure
privilege exec level 4 show running-config
privilege exec level 4 show


Удалить имеющиеся привилегии можно так:
privilege exec reset configure
privilege exec reset vlan
privilege exec reset write
privilege exec reset show

privilege interface reset shutdown
privilege interface reset description
privilege interface reset switchport
privilege configure reset interface

четверг, 6 сентября 2018 г.

trunk порт c Cisco 2960 на ip-телефон Cisco

На порте:

interface GigabitEthernet1/0/4
 description trunk_port
 switchport trunk native vlan 15
 switchport trunk allowed vlan 15,116
 switchport mode trunk
 spanning-tree portfast

На телефоне:


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

<Enable_VLAN group="System/VLAN_Settings">Yes</Enable_VLAN>
<Enable_CDP group="System/VLAN_Settings">Yes</Enable_CDP>
<Enable_LLDP-MED group="System/VLAN_Settings">Yes</Enable_LLDP-MED>
<Network_Startup_Delay group="System/VLAN_Settings">3</Network_Startup_Delay>
<VLAN_ID group="System/VLAN_Settings">116</VLAN_ID>
<PC_Port_VLAN_Highest_Priority group="System/VLAN_Settings">No Limit</PC_Port_VLAN_Highest_Priority>
<Enable_PC_Port_VLAN_Tagging group="System/VLAN_Settings">No</Enable_PC_Port_VLAN_Tagging>
<PC_Port_VLAN_ID group="System/VLAN_Settings">1</PC_Port_VLAN_ID>