Mudanças entre as edições de "Redes Multimídia (diário 2014-1)"
(→28/05) |
|||
(60 revisões intermediárias por 5 usuários não estão sendo mostradas) | |||
Linha 17: | Linha 17: | ||
==Avaliação== | ==Avaliação== | ||
* Serão realizadas avaliações por temática/projeto em sala. | * Serão realizadas avaliações por temática/projeto em sala. | ||
− | * Para aprovação: no máximo 2 Ds, e para cada D um A correspondente. Exceção: para o último projeto o conceito mínimo deve ser C. | + | * Para aprovação: no máximo 2 Ds, e para cada D um A correspondente. |
+ | ** Exceção: para o último projeto o conceito mínimo deve ser C. | ||
+ | |||
+ | <center> | ||
+ | {| border="1" | ||
+ | |- | ||
+ | | '''Ramal''' || '''Aluno''' || '''SIP/SDP''' || '''Codecs''' || '''Mídia''' || '''Projeto Final''' | ||
+ | |- | ||
+ | | 11 ||Amilcar || A || A || A || C | ||
+ | |- | ||
+ | | 12 ||Beatriz || C || A || D || D | ||
+ | |- | ||
+ | | 13 ||Belmiro || A || A || D || D | ||
+ | |- | ||
+ | | 14 ||Carlos || D || D || B || D | ||
+ | |- | ||
+ | | 15 ||Claudir || A || A || A || C | ||
+ | |- | ||
+ | | 16 ||Douglas || A || D || A || D | ||
+ | |- | ||
+ | | 17 ||Leonardo || A || A || A || A | ||
+ | |- | ||
+ | | 18 ||Liamari || A || A || A || D | ||
+ | |- | ||
+ | | 19 ||Luana || A || A || A || D | ||
+ | |- | ||
+ | | 20 ||Maykon || C || A || A || A | ||
+ | |- | ||
+ | | 21 ||Muriel || C || A || A || D | ||
+ | |- | ||
+ | | 22 ||Renan G. || A || A || A || A | ||
+ | |- | ||
+ | | 23 ||Renan H. || A || A || A || C | ||
+ | |- | ||
+ | | 24 ||Ricardo || A || A || A || A | ||
+ | |- | ||
+ | | 25 ||Thiago || A || A || A || A | ||
+ | |- | ||
+ | |} | ||
+ | </center> | ||
=Aulas= | =Aulas= | ||
Linha 471: | Linha 510: | ||
* IPv6. | * IPv6. | ||
* Entrega: ligação entre canais com terminações IPv4 e IPv6. | * Entrega: ligação entre canais com terminações IPv4 e IPv6. | ||
− | ** ATUALIZAÇÃO: [https://github.com/maxonthegit/netkit-uml-filesystem/issues/8 problemas com a versão do Quagga] no [http://wiki.netkit.org/download/netkit-filesystem/installed-packages-i386-F5.2 Netkit original] (0.99.11, quando deveria ser 0.99.18+). A entrega, assim, será | + | ** ATUALIZAÇÃO: [https://github.com/maxonthegit/netkit-uml-filesystem/issues/8 problemas com a versão do Quagga] no [http://wiki.netkit.org/download/netkit-filesystem/installed-packages-i386-F5.2 Netkit original] (0.99.11, quando deveria ser 0.99.18+). A entrega, assim, será feita APENAS com a configuração. |
** ATUALIZAÇÃO 2: como o [[Netkit|serialemu]] consome mais recursos que o enlace Ethernet convencional, e requer endereço inicial para ativar a interface, serão utilizados enlaces Ethernet entre os roteadores. | ** ATUALIZAÇÃO 2: como o [[Netkit|serialemu]] consome mais recursos que o enlace Ethernet convencional, e requer endereço inicial para ativar a interface, serão utilizados enlaces Ethernet entre os roteadores. | ||
Linha 504: | Linha 543: | ||
} | } | ||
</graphviz></center> | </graphviz></center> | ||
− | Configuração: | + | Configuração de roteamento baseada na RFC 4861, seção 8, parágrafo 3: |
* Terminal A: | * Terminal A: | ||
<syntaxhighlight lang=bash> | <syntaxhighlight lang=bash> | ||
ip -6 addr add 2804:1454::1/64 dev eth0 | ip -6 addr add 2804:1454::1/64 dev eth0 | ||
− | ip -6 route add 2804:1454:0:1::/64 via <B:eth0 link-local> #B-C | + | ip -6 route add 2804:1454:0:1::/64 dev eth0 via <B:eth0 link-local> #B-C |
− | ip -6 route add 2804:1454:0:2::/64 via <B:eth0 link-local> #C-D | + | ip -6 route add 2804:1454:0:2::/64 dev eth0 via <B:eth0 link-local> #C-D |
</syntaxhighlight> | </syntaxhighlight> | ||
* Roteador B: | * Roteador B: | ||
Linha 515: | Linha 554: | ||
ip -6 addr add 2804:1454::2/64 dev eth0 | ip -6 addr add 2804:1454::2/64 dev eth0 | ||
ip -6 addr add 2804:1454:0:1::1/64 dev eth1 | ip -6 addr add 2804:1454:0:1::1/64 dev eth1 | ||
− | ip -6 route add 2804:1454:0:2::/64 via <C:eth0 link-local> #C-D | + | ip -6 route add 2804:1454:0:2::/64 dev eth1 via <C:eth0 link-local> #C-D |
sysctl -w net.ipv6.conf.all.forwarding=1 | sysctl -w net.ipv6.conf.all.forwarding=1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 522: | Linha 561: | ||
ip -6 addr add 2804:1454:0.2::2/64 dev eth0 | ip -6 addr add 2804:1454:0.2::2/64 dev eth0 | ||
ip -6 addr add 2804:1454:0:2::1/64 dev eth1 | ip -6 addr add 2804:1454:0:2::1/64 dev eth1 | ||
− | ip -6 route add 2804:1454::/64 via <B:eth1 link-local> #A-B | + | ip -6 route add 2804:1454::/64 dev eth0 via <B:eth1 link-local> #A-B |
sysctl -w net.ipv6.conf.all.forwarding=1 | sysctl -w net.ipv6.conf.all.forwarding=1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 528: | Linha 567: | ||
<syntaxhighlight lang=bash> | <syntaxhighlight lang=bash> | ||
ip -6 addr add 2804:1454:0:2::2/64 dev eth0 | ip -6 addr add 2804:1454:0:2::2/64 dev eth0 | ||
− | ip -6 route add 2804:1454::/64 via <C:eth1 link-local> #A-B | + | ip -6 route add 2804:1454::/64 dev eth0 via <C:eth1 link-local> #A-B |
− | ip -6 route add 2804:1454:0:1::/64 via <C:eth1 link-local> #B-C | + | ip -6 route add 2804:1454:0:1::/64 dev eth0 via <C:eth1 link-local> #B-C |
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 545: | Linha 584: | ||
===04/06=== | ===04/06=== | ||
* SRTP e zRTP. | * SRTP e zRTP. | ||
+ | Obs.: Para estudar os itens acima, nos próximos experimentos, não iremos mais utilizar o Netkit, mas sim a máquina virtual. | ||
+ | |||
+ | ==== PBX Asterisk + SIP TLS + SRTP==== | ||
+ | Objetivo inical da aula: compilar o asterisk. | ||
+ | Passos seguidos: | ||
+ | # Instalação de dependências básicas do Asterisk:<syntaxhighlight lang=bash> | ||
+ | sudo apt-get install build-essential libncurses-dev libxml2-dev libsqlite3-dev | ||
+ | </syntaxhighlight> | ||
+ | # Instalação de dependências do Asterisk para suporte a TLS e SRTP:<syntaxhighlight lang=bash> | ||
+ | sudo apt-get install openssl libssl-dev libsrtp-dev | ||
+ | </syntaxhighlight> | ||
+ | # Compilação e instalação do Asterisk com esse suporte:<syntaxhighlight lang=bash> | ||
+ | cd /usr/local/src | ||
+ | wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11-current.tar.gz | ||
+ | tar xzf asterisk-11-current.tar.gz | ||
+ | rm asterisk-11-current.tar.gz | ||
+ | cd asterisk-11* | ||
+ | ./configure --prefix=/usr/local/asterisk-11 --exec-prefix=/usr/local/asterisk-11 --with-ssl --with-srtp | ||
+ | make clean menuselect all install samples | ||
+ | </syntaxhighlight> | ||
+ | # Criação do certificado para o uso de SIP sobre TLS. Por algum motivo ainda desconhecido, o Asterisk busca o certificado no diretório raiz, mesmo que o endereço esteja completo no arquivo de configuração (como será visto a seguir):<syntaxhighlight lang=bash> | ||
+ | cd /usr/local/asterisk-11 | ||
+ | openssl req -new -nodes -days 365 -x509 -out etc/asterisk.pem -keyout etc/asterisk.pem | ||
+ | ln -s etc/asterisk.pem asterisk.pem | ||
+ | </syntaxhighlight> | ||
+ | # Configuração do Asterisk com o mesmos ramais 100 e 101 usados na disciplina - baseada em https://wiki.asterisk.org/wiki/display/AST/Secure+Calling+Tutorial<syntaxhighlight lang=bash> | ||
+ | cd /usr/local/asterisk-11 | ||
+ | cat > etc/sip.conf << FIM | ||
+ | [general] | ||
+ | tcpenable=no | ||
+ | tlsenable=yes | ||
+ | transport=udp,tls | ||
+ | tlsbindaddr=0.0.0.0 | ||
+ | tlscertfile=/usr/local/asterisk-11/etc/asterisk.pem | ||
+ | tlsprivatekey=/usr/local/asterisk-11/etc/asterisk.pem | ||
+ | tlsdontverifyserver=yes | ||
+ | |||
+ | [100] | ||
+ | context=rmu20141 | ||
+ | # | ||
+ | # SIP | ||
+ | type=friend | ||
+ | host=dynamic | ||
+ | defaultuser=100 | ||
+ | qualify=yes | ||
+ | # | ||
+ | # SDP | ||
+ | disallow=all | ||
+ | allow=alaw | ||
+ | # | ||
+ | # RTP | ||
+ | directmedia=no | ||
+ | # | ||
+ | # Protocolo de transporte: apenas SIP sobre TLS. | ||
+ | transport=tls | ||
+ | # | ||
+ | # Criptografia de áudio (SRTP)? | ||
+ | encryption=yes | ||
+ | |||
+ | [101] | ||
+ | context=rmu20141 | ||
+ | # | ||
+ | # SIP | ||
+ | type=friend | ||
+ | host=dynamic | ||
+ | defaultuser=101 | ||
+ | qualify=yes | ||
+ | # | ||
+ | # SDP | ||
+ | disallow=all | ||
+ | allow=alaw | ||
+ | # | ||
+ | # RTP | ||
+ | directmedia=no | ||
+ | # | ||
+ | # Protocolo de transporte: apenas SIP sobre TLS. | ||
+ | transport=tls | ||
+ | # | ||
+ | # Criptografia de áudio (SRTP)? | ||
+ | encryption=yes | ||
+ | FIM | ||
+ | </syntaxhighlight> | ||
+ | # Configuração do plano de discagem mantido:<syntaxhighlight lang=bash> | ||
+ | cd /usr/local/asterisk-11 | ||
+ | cat > etc/extensions.conf << FIM | ||
+ | [rmu20141] | ||
+ | exten => _1XX,1,Dial(SIP/${EXTEN}) | ||
+ | exten => _1XX,n,Hangup() | ||
+ | exten => _0.,1,Dial(SIP/r0pbx0-r1pbx0/${EXTEN:1}) | ||
+ | exten => _0.,n,Hangup() | ||
+ | FIM | ||
+ | </syntaxhighlight> | ||
+ | # Para executar o Asterisk:<syntaxhighlight lang=bash> | ||
+ | cd /usr/local/asterisk-11 | ||
+ | sbin/asterisk | ||
+ | sbin/asterisk -rx 'sip show settings' | ||
+ | sbin/asterisk -rx 'core set verbose 20' | ||
+ | sbin/asterisk -rx 'core set debug 20' | ||
+ | sbin/asterisk -r | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Cliente Blink + SIP TLS + SRTP ==== | ||
+ | # Primeiramente, é necessário instalar o aplicativo- com base em http://projects.ag-projects.com/projects/documentation/wiki/Repositories. Será assumida a versão 12-04 LTS do Ubuntu no cliente:<syntaxhighlight lang=bash> | ||
+ | wget http://download.ag-projects.com/agp-debian-gpg.key -O - | sudo apt-key add - | ||
+ | sudo cat > /etc/apt/sources.list.d/blink.list << FIM | ||
+ | deb http://ag-projects.com/ubuntu quantal main | ||
+ | FIM | ||
+ | sudo apt-get update | ||
+ | sudo apt-get install blink | ||
+ | blink | ||
+ | </syntaxhighlight> | ||
+ | # Em seguida, ao rodar a primeira vez, pode-se ignorar a configuração facilitada de conta. | ||
+ | # Deve-se, no menu, escolher a opção de gerenciar contas, e adicionar no botão <tt>[+]</tt> embaixo à equerda. | ||
+ | # Na nova janela, informar os parâmetros: | ||
+ | ## Conta: nome/número do usuário + domínio. Ex.: <tt>100@192.168.1.1</tt>, onde <tt>100</tt> é o usuário e <tt>192.168.1.1</tt> o endereço IP do PBX. | ||
+ | ## Senha: não é necessário informar. | ||
+ | ## SIP sobre TLS: | ||
+ | ### Servidor Proxy: o mesmo endereço informado em domínio. | ||
+ | ### Porta: 5061 - conforme https://tools.ietf.org/html/rfc3261#section-18.2. | ||
+ | ### Protocolo: TLS. | ||
+ | ## SRTP: | ||
+ | ### Em SRTP, marcar como obrigatório (''mandatory''). | ||
+ | |||
+ | O TCC de Patricia e Paulo Vitor ([[Image:TCC_PatriciaDomingosPauloVitorChirolli.pdf]]) tratam de segurança em sinalização/descrição de mídia e transmissão de mídia: páginas 53 a 58 (configuração) e 61 a 65 (capturas de tela do aplicativo e tráfego da rede com [https://wireshark.org Wireshark]). | ||
===09/06=== | ===09/06=== | ||
Linha 552: | Linha 715: | ||
===11/06=== | ===11/06=== | ||
* Entrega: criptografia de sinalização e de mídia. | * Entrega: criptografia de sinalização e de mídia. | ||
+ | |||
+ | == Projeto Final== | ||
+ | ===18/06=== | ||
+ | |||
+ | [[Arquivo:TrabalhoFinal.png|800px]] | ||
+ | |||
+ | Para quem não quiser ter o trabalho de fazer a ligação das máquinas: | ||
+ | |||
+ | <code> | ||
+ | # Geral | ||
+ | global[compact]=False | ||
+ | global[mem]=32 | ||
+ | global[clean]=False | ||
+ | # | ||
+ | # | ||
+ | # Equipamentos | ||
+ | # REDE 1 ########################### | ||
+ | router1[type]=router | ||
+ | swR1[type]=switch | ||
+ | swR1[mem]=16 | ||
+ | pbxR1[type]=pbx | ||
+ | pbxR1[mem]=64 | ||
+ | pc1R1[type]=generic | ||
+ | pc2R1[type]=generic | ||
+ | # | ||
+ | # links | ||
+ | router1[eth0]=r1-swR1 | ||
+ | router1[eth1]=r1-r2 | ||
+ | router1[eth2]=uplink:bridge=eth0:ip=dhcp | ||
+ | swR1[eth0]=sw1-pbxR1 | ||
+ | swR1[eth1]=r1-swR1 | ||
+ | swR1[eth2]=sw1-pc1R1 | ||
+ | swR1[eth3]=sw1-pc2R1 | ||
+ | pbxR1[eth0]=sw1-pbxR1 | ||
+ | pc1R1[eth0]=sw1-pc1R1 | ||
+ | pc2R1[eth0]=sw1-pc2R1 | ||
+ | # | ||
+ | # preservar arquivos | ||
+ | pbxR1[preserve]=/usr/local/asterisk/etc | ||
+ | pc1R1[preserve]=/root/ | ||
+ | pc2R1[preserve]=/root/ | ||
+ | # | ||
+ | # REDE 2 ########################### | ||
+ | router2[type]=router | ||
+ | swR2[type]=switch | ||
+ | swR2[mem]=16 | ||
+ | pbxR2[type]=pbx | ||
+ | pbxR2[mem]=64 | ||
+ | pc1R2[type]=generic | ||
+ | pc2R2[type]=generic | ||
+ | # | ||
+ | # links | ||
+ | router2[eth0]=r2-swR2 | ||
+ | router2[eth1]=r1-r2 | ||
+ | swR2[eth0]=sw2-pbxR2 | ||
+ | swR2[eth1]=r2-swR2 | ||
+ | swR2[eth2]=sw2-pc1R2 | ||
+ | swR2[eth3]=sw2-pc2R2 | ||
+ | pbxR2[eth0]=sw2-pbxR2 | ||
+ | pc1R2[eth0]=sw2-pc1R2 | ||
+ | pc2R2[eth0]=sw2-pc2R2 | ||
+ | # | ||
+ | # preservar arquivos | ||
+ | pbxR2[preserve]=/usr/local/asterisk/etc | ||
+ | pc1R2[preserve]=/root/ | ||
+ | pc2R2[preserve]=/root/ | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === 23/06 === | ||
+ | A configuração do provedor está disponível para consulta: | ||
+ | * Servidor 200.135.233.20: | ||
+ | ** SIP Registrar. | ||
+ | ** SIP Proxy. | ||
+ | ** STUN (RFC 5389). | ||
+ | * <tt>[http://tele.sj.ifsc.edu.br/~etorresini/rmu20141/sip.conf sip.conf]</tt>. | ||
+ | * <tt>[http://tele.sj.ifsc.edu.br/~etorresini/rmu20141/extensions.conf extensions.conf]</tt>. | ||
+ | |||
+ | === 02/07 === | ||
+ | Defesa do projeto final: | ||
+ | # Sinalização: | ||
+ | ## Estabelecimento de ligação intercentrais. | ||
+ | ## Estabelecimento de ligação com o servidor externo. | ||
+ | # Descrição de mídia: | ||
+ | ## Onde, no cenário global, é possível a transcodificação? | ||
+ | ## Em qualquer ligação (anterior), indique que codec(s) foi(ram) utilizado(s). | ||
+ | # Transmissão de mídia: | ||
+ | ## Realize uma transmissão envolvendo ambos os protocolos IPv4 e IPv6. | ||
+ | ## Em qualquer ligação (anterior), indique quais centrais atuaram como ''gateways'' de mídia. | ||
+ | # Qualidade de serviço: | ||
+ | ## Mostre o código de classificação e marcação de pacotes nos roteadores. | ||
+ | ## Mostre os pacotes de sinalização e de transmissão modificados pelas políticas de qualidade de serviço. | ||
+ | # Segurança: | ||
+ | ## Realize uma ligação sobre SIP+TLS. | ||
+ | ## Realize uma ligação sobre SIP+TLS e SRTP. | ||
==Novas Tecnologias== | ==Novas Tecnologias== |
Edição atual tal como às 16h47min de 15 de julho de 2014
Endereço encurtado desta página: http://bit.ly/rmu20141
Sobre a disciplina
Metodologia
Metodologia orientada a projeto, sendo esse o desenvolvimento de uma solução de comunicação segura entre diversos nós espalhados pela Internet. Será usado, para tal, um concentrador que atuará como autenticador e ponto de integração com outras redes. A comunicação entre os nós poderá ser intermediada pelo concentrador ou mesmo direta entre os terminais. É obrigatória a segurança de todos os dados trafegados (sinalização e transmissão de mídia). A qualidade de serviço será necessária, seja intra-rede ou entre redes locais conectadas à Internet. Como o IFSC será uma dessas redes locais, o uso de IPv6 será necessário - tendo assim pilha dupla de operação. Novas tecnologias serão contempladas, como WebRTC e novos codecs projetados para redes IP.
Ferramentas
- Este diário de bordo.
- Netkit.
- Repositório dos arquivos do Netkit:
- Controle de versão com Git via HTTPS: https://tele.sj.ifsc.edu.br/projetos/rmu20141.
- Credenciais: acesso anônimo para cópia (leitura) do repositório, acesso autenticado para escrita mediante solicitação.
Avaliação
- Serão realizadas avaliações por temática/projeto em sala.
- Para aprovação: no máximo 2 Ds, e para cada D um A correspondente.
- Exceção: para o último projeto o conceito mínimo deve ser C.
Ramal | Aluno | SIP/SDP | Codecs | Mídia | Projeto Final |
11 | Amilcar | A | A | A | C |
12 | Beatriz | C | A | D | D |
13 | Belmiro | A | A | D | D |
14 | Carlos | D | D | B | D |
15 | Claudir | A | A | A | C |
16 | Douglas | A | D | A | D |
17 | Leonardo | A | A | A | A |
18 | Liamari | A | A | A | D |
19 | Luana | A | A | A | D |
20 | Maykon | C | A | A | A |
21 | Muriel | C | A | A | D |
22 | Renan G. | A | A | A | A |
23 | Renan H. | A | A | A | C |
24 | Ricardo | A | A | A | A |
25 | Thiago | A | A | A | A |
Aulas
Apresentação da disciplina e oportunidades
10/02
- Apresentação da disciplina: metodologia e avaliação.
12/02
- Definição da metodologia e escopo do problema: a rede de comunicação.
17/02
Não houve aula.
19/02
Com a possibilidade de troca de professor da disciplina, foi tratado um tema relevante: o mercado de trabalho de Telecomunicações na Grande Florianópolis.
Sinalização
24/02
- Estudo de caso: Dropbox e transmissão de vídeo para várias plataformas.
- Telefona IP, sinalização, H.323, SIP e XMPP com a extensão Jingle.
- Material de apoio.
- Convidado(?): Carlos Eduardo Wagner.
26/02
- O protocolo SIP - RFC 3261.
10/03
- SIP, intracentral.
- Um cenário possível para o experimento:
- Geral
global[compact]=False
global[mem]=64
global[vm]=4
global[clean]=False
global[path]=/tmp/rmu20141/cenario0/lab
- Roteador
rt0[type]=router
- Rede 0
- Equipamentos
r0sw0[type]=switch
r0pbx0[type]=pbx
r0pc0[type]=generic
r0pc1[type]=generic
- Enlaces intra-rede
r0sw0[eth0]=p00
rt0[eth0]=p00:ip=192.168.0.254/24
r0sw0[eth1]=p01
r0pbx0[eth0]=p01:ip=192.168.0.1/24
r0sw0[eth2]=p02
r0pc0[eth0]=p02:ip=192.168.0.100/24
r0sw0[eth3]=p03
r0pc1[eth0]=p03:ip=192.168.0.101/24
- Rotas
r0pbx0[default_gateway]=192.168.0.254
r0pc0[default_gateway]=192.168.0.254
r0pc1[default_gateway]=192.168.0.254
- Arquivos a salvar
r0pbx0[preserve]=/usr/local/asterisk/etc/asterisk/sip.conf:/usr/local/asterisk/etc/asterisk/extensions.conf
r0pc0[preserve]=/root/pjsua.cfg:/root/chopin.wav
r0pc1[preserve]=/root/pjsua.cfg:/root/chopin.wav
- Rede 1
- Equipamentos
r1sw0[type]=switch
r1pbx0[type]=pbx
r1pc0[type]=generic
r1pc1[type]=generic
- Enlaces intra-rede
r1sw0[eth0]=p10
rt0[eth1]=p10:ip=192.168.1.254/24
r1sw0[eth1]=p11
r1pbx0[eth0]=p11:ip=192.168.1.1/24
r1sw0[eth2]=p12
r1pc0[eth0]=p12:ip=192.168.1.100/24
r1sw0[eth3]=p13
r1pc1[eth0]=p13:ip=192.168.1.101/24
- Rotas
r1pbx0[default_gateway]=192.168.1.254
r1pc0[default_gateway]=192.168.1.254
r1pc1[default_gateway]=192.168.1.254
- Arquivos a salvar
r1pbx0[preserve]=/usr/local/asterisk/etc/asterisk/sip.conf:/usr/local/asterisk/etc/asterisk/extensions.conf
r1pc0[preserve]=/root/pjsua.cfg:/root/debussy.wav
r1pc1[preserve]=/root/pjsua.cfg:/root/debussy.wav
</syntaxhighlight>
Experimentos
Ligação direta entre terminais
Foi utilizado o aplicativo siprtp em ambos os terminais:
- Terminal 0, r0pc0 (192.168.0.100), que operará como UAS:
siprtp -i 192.168.0.100
</syntaxhighlight>
- Terminal 1, r0pc1 (192.168.0.101), que operará como UAC:
siprtp -i 192.168.0.101 sip:192.168.0.100
</syntaxhighlight>
Ligação intermediada por SIP Registrar/Proxy
Foi utilizado o aplicativo pjsua nos terminais e Asterisk no servidor:
- Servidor r0pbx0 (192.168.0.1) como SIP Registrar e Proxy. Foram configurados duas contas SIP no arquivos /etc/asterisk/sip.conf:
[100]
type=friend ; ambos os sentidos
host=dynamic
defaultuser=100
context=rmu20141
canreinvite=no
[101]
type=friend
host=dynamic
defaultuser=101
context=rmu20141
canreinvite=no
</syntaxhighlight>
- E no arquivo /etc/asterisk/extensions.conf o plano de discagem:
[rmu20141]
exten => _1XX,1,Dial(SIP/${EXTEN})
exten => _1XX,n,Hangup()
</syntaxhighlight>
- Ainda no mesmo servidor, foi iniciado o serviço e verificadas as configurações (quem pode ligar, peers, e quem pode receber, users):
asterisk -c
sip show peers
sip show users
dialplan show rmu20141
</syntaxhighlight>
- Depois, foi configurada a primeira conta (100) no terminal r0pc0, no arquivos /root/pjsua.cfg:
--registrar sip:192.168.0.1
--proxy sip:192.168.0.1;lr
--realm *
--id sip:100@192.168.0.1
--username 100
--local-port 5060
--null-audio
</syntaxhighlight>
- O mesmo foi feito para a segunda conta (101), em r0pc1 (mesmo arquivo):
--registrar sip:192.168.0.1
--proxy sip:192.168.0.1;lr
--realm *
--id sip:101@192.168.0.1
--username 101
--local-port 5060
--null-audio
</syntaxhighlight>
- Para acompanhar o registro, foi ativada a depuração de mensagens SIP no servidor (na CLI do Asterisk):
sip set debug on
</syntaxhighlight>
- E, em cada terminal (r0pc0 e r0pc1), foi executado o comando que inicia o registro das contas SIP:
pjsua --config-file=/root/pjsua.cfg
</syntaxhighlight>
Por fim, faltou apenas iniciar uma chamada telefônica.
12/03
- SIP, aplicação em sala de ligação intracentral.
17/03
- SIP, intercentrais e modelo hierárquico e federado (com DNS).
- Adicionada a ferramenta de controle de versão dos arquivos.
24/03
Entrega: sinalização com SIP. A seguir, o roteiro.
- Em cada VM, iniciar o monitor de rede tshark (onde <maquina> é o nome da VM):
tshark -i eth0 -f "udp" -w /tmp/<maquina>.pcap &
</syntaxhighlight>
- Realizar a ligação entre: r0pc0 e r1pc1 (r0pc0-r0pbx0-r1pbx0-r1pc1) e r1pc0 e r0pc1 (r1pc0-r1pbx0-r0px0-r0pc1).
- Encerrar as ligações.
- Encerrar o monitor de rede. Em cada VM:
killall -TERM tshark
sleep 2
killall -KILL tshark
</syntaxhighlight>
- Copiar os arquivos gerados (*.pcap) para a máquina virtualizadora. O diretório /hostlab da VM se refere ao diretório lab da máquina real. Em cada VM (onde <maquina> é o nome da VM):
cp /tmp/<maquina>.pcap /hostlab/
</syntaxhighlight>
- Enviar, por email os 6 (seis) arquivos .pcap:
- lab/r0pc0.pcap
- lab/r0pc1.pcap
- lab/r0pbx0.pcap
- lab/r1pc0.pcap
- lab/r1pc1.pcap
- lab/r1pbx0.pcap
Descrição de Mídia
26/03
- Estudo de caso: Skype e o codec SILK.
- Descrição de mídia, SIP/SDP, codecs.
31/03
- SIP com SDP, definição de codecs. Roteiro utilizado a seguir.
- Configuração para a colagem do repositório Git:
cat > ${HOME}/.gitconfig << EOF
[http]
sslVerify = no
EOF
cd /tmp/
git clone https://tele.sj.ifsc.edu.br/projetos/rmu20141
cd rmu20141/cenario0
~/netkit/bin/gnome-netkit
- Em cada VM:
tshark -i eth0 -f udp -w /tmp/MAQUINA.pcap -q &
- Somente nos PBXs:
/usr/local/asterisk/sbin/asterisk -c
- Somente nos terminais:
pjsua --config-file=pjsua.cfg
- Em r0pc0 ligar para D (r1pc1):
m
sip:0101@192.168.0.1
- Em r0pc0 verificar a qualidade da ligação:
dq
- Em r1pc1 atender a ligação:
a
200
- Em r1pc1 verificar a qualidade da ligação:
dq
- Em r0pc0 parar o processo pjsua, copiar o arquivo e retomar o mesmo:
Ctrl + z
cp /tmp/r0pc0.pcap /hostlab/
fg
- O mesmo em r1pc1:
Ctrl + z
cp /tmp/r0pc0.pcap /hostlab/
fg
- Na máquina virtualizadora:
wireshark /tmp/rmu20141/cenario0/lab/r0pc0.pcap &
wireshark /tmp/rmu20141/cenario0/lab/r1pc1.pcap &
- Nos PBXs parar o processo Asterisk, editar os codecs e retomar o mesmo:
Ctrl + z
cat > /etc/asterisk/sip.conf << EOF
[100]
disallow=all
allow=alaw
[101]
disallow=all
allow=alaw
[r0pbx0-r1pbx0]
disallow=all
allow=alaw
[r1pbx0-r0pbx0]
disallow=all
allow=alaw
EOF
fg
sip reload
- Em r0pc0 desligar a atual ligação e ligar para D, verificando posteriormente a qualidade da ligação:
h
m
sip:0101@192.168.0.1
dq
- Em r1pc1 atender a ligação:
a
200
dq
- Em r0pc0 copiar a captura de rede:
Ctrl + z
cp /tmp/r0pc0.pcap /hostlab/
fg
- Em r1pc1 idem:
Ctrl + z
cp /tmp/r1pc1.pcap /hostlab/
fg
02/04
Entrega: codecs personalizados por canal/tronco.
- Configurar o ambiente para clonar o repositório git com as configurações vistas em aula:
cat > $HOME/.gitconfig << EOF
[http]
sslVerify=no
EOF
- Para evitar sobreposição de arquivos, e como o git é um DCVS, é fortemente recomendado o seu uso no diretório /tmp:
cd /tmp
rm -rf rmu20141
git clone https://tele.sj.ifsc.edu.br/projetos/rmu20141
cd rmu20141/cenario0
gnome-netkit
e abrir o laboratório /tmp/rmu20141/cenario0/lab.conf.
- Rodar os casos de ligações entre A-M-N-D e C-N-M-B (8 no total):
- As ligações são estabelecidas utilizando apenas G711 lei A (alaw); ou seja, em ambos os sentidos em cada ligação.
- As ligações são estabelecidas utilizando apenas GSM (gsm).
- As ligações não podem ser estabelecidas por incompatibilidade de codec.
- As ligações podem ser estabelecidas porque há um 'gateway' de mídia; ou seja, a transcodificação é necessária - em ambos os sentidos.
Dicas: o que ajuda no Asterisk de comando:
core show translation
core show channels
core show channel (nome do canal)
Transmissão de Mídia
07/04
- Estudo de caso: Há quase 10 anos, já se falava em compartilhamento e controle remoto de tela com RTP.
- Transmissão de mídia, RTP/RTcP.
09/04
- Transmissão de mídia, RTP/RTcP.
14/04
- Transmissão de mídia, RTP/RTcP.
16/04
- Transmissão de mídia, RTP/RTcP.
- Mudado o cenário: agora são dois roteadores com enlace PPP, com taxa de transmissão limitada, interligando-os (commit 0674122088242986472548f6bdf05dcef8fa777f do repositório).
- Nota: o antigo está disponível no repositório (versões antigas) ou em arquivo compactado.
23/04
Entrega 3 com 3 casos:
- 1 ligação sem perdas.
- Perda em 1 ligação (enlace PPP com taxa de transmissão insuficiente, provavelmente 56Kbps).
- Perda a partir da 2a. ligação concorrente e latência aumentada para 200ms no enlace PPP.
Exemplo de configuração do ambiente: versão c2e43743718c84fb1dc7818440f27d6d3457f269 do repositório.
Qualidade de Serviço
28/04
- Estudo de caso: Implementando qualidade de serviço para VoIP usando Cisco.
- Qualidade de serviço.
Leituras sugeridas para próxima aula
Recomendável, mas não obrigatório, pode-se ler também a RFC do TOS (Type Of Service)
30/04
- Classificação, marcação, política e aplicação (inclui shaping).
- TOS e DSCP e 802.1p.
- Atividade do dia: definir 3 casos de qualidade de serviço:
- Somente nas redes locais;
- Somente nos roteadores;
- Entre redes.
Para as próximas aulas: como implementar em cada caso:
- Como classificar o tráfego (e que tráfego)?
- Como marcar pacotes?
- Como definir e implantar políticas?
- Como verificar se descarte ou atraso estão, de fato, acontecendo?
05/05
- Filas e priorização em redes sem QoS.
- Entrega: ambiente com e sem protocolo de QoS.
- Leitura: RFC 2475, RFC 2474 e RFC 2460.
- A verificar: sala de conferência do servidor de Tele.
IP e Qualidade de Serviço
07/05
- Estatíticas de uso (Cisco): http://6lab.cisco.com/stats/
- IPv4, NAT, STUN, ICE, túneis (seguros ou não).
- 802.1p.
12/05
- IPv4, NAT, STUN, ICE, túneis (seguros ou não).
- TOS e DSCP.
- RFC 4594.
- Material de referência: http://eriberto.pro.br/wiki/index.php?title=Controle_de_tráfego_com_TC%2C_HTB_e_Iptables
Segue definições feitas em sala hoje.
1-Sinalização:
- 0 à 10Kbps.
- Perda zero.
- Latência boa.
- Prioridade máxima.
2-Transmissão:
- 100 à 500Kbps.
- Perda tendendo a zero.
- Latência baixa.
- Prioridade zero.
3-Demais:
- Resto da taxa de transmissão.
- Perda aceitável.
- Latência suficiente.
- Prioridade baixa.
14/05
- IPv6.
- Traffic class.
19/05
- IPv6.
- Traffic class.
21/05
- IPv6.
- Entrega: ligação entre canais com terminações IPv4 e IPv6.
- ATUALIZAÇÃO: problemas com a versão do Quagga no Netkit original (0.99.11, quando deveria ser 0.99.18+). A entrega, assim, será feita APENAS com a configuração.
- ATUALIZAÇÃO 2: como o serialemu consome mais recursos que o enlace Ethernet convencional, e requer endereço inicial para ativar a interface, serão utilizados enlaces Ethernet entre os roteadores.
26/05
- Roteamento dinâmico com OSPF.
- Comandos úteis para o processo ospfd do Quagga:
ps aux | grep zebra
ps aux | grep ospfd
telnet localhost 2604
> show ip ospf neighbor
> show ip ospf interface eth0
> show ip ospf area 0.0.0.0 spf tree
> show ip ospf route
> show ip ospf database
</syntaxhighlight>
28/05
- IPv6: endereçamento, endereços reservados (RFC 4291, resumido pela RIPE.net), roteamento.
Exemplo de configuração do nosso cenário:
<graphviz>
graph IPv6 {
A [shape=record,label="<0>Terminal A|<1>eth0"]
B [shape=record,label="<0>Roteador B|<1>eth0|<2>eth1"]
C [shape=record,label="<0>Roteador C|<1>eth0|<2>eth1"]
D [shape=record,label="<0>Terminal D|<1>eth0"]
A:1 -- B:1 [label="2804:1454::/64"]
B:2 -- C:1 [label="2804:1454:0:1::/64"]
C:2 -- D:1 [label="2804:1454:0:2::/64"]
}
</graphviz>
Configuração de roteamento baseada na RFC 4861, seção 8, parágrafo 3:
- Terminal A:
ip -6 addr add 2804:1454::1/64 dev eth0
ip -6 route add 2804:1454:0:1::/64 dev eth0 via <B:eth0 link-local> #B-C
ip -6 route add 2804:1454:0:2::/64 dev eth0 via <B:eth0 link-local> #C-D
- Roteador B:
ip -6 addr add 2804:1454::2/64 dev eth0
ip -6 addr add 2804:1454:0:1::1/64 dev eth1
ip -6 route add 2804:1454:0:2::/64 dev eth1 via <C:eth0 link-local> #C-D
sysctl -w net.ipv6.conf.all.forwarding=1
- Roteador C:
ip -6 addr add 2804:1454:0.2::2/64 dev eth0
ip -6 addr add 2804:1454:0:2::1/64 dev eth1
ip -6 route add 2804:1454::/64 dev eth0 via <B:eth1 link-local> #A-B
sysctl -w net.ipv6.conf.all.forwarding=1
- Terminal D:
ip -6 addr add 2804:1454:0:2::2/64 dev eth0
ip -6 route add 2804:1454::/64 dev eth0 via <C:eth1 link-local> #A-B
ip -6 route add 2804:1454:0:1::/64 dev eth0 via <C:eth1 link-local> #B-C
Para visualizar a tabela de roteamento:
- No OSPF6d (via telnet ::1 2606): show ipv6 ospf6 route
- No Zebra (via telnet localhost 2601): show ipv6 route
- No Linux (CLI): ip -6 route show
Segurança
02/06
- Estudo de Google Hangouts.
- Criptografia.
- SSL, TLS, SIP com TLS.
04/06
- SRTP e zRTP.
Obs.: Para estudar os itens acima, nos próximos experimentos, não iremos mais utilizar o Netkit, mas sim a máquina virtual.
PBX Asterisk + SIP TLS + SRTP
Objetivo inical da aula: compilar o asterisk.
Passos seguidos:
- Instalação de dependências básicas do Asterisk:
sudo apt-get install build-essential libncurses-dev libxml2-dev libsqlite3-dev
- Instalação de dependências do Asterisk para suporte a TLS e SRTP:
sudo apt-get install openssl libssl-dev libsrtp-dev
- Compilação e instalação do Asterisk com esse suporte:
cd /usr/local/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11-current.tar.gz
tar xzf asterisk-11-current.tar.gz
rm asterisk-11-current.tar.gz
cd asterisk-11*
./configure --prefix=/usr/local/asterisk-11 --exec-prefix=/usr/local/asterisk-11 --with-ssl --with-srtp
make clean menuselect all install samples
- Criação do certificado para o uso de SIP sobre TLS. Por algum motivo ainda desconhecido, o Asterisk busca o certificado no diretório raiz, mesmo que o endereço esteja completo no arquivo de configuração (como será visto a seguir):
cd /usr/local/asterisk-11
openssl req -new -nodes -days 365 -x509 -out etc/asterisk.pem -keyout etc/asterisk.pem
ln -s etc/asterisk.pem asterisk.pem
- Configuração do Asterisk com o mesmos ramais 100 e 101 usados na disciplina - baseada em https://wiki.asterisk.org/wiki/display/AST/Secure+Calling+Tutorial
cd /usr/local/asterisk-11
cat > etc/sip.conf << FIM
[general]
tcpenable=no
tlsenable=yes
transport=udp,tls
tlsbindaddr=0.0.0.0
tlscertfile=/usr/local/asterisk-11/etc/asterisk.pem
tlsprivatekey=/usr/local/asterisk-11/etc/asterisk.pem
tlsdontverifyserver=yes
[100]
context=rmu20141
#
# SIP
type=friend
host=dynamic
defaultuser=100
qualify=yes
#
# SDP
disallow=all
allow=alaw
#
# RTP
directmedia=no
#
# Protocolo de transporte: apenas SIP sobre TLS.
transport=tls
#
# Criptografia de áudio (SRTP)?
encryption=yes
[101]
context=rmu20141
#
# SIP
type=friend
host=dynamic
defaultuser=101
qualify=yes
#
# SDP
disallow=all
allow=alaw
#
# RTP
directmedia=no
#
# Protocolo de transporte: apenas SIP sobre TLS.
transport=tls
#
# Criptografia de áudio (SRTP)?
encryption=yes
FIM
- Configuração do plano de discagem mantido:
cd /usr/local/asterisk-11
cat > etc/extensions.conf << FIM
[rmu20141]
exten => _1XX,1,Dial(SIP/${EXTEN})
exten => _1XX,n,Hangup()
exten => _0.,1,Dial(SIP/r0pbx0-r1pbx0/${EXTEN:1})
exten => _0.,n,Hangup()
FIM
- Para executar o Asterisk:
cd /usr/local/asterisk-11
sbin/asterisk
sbin/asterisk -rx 'sip show settings'
sbin/asterisk -rx 'core set verbose 20'
sbin/asterisk -rx 'core set debug 20'
sbin/asterisk -r
Cliente Blink + SIP TLS + SRTP
- Primeiramente, é necessário instalar o aplicativo- com base em http://projects.ag-projects.com/projects/documentation/wiki/Repositories. Será assumida a versão 12-04 LTS do Ubuntu no cliente:
wget http://download.ag-projects.com/agp-debian-gpg.key -O - | sudo apt-key add -
sudo cat > /etc/apt/sources.list.d/blink.list << FIM
deb http://ag-projects.com/ubuntu quantal main
FIM
sudo apt-get update
sudo apt-get install blink
blink
- Em seguida, ao rodar a primeira vez, pode-se ignorar a configuração facilitada de conta.
- Deve-se, no menu, escolher a opção de gerenciar contas, e adicionar no botão [+] embaixo à equerda.
- Na nova janela, informar os parâmetros:
- Conta: nome/número do usuário + domínio. Ex.: 100@192.168.1.1, onde 100 é o usuário e 192.168.1.1 o endereço IP do PBX.
- Senha: não é necessário informar.
- SIP sobre TLS:
- Servidor Proxy: o mesmo endereço informado em domínio.
- Porta: 5061 - conforme https://tools.ietf.org/html/rfc3261#section-18.2.
- Protocolo: TLS.
- SRTP:
- Em SRTP, marcar como obrigatório (mandatory).
O TCC de Patricia e Paulo Vitor (Arquivo:TCC PatriciaDomingosPauloVitorChirolli.pdf) tratam de segurança em sinalização/descrição de mídia e transmissão de mídia: páginas 53 a 58 (configuração) e 61 a 65 (capturas de tela do aplicativo e tráfego da rede com Wireshark).
09/06
- Criptografia opcional e obrigatório.
- Entrega: sinalização e mídia criptografados sob demanda, opcional e obrigatório.
11/06
- Entrega: criptografia de sinalização e de mídia.
Projeto Final
18/06
Para quem não quiser ter o trabalho de fazer a ligação das máquinas:
- Geral
global[compact]=False
global[mem]=32
global[clean]=False
- Equipamentos
- REDE 1 ###########################
router1[type]=router
swR1[type]=switch
swR1[mem]=16
pbxR1[type]=pbx
pbxR1[mem]=64
pc1R1[type]=generic
pc2R1[type]=generic
- links
router1[eth0]=r1-swR1
router1[eth1]=r1-r2
router1[eth2]=uplink:bridge=eth0:ip=dhcp
swR1[eth0]=sw1-pbxR1
swR1[eth1]=r1-swR1
swR1[eth2]=sw1-pc1R1
swR1[eth3]=sw1-pc2R1
pbxR1[eth0]=sw1-pbxR1
pc1R1[eth0]=sw1-pc1R1
pc2R1[eth0]=sw1-pc2R1
- preservar arquivos
pbxR1[preserve]=/usr/local/asterisk/etc
pc1R1[preserve]=/root/
pc2R1[preserve]=/root/
- REDE 2 ###########################
router2[type]=router
swR2[type]=switch
swR2[mem]=16
pbxR2[type]=pbx
pbxR2[mem]=64
pc1R2[type]=generic
pc2R2[type]=generic
- links
router2[eth0]=r2-swR2
router2[eth1]=r1-r2
swR2[eth0]=sw2-pbxR2
swR2[eth1]=r2-swR2
swR2[eth2]=sw2-pc1R2
swR2[eth3]=sw2-pc2R2
pbxR2[eth0]=sw2-pbxR2
pc1R2[eth0]=sw2-pc1R2
pc2R2[eth0]=sw2-pc2R2
- preservar arquivos
pbxR2[preserve]=/usr/local/asterisk/etc
pc1R2[preserve]=/root/
pc2R2[preserve]=/root/
</syntaxhighlight>
23/06
A configuração do provedor está disponível para consulta:
- Servidor 200.135.233.20:
- SIP Registrar.
- SIP Proxy.
- STUN (RFC 5389).
- sip.conf.
- extensions.conf.
02/07
Defesa do projeto final:
- Sinalização:
- Estabelecimento de ligação intercentrais.
- Estabelecimento de ligação com o servidor externo.
- Descrição de mídia:
- Onde, no cenário global, é possível a transcodificação?
- Em qualquer ligação (anterior), indique que codec(s) foi(ram) utilizado(s).
- Transmissão de mídia:
- Realize uma transmissão envolvendo ambos os protocolos IPv4 e IPv6.
- Em qualquer ligação (anterior), indique quais centrais atuaram como gateways de mídia.
- Qualidade de serviço:
- Mostre o código de classificação e marcação de pacotes nos roteadores.
- Mostre os pacotes de sinalização e de transmissão modificados pelas políticas de qualidade de serviço.
- Segurança:
- Realize uma ligação sobre SIP+TLS.
- Realize uma ligação sobre SIP+TLS e SRTP.
Novas Tecnologias
- Estudo de caso: WebRTC.
- Novas tecnologias e a WWW.
- Servidor Web, HTML5, Javascript.
- HTML5, Javascript, WebRTC.
- HTML5, Javascript, WebRTC.
- Entrega: ligação entre ramal analógico e canal WebRTC.