Настройка VoIP на устройствах cisco





Настройка VoIP на устройствах cisco

Доброго времени суток!!!

Ну что же, вот немного посмотрели и на MPLS. Кто еще не видел, можно посмотреть вот
тут и тут.
А сегодня, я хочу коснуться не менее интересной темы, а именно VoIP (Voice over IP). Иногда складывается ситуация, когда у вас несколько очень удаленных офисов (например, в другой стране) и политиками безопасности у вас нельзя использовать ни icq, ни Skype (тем более в свете последних событий :)), но есть необходимость живого общения с удаленными сотрудниками. Все время звонить по обычному (или сотовому) телефону дорого. Что же делать?
Кому стало интересно, добро пожаловать под кат…

Так вот, если у вас есть в наличии устройства cisco, поддерживающие VoIP, то решение проблемы лежит на поверхности :). Вам всего лишь остается скачать соответствующее ПО (а именно Cisco IP Communicator), установить его на компьютеры пользователей, немного настроить свое сетевое оборудование и вуаля :).
Как всегда, вдаваться в теорию не буду. Ее с лихвой можно найти на просторах всемирной паутины.
Для примера, я предлагаю попробовать организовать «телефонную» связь вот по такой схеме:


Итак, что мы имеем. Есть центральный офис, в котором расположен роутер (Central_Router) с поддержкой VoIP. Он подключен одним интерфейсом в локальную сеть, где имеется два vlan-а (Managers (Net_192.168.1.0/24) и Office (Net_192.168.2.0/24)). Соответственно, этот роутер является для них шлюзом по умолчанию. В этих vlan-ах находятся рабочие станции для проверки (Host_A и Host_B). На них установлен Cisco IP Communicator и заданы телефонные номера (№1001 и №2001 соответственно). Вторым концом роутер подключен к интернету.
Так же есть «очень» удаленный офис, в котором находится роутер Remote_Router. Он тоже поддерживает VoIP и у него есть два интерфейса (один для внутренней сети, один для интернета). Для удаленных пользователей есть выделенный vlan (Remote (Net_192.168.3.0/24)), в котором установлена станция для проверки Host_C с установленным Cisco IP Communicator и номером №3001, причем для этого пользователя организована двойная линия.
Для защиты нашего телефонного трафика при прохождении через интернет будем использовать GRE туннель. Это, конечно, проприетарный протокол, но он прост в настройке и, тем более, IPsec не поддерживает шифрование multicast. Для его организации используются Tunnel интерфейсы на роутерах (Tunnel0 (172.16.1.1) – на роутере Central_Router и Tunnel0 (172.16.1.2) – на роутере Remote_Router).
Одним из центральных «устройств» в телефонии cisco является Cisco Unified Communications Manager. Но он должен устанавливаться на отдельный сервер и стоит больших денег. Я предлагаю построить нашу «телефонную» сеть с помощью CME (Call Manager Express), который уже входит в состав IOS. Он имеет меньшее количество различных функций, но для небольшой компании вполне пригодится. Для задания IP-адреса, на который будут обращаться наши Cisco – телефоны (Cisco IP Communicator) будем использовать loopback интерфейсы (l0 (10.10.10.10) – на роутере Central_Router и l0 (20.20.20.20) – на роутере Remote_Router). Конечно, best practice считается создание отдельного vlan-а для телефонного трафика (vlan VOICE например), подключения в него IP телефонов cisco и так далее. Но так как у нас нет физических IP телефонов cisco, то и создавать этот vlan мы не будем.
Выход в интернет осуществляется, как обычно, через NAT.
    Для реализации схемы в среде GNS3 я использовал следующее:
  • 1. Center_Router, Internet router и Remote_Router – cisco 3640 с IOS версии c3640-jk9s-mz.124-16a;
  • 2. Switch_1 и Switch_2 – cisco с IOS версии c3745-advipservicesk9-mz[1].124-15.T6;
  • 3. Host_1, Host_2 и Host_3 – реализованы с помощью VirtualBox. Гостевая ОС Windows XP;
  • 4. На конечных станциях установлен Cisco IP Communicator version 7.0.2.0.
Цель – организовать «телефонную» сеть (VoIP) на оборудовании cisco между всеми конечными пользователями.
Приступим. Как обычно, настроим сетевую доступность. Начнем с коммутаторов.
Switch_1:

R4>en
R4#conf t
R4(config)#hostname Switch_1
Switch_1(config)#exit
Switch_1#vlan database – заходим в режим создания нужных vlan-ов;
Switch_1(vlan)#vlan 2 name Managers
Switch_1(vlan)#vlan 3 name Office
Switch_1(vlan)#exit
Switch_1#conf t
Switch_1(config)#int fa 1/0
Switch_1(config-if)#switchport mode access – определяем нужные порты в нужные vlan;
Switch_1(config-if)#switchport access vlan 2
Switch_1(config-if)#exit
Switch_1(config)#int fa 1/1
Switch_1(config-if)#switchport mode access
Switch_1(config-if)#switchport access vlan 3
Switch_1(config-if)#exit
Switch_1(config)#int fa 1/15
Switch_1(config-if)#switchport mode trunk – создаем trunk интерфейс в сторону роутера;
Switch_1(config-if)#switchport trunk encapsulation dot1q – назначаем ему инкапсуляцию;
Switch_1(config-if)#switchport trunk allowed vlan 1-2,3,1002-1005 – определяем, какие vlan-ы будут пропускаться в trunk (по желанию);
Switch_1(config-if)#exit
Switch_1(config)#exit
Switch_1#wr
Switch_1#

Switch_2:

R5>en
R5#conf t
R5(config)#hostname Switch_2
R5(config)#exit
Switch_2#vlan database
Switch_2(vlan)#vlan 2 name Remote
Switch_2(vlan)#exit
Switch_2#conf t
Switch_2(config)#int fa 1/0
Switch_2(config-if)#switchport mode access
Switch_2(config-if)#switchport access vlan 2
Switch_2(config-if)#exit
Switch_2(config)#int fa 1/15
Switch_2(config-if)#switchport mode trunk
Switch_2(config-if)#switchport trunk encapsulation dot1q
Switch_2(config-if)#switchport trunk allowed vlan 1-2,1002-1005
Switch_2(config-if)#exit
Switch_2(config)#exit
Switch_2#wr
Switch_2#

Теперь перейдем к роутерам. Начнем с Center_Router:

R1>en
R1#conf t
R1(config)#hostname Center_Router
Center_Router(config)#int loopback 0 – создаем loopback интерфейс;
Center_Router(config-if)#ip address 10.10.10.10 255.255.255.255 – задаем ему IP-адрес;
Center_Router(config-if)#exit
Center_Router(config)#int fa 0/0
Center_Router(config-if)#no shutdown
Center_Router(config-if)#exit
Center_Router(config)#int fa 0/0.2 – создаем sub-интерфейсы для ранее созданных vlan-ов и назначаем им соответствующие IP-адреса;
Center_Router(config-subif)#encapsulation dot1Q 2
Center_Router(config-subif)#ip address 192.168.1.1 255.255.255.0
Center_Router(config-subif)#ip nat inside – указываем, что данный интерфейс будет использоваться для NAT;
Center_Router(config-subif)#exit
Center_Router(config)#int fa 0/0.3
Center_Router(config-subif)#encapsulation dot1Q 3
Center_Router(config-subif)#ip address 192.168.2.1 255.255.255.0
Center_Router(config-subif)#ip nat inside
Center_Router(config-subif)#exit
Center_Router(config)#int fa 1/0
Center_Router(config-if)#ip address 1.1.1.1 255.255.255.252 – назначаем IP-адрес на интерфейсе, смотрящем в сторону интернета;
Center_Router(config-if)#no shutdown
Center_Router(config-if)#ip nat outside – определяем его как выходной интерфейс для NAT;
Center_Router(config-if)#exit
Center_Router(config)#int tunnel 0 – создаем интерфейс для GRE туннеля;
Center_Router(config-if)#ip address 172.16.1.1 255.255.255.0 – назначаем ему IP-адрес;
Center_Router(config-if)#tunnel source fa 1/0 – определяем «начало» GRE туннеля;
Center_Router(config-if)#tunnel destination 2.2.2.1 – определяем «конец» GRE туннеля;
Center_Router(config-if)#exit
Center_Router(config)#ip access-list extended For_NAT – создаем список доступа и определяем какие сети попадают под NAT;
Center_Router(config-ext-nacl)#permit ip 192.168.1.0 0.0.0.255 any
Center_Router(config-ext-nacl)#permit ip 192.168.2.0 0.0.0.255 any
Center_Router(config-ext-nacl)#exit
Center_Router(config)#ip nat inside source list For_NAT interface fa 1/0 overload – включаем NAT на роутере;
Center_Router(config)#ip route 0.0.0.0 0.0.0.0 1.1.1.2 – прописываем маршрут по умолчанию;
Center_Router(config)#ip route 192.168.3.0 255.255.255.0 tunnel 0 – прописываем маршрут в удаленную сеть через туннель GRE;
Center_Router(config)#exit
Center_Router#wr

Пока хватит. Перейдем на Internet_Router. На нем у нас будет совсем мало конфигурации:

R2>en
R2#conf t
R2(config)#hostname Internet_Router
Internet_Router(config)#int fa 0/0
Internet_Router(config-if)#ip address 1.1.1.2 255.255.255.252
Internet_Router(config-if)#no sh
Internet_Router(config-if)#exit
Internet_Router(config)#int fa 1/0
Internet_Router(config-if)#ip address 2.2.2.2 255.255.255.252
Internet_Router(config-if)#no sh
Internet_Router(config-if)#exit
Internet_Router(config)#exit
Internet_Router#wr
Internet_Router#

Теперь перейдем к Remote_Router:

R3>en
R3#conf t
R3(config)#hostname Remote_Router
Remote_Router(config)#int loopback 0
Remote_Router(config-if)#ip address 20.20.20.20 255.255.255.255
Remote_Router(config-if)#exit
Remote_Router(config)#int fa 0/0
Remote_Router(config-if)#no shutdown
Remote_Router(config-if)#exit
Remote_Router(config)#int fa 0/0.2
Remote_Router(config-subif)#encapsulation dot1Q 2
Remote_Router(config-subif)#ip address 192.168.3.1 255.255.255.0
Remote_Router(config-subif)#ip nat inside
Remote_Router(config-subif)#exit
Remote_Router(config)#int fa 1/0
Remote_Router(config-if)#ip address 2.2.2.1 255.255.255.252
Remote_Router(config-if)#no sh
Remote_Router(config-if)#ip nat outside
Remote_Router(config-if)#exit
Remote_Router(config)#int tunnel 0
Remote_Router(config-if)#ip address 172.16.1.2 255.255.255.0
Remote_Router(config-if)#tunnel source fa 1/0
Remote_Router(config-if)#tunnel destination 1.1.1.1
Remote_Router(config-if)#exit
Remote_Router(config)#ip access-list extended For_NAT
Remote_Router(config-ext-nacl)#permit ip 192.168.3.0 0.0.0.255 any
Remote_Router(config-ext-nacl)#exit
Remote_Router(config)#ip nat inside source list For_NAT interface fa 1/0 overload
Remote_Router(config)#ip route 0.0.0.0 0.0.0.0 2.2.2.2
Remote_Router(config)#ip route 192.168.1.0 255.255.255.0 tunnel 0
Remote_Router(config)#ip route 192.168.2.0 255.255.255.0 tunnel 0
Remote_Router(config)#exit
Remote_Router#wr
Remote_Router#

Остановимся и проверим, что у нас имеется на данный момент. Сделаем команду ping с Host_A на Host_B и Host_C:

    где:
  • 1 – Host_B из соседнего vlan «Office»;
  • 2 – Host_C из удаленного vlan «Remote»;
  • 3 – IP-адрес Internet_Router-а, смотрящий в сторону удаленного офиса.
Как видно на рисунке, сетевая доступность присутствует. Inter-vlan routing работает (1), туннель функционирует нормально (2) (если вы выключите интерфейс tunnel 0, то пинги проходить не будут), выход в интернет тоже есть (3).
Теперь приступим к настройке VoIP. Заходим на роутер Center_Router и добавляем следующую конфигурацию:

Center_Router>en
Center_Router#conf t
Center_Router(config)#telephony-service – заходим в режим настройки телефонных сервисов;
Center_Router(config-telephony)#max-ephones 10 – назначаем максимальное количество IP-телефонов, которое нам потребуется в нашей «телефонной» сети;
Center_Router(config-telephony)#max-dn 10 – назначаем максимальное количество «телефонных» линий;
Center_Router(config-telephony)#keepalive 15 – назначаем время, в течение которого CME будет ждать ответа от IP-телефона в случае обрыва связи, после которого он начнет попытку перерегистрации;
Center_Router(config-telephony)#system message VoIP from Cisco – задаем системное сообщение, которое будет отображаться на IP-телефоне (Cisco IP Communicator-е);
Center_Router(config-telephony)#ip source-address 10.10.10.10 port 2000 – задаем IP-адрес и порт (port 2000 – порт по умолчанию), на который будут обращаться IP-телефоны для регистрации;
Center_Router(config-telephony)#create cnf-files – указываем роутеру создавать файл конфигурации в формате XML, который затем будет скачан IP-телефонами;
Center_Router(config-telephony)#exit
Center_Router(config)#voice service voip – заходим в режим конфигурации голосового сервиса для задания инкапсуляции Voice over IP;
Center_Router(conf-voi-serv)#allow-connections h323 to h323 – включаем звонки между соответствующими типами конечных точек;
Center_Router(conf-voi-serv)#allow-connections h323 to sip
Center_Router(conf-voi-serv)#allow-connections sip to sip
Center_Router(conf-voi-serv)#allow-connections sip to h323
Center_Router(conf-voi-serv)#sip – заходим в режим конфигурирования SIP;
Center_Router(conf-serv-sip)#registrar server expires max 600 min 60 – устанавливаем минимальное время до перерегистрации IP-телефонов. Это надо для того, чтобы после перезагрузки CME, он сам автоматически перерегистрировал IP-телефоны, так как при перезагрузке, CME не сохраняет базу зарегистрированных IP-телефонов;
Center_Router(conf-serv-sip)#exit
Center_Router(config)#voice class codec 1 – создадим список поддерживаемых кодеков;
Center_Router(config-class)#codec preference 1 g711ulaw – указываем, в каком порядке какой кодек применять;
Center_Router(config-class)#codec preference 2 g711alaw
Center_Router(config-class)#codec preference 3 g729r8
Center_Router(config-class)#exit
Center_Router(config)#ephone-dn 1 – создаем первую логическую «телефонную» линию (directory number). Каждому телефону можно определить несколько таких логический линий со своими номерами;
Center_Router(config-ephone-dn)#number 1001 – задаем номер, который будет соответствовать этой линии;
Center_Router(config-ephone-dn)#name Host_A – задаем имя, которое будет отображаться при звонке на IP-телефоне;
Center_Router(config-ephone-dn)#exit
Center_Router(config)#ephone-dn 2
Center_Router(config-ephone-dn)#name Host_A
Center_Router(config-ephone-dn)#number 2001
Center_Router(config-ephone-dn)#name Host_B
Center_Router(config-ephone-dn)#exit
Center_Router(config)#ephone 1 – создаем первый IP-телефон;
Center_Router(config-ephone)#mac-address 0800.279D.D0F4 – задаем ему mac-address. Он будет использоваться в качестве уникального имени IP-телефона. Взять его можно из установок вашей сетевой карты на компьютере;
Center_Router(config-ephone)#type cipc – указываем тип IP-телефона. В нашем случае – это Cisco IP Communicator;
Center_Router(config-ephone)#button 1:1 – указываем IP-телефону, что первая клавиша на нем, будет соответствовать первой логической линии (directory number);
Center_Router(config-ephone)#exit
Center_Router(config)#ephone 2
Center_Router(config-ephone)#mac-address 0800.277E.9718
Center_Router(config-ephone)#type cipc
Center_Router(config-ephone)#button 1:2
Center_Router(config-ephone)#exit
Center_Router(config)#dial-peer voice 1 voip – для создания связи с удаленным офисом нам необходимо настроить соседство между CME. Заходим в соответствующий режим;
Center_Router(config-dial-peer)#destination-pattern 30.. – указываем, что если кто то набирает номер, начинающийся на «30», то отправлять его на соседний CME;
Center_Router(config-dial-peer)#session target ipv4:20.20.20.20 – прописываем, что телефонная сессия должна быть установлена через IP сеть и адрес удаленного CME 20.20.20.20;
Center_Router(config-dial-peer)#voice-class codec 1 – указываем, какие кодеки могут быть использованы для данной связи;
Center_Router(config-dial-peer)#exit
Center_Router(config)#ip route 20.20.20.20 255.255.255.255 tunnel 0 - прописываем дополнительный маршрут к loopback-интерфейсу соседнего CME через интерфейс Tunnel 0. Таким образом, мы заворачиваем телефонный трафик в GRE туннель;
Center_Router(config)#exit
Center_Router#wr

Переходим на Remote_Router и делаем следующие настройки:

Remote_Router>en
Remote_Router#conf t
Remote_Router(config)#telephony-service
Remote_Router(config-telephony)#max-ephones 10
Remote_Router(config-telephony)#max-dn 10
Remote_Router(config-telephony)#keepalive 15
Remote_Router(config-telephony)#system message VoIP from Cisco
Remote_Router(config-telephony)#ip source-address 20.20.20.20 port 2000
Remote_Router(config-telephony)#create cnf-files
Remote_Router(config-telephony)#exit
Remote_Router(config)#voice service voip
Remote_Router(conf-voi-serv)#allow-connections h323 to h323
Remote_Router(conf-voi-serv)#allow-connections h323 to sip
Remote_Router(conf-voi-serv)#allow-connections sip to sip
Remote_Router(conf-voi-serv)#allow-connections sip to h323
Remote_Router(conf-voi-serv)#sip
Remote_Router(conf-serv-sip)#registrar server expires max 600 min 60
Remote_Router(conf-serv-sip)#exit
Remote_Router(conf-voi-serv)#voice class codec 1
Remote_Router(config-class)#codec preference 1 g711ulaw
Remote_Router(config-class)#codec preference 2 g711alaw
Remote_Router(config-class)#codec preference 3 g729r8
Remote_Router(config-class)#exit
Remote_Router(config)#ephone-dn 1 dual-line – в отличие от прошлой конфигурации, этой командой мы указываем, что у нас будет двойная линия;
Remote_Router(config-ephone-dn)#number 3001
Remote_Router(config-ephone-dn)#name Host_C
Remote_Router(config-ephone-dn)#exit
Remote_Router(config)#ephone 1
Remote_Router(config-ephone)#mac-address 0800.279E.735C
Remote_Router(config-ephone)#type cipc
Remote_Router(config-ephone)#button 1:1
Remote_Router(config-ephone)#exit
Remote_Router(config)#dial-peer voice 1 voip
Remote_Router(config-dial-peer)#destination-pattern .... – так как локальных «телефонных» номеров у нас на удаленном офисе нет, то указываем отправлять все звонки на соседний CME;
Remote_Router(config-dial-peer)#session target ipv4:10.10.10.10
Remote_Router(config-dial-peer)#voice-class codec 1
Remote_Router(config-dial-peer)#exit
Remote_Router(config)#ip route 10.10.10.10 255.255.255.255 tunnel 0
Remote_Router(config)#exit
Remote_Router#wr
Remote_Router#

Настало время установить Cisco IP Communicator на компьютеры пользователей. Заходим на Host_A. Находим папку со скачанным ПО и запускаем файл *.exe. Появится следующее окно:


Нажимаем «Next»:


Соглашаемся с лицензией и нажимаем «Next»:


Здесь предлагают выбрать папку для установки программы. Выбираете нужное место и нажимаете «Next» (я оставил по умолчанию):


Предварительные параметры установки определены. Нажимаем «Install» и начнется процесс установки. По его окончании появится следующее финишное окно:


Нажимаем «Finish». Появится ярлык на рабочем столе и вам предложат перегрузить компьютер:


Нажимаем «Yes». После перезагрузки запускаем программу двойным щелчком по ярлыку. Откроется окно первоначальной настройки Cisco IP Communicator «Audio Tuning Wizard»:


Нажимаем «Next»:


Из выпадающих меню выбираем имеющиеся аудио устройства. Затем нажимаем «Next»:


Задаем уровень громкости наушников (колонок). Сначала нажимаем «Play», выставляем нужный уровень и нажимаем «Next»:


Здесь настраиваем параметры микрофона. Сначала нажимаем «Test», устанавливаем нужный уровень и затем нажимаем «Next»:


После настроек нажимаем «Finish». Теперь Cisco IP Communicator попытается зарегистрироваться на CME (наш роутер) и получить нужную конфигурацию, но у него ничего не получится (появится сообщение вида «Unable to reach to TFTP server»). Нажмите «OK» и вы попадете на страницу настройки параметров сети ( или, если программа загрузилась, то нажмите по ней правой клавишей мыши и выберите Preferences -- Network):

    где:
  • 1 – имя устройства (оно совпадает с mac-адресом компьютера);
  • 2 – задаем IP-адрес CME (Call Manager Express).
Как только вы это сделаете и нажмете на кнопку «OK», то у вас появится стандартный вид Cisco IP Communicator:


Ничего такой телефончик :). Видим, что кнопке №1 соответствует первая линия с номером 1001 (2). Присутствует также надпись (3), которую мы задавали при настройке роутера (CME) выше. Для дальнейших тестов я буду использовать компактный режим отображения Cisco IP Communicator. Переключиться в него можно через клавишу (1) на рисунке.
Тот факт, что телефон зарегистрировался на CME можно проследить и по системным сообщениям в консоли роутера. Посмотрим на Center_Router:

    где:
  • 1 – имя Cisco IP Communicator (совпадает с mac-адресом);
  • 2 – IP-адрес зарегистрированного Cisco IP Communicator.
Ну что, все вроде настроили. Теперь перейдем к проверкам. Для начала, позвоним с Host_A на Host_B. Выбираем пункт «NewCall» и набираем номер:


Звонок проходит, снимаем трубку и можно общаться :).
Теперь позвоним с Host_C на Host_A. После установки соединения с Host_A, ставим звонок на удержание и нажимаем на «NewCall» снова и набираем номер Host_B. Таким образом, мы проверим работу двойной линии, настроенной для Host_C:


Все работает!!! Видим, что первый звонок находится в режиме ожидания (1), второй в активном режиме. Точно так же можно проверить и в обратном порядке (позвонить на Host_C сначала с Host_A, затем с Host_B) и тоже все будет работать.
Теперь давайте отловим пакеты на Internet_Router и посмотрим на их содержимое (я буду ловить их на fa 0/0, смотрящем в сторону Center_Router, и инициировать звонок с Host_A на Host_C). Отловим, для примера, один системный пакет (первый по счету рисунок) и пакет, после установления телефонной сессии (второй по счету рисунок):

    где:
  • 1 – системный пакет установления логического канала для звонка;
  • 2 – навешивание параметров GRE – туннеля на первоначальный пакет;
  • 3 – «начальный» IP-адрес GRE – туннеля;
  • 4 – «конечный» IP-адрес GRE – туннеля;
  • 5 – имя хоста, с которого инициируется звонок;
  • 6 – локальный номер;
  • 7 – номер, на который устанавливается соединение.
    где:
  • 1 – используемый на данный момент кодек G.711.

Да, из рисунков видно, что на первоначальный пакет навешивается много дополнительных заголовков и так далее. Хочу отметить, что для нормального функционирования телефонной связи, при планировании ее использования, следует учитывать все эти заголовки. Так как они существенно увеличивают длину пакета и, если у вас небольшой канал, то существенно влияют на качество связи. Поэтому, всегда рядом с VoIP стоит и QoS, чтобы обеспечить требуемую полосу пропускания для телефонного трафика, но это уже мотивы для будущих постов :).
Ну что же, на этой радостной ноте я хочу закончить этот пост. Как всегда надеюсь, что он был вам интересен и познавателен. Хочу поблагодарить вас за внимание.

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

Если есть желание отблагодарить, то киньте немного WebMoney (Яндекс.Деньги) или дайте ссылку на мой блог, если будете еще на каких-нибудь форумах или сайтах :).

С нетерпением жду вас в следующих постах!!!

С уважением, Ant0ni0n







Источник материала: http://www.go-to-easyit.com

Почитайте еще

Как поменять пароль в БД Wordpress Как поменять пароль в БД Wordpress

Меняем пароль для блога на WordPress. Итак, у вас возникла ситуация, что вы по какой-то причине забыли свой пароль и не можете войти в админскую зону своего блога .

Программа Audacity или как сохранить звук из флэшки в mp3 и разместить у себя в блоге!? Программа Audacity или как сохранить звук из флэшки в mp3 и разместить у себя в блоге!?

Программа Audacity или как сохранить звук из флэшки в mp3 и разместить у себя в блоге!? Е сть задача сохранить звук из флэшки Музыки загадочных кругов (или из Виртуального пианино ) сохранить в mp3 и опубликовать у себя в блоге.

Какие признаки указывают на заражение компьютера вирусами? Какие признаки указывают на заражение компьютера вирусами?

Главная Частозадаваемые вопросы Какие признаки указывают на заражение компьютера вирусами? Какие признаки указывают на заражение компьютера вирусами?


Еще статьи