Redes Multimídia (diário 2014-1): mudanças entre as edições
(166 revisões intermediárias por 6 usuários não estão sendo mostradas) | |||
Linha 7: | Linha 7: | ||
=Metodologia= | =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. | 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. | |||
* [http://wiki.sj.ifsc.edu.br/index.php/Netkit Netkit]. | |||
* [http://tele.sj.ifsc.edu.br/blog/ferramentas/projetos/ Repositório] dos arquivos do Netkit: | |||
** [[Controle de versão]] com [http://git-scm.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 [mailto:etorresini@ifsc.edu.br solicitação]. | |||
==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 34: | Linha 80: | ||
===26/02=== | ===26/02=== | ||
* SIP | * O protocolo SIP - RFC 3261. | ||
===10/03=== | ===10/03=== | ||
* SIP, | * SIP, intracentral. | ||
* Um cenário possível para o experimento: | * Um cenário possível para o experimento: | ||
<code> | <code> | ||
# Geral | # Geral | ||
global[compact]=False | |||
global[mem]=64 | |||
global[vm]=4 | |||
global[clean]=False | |||
global[path]=/tmp/rmu20141/cenario0/lab | |||
# Roteador | # Roteador | ||
rt0[type]=router | rt0[type]=router | ||
# Rede 0 | # Rede 0 | ||
# | # | ||
Linha 67: | Linha 118: | ||
r0pc0[default_gateway]=192.168.0.254 | r0pc0[default_gateway]=192.168.0.254 | ||
r0pc1[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 | # Rede 1 | ||
# | # | ||
Linha 90: | Linha 146: | ||
r1pc0[default_gateway]=192.168.1.254 | r1pc0[default_gateway]=192.168.1.254 | ||
r1pc1[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 <tt>siprtp</tt> em ambos os terminais: | |||
* Terminal 0, r0pc0 (192.168.0.100), que operará como UAS: | |||
<code> | |||
siprtp -i 192.168.0.100 | |||
</syntaxhighlight> | |||
* Terminal 1, r0pc1 (192.168.0.101), que operará como UAC: | |||
<code> | |||
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: | |||
<code> | |||
[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: | |||
<code> | |||
[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): | |||
<code> | |||
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: | |||
<code> | |||
--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): | |||
<code> | |||
--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): | |||
<code> | |||
sip set debug on | |||
</syntaxhighlight> | |||
* E, em cada terminal (r0pc0 e r0pc1), foi executado o comando que inicia o registro das contas SIP: | |||
<code> | |||
pjsua --config-file=/root/pjsua.cfg | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Por fim, faltou apenas iniciar uma chamada telefônica. | |||
===12/03=== | ===12/03=== | ||
* SIP, | * SIP, aplicação em sala de ligação intracentral. | ||
===17/03=== | ===17/03=== | ||
* | * SIP, intercentrais e modelo hierárquico e federado (com DNS). | ||
* | * Adicionada a [[#Ferramentas|ferramenta de controle de versão dos arquivos]]. | ||
===24/03=== | ===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): | |||
<code> | |||
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: | |||
<code> | |||
killall -TERM tshark | |||
sleep 2 | |||
killall -KILL tshark | |||
</syntaxhighlight> | |||
* Copiar os arquivos gerados (*.pcap) para a máquina virtualizadora. O diretório <tt>/hostlab</tt> da VM se refere ao diretório <tt>lab</tt> da máquina real. Em cada VM (onde <maquina> é o nome da VM): | |||
<code> | |||
cp /tmp/<maquina>.pcap /hostlab/ | |||
</syntaxhighlight> | |||
* Enviar, por [mailto:etorresini@ifsc.edu.br email] os 6 (seis) arquivos .pcap: | |||
** <tt>lab/r0pc0.pcap</tt> | |||
** <tt>lab/r0pc1.pcap</tt> | |||
** <tt>lab/r0pbx0.pcap</tt> | |||
** <tt>lab/r1pc0.pcap</tt> | |||
** <tt>lab/r1pc1.pcap</tt> | |||
** <tt>lab/r1pbx0.pcap</tt> | |||
==Descrição de Mídia== | |||
===26/03=== | ===26/03=== | ||
* SIP/SDP. | * Estudo de caso: [http://blogs.skype.com/2012/09/12/skype-and-a-new-audio-codec/ Skype e o ''codec'' SILK]. | ||
* Entrega: ''codecs'' personalizados por canal/tronco. | * 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: | |||
<syntaxhighlight lang=bash> | |||
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 | |||
</syntaxhighlight> | |||
* Em cada VM: | |||
<syntaxhighlight lang=bash> | |||
tshark -i eth0 -f udp -w /tmp/MAQUINA.pcap -q & | |||
</syntaxhighlight> | |||
* Somente nos PBXs: | |||
<syntaxhighlight lang=bash> | |||
/usr/local/asterisk/sbin/asterisk -c | |||
</syntaxhighlight> | |||
* Somente nos terminais: | |||
<syntaxhighlight lang=bash> | |||
pjsua --config-file=pjsua.cfg | |||
</syntaxhighlight> | |||
* Em r0pc0 ligar para D (r1pc1): | |||
<syntaxhighlight lang=bash> | |||
m | |||
sip:0101@192.168.0.1 | |||
</syntaxhighlight> | |||
* Em r0pc0 verificar a qualidade da ligação: | |||
<syntaxhighlight lang=bash> | |||
dq | |||
</syntaxhighlight> | |||
* Em r1pc1 atender a ligação: | |||
<syntaxhighlight lang=bash> | |||
a | |||
200</syntaxhighlight> | |||
* Em r1pc1 verificar a qualidade da ligação: | |||
<syntaxhighlight lang=bash> | |||
dq | |||
</syntaxhighlight> | |||
* Em r0pc0 parar o processo <tt>pjsua</tt>, copiar o arquivo e retomar o mesmo: | |||
<syntaxhighlight lang=bash> | |||
Ctrl + z | |||
cp /tmp/r0pc0.pcap /hostlab/ | |||
fg | |||
</syntaxhighlight> | |||
* O mesmo em r1pc1: | |||
<syntaxhighlight lang=bash> | |||
Ctrl + z | |||
cp /tmp/r0pc0.pcap /hostlab/ | |||
fg | |||
</syntaxhighlight> | |||
* Na máquina virtualizadora: | |||
<syntaxhighlight lang=bash> | |||
wireshark /tmp/rmu20141/cenario0/lab/r0pc0.pcap & | |||
wireshark /tmp/rmu20141/cenario0/lab/r1pc1.pcap & | |||
</syntaxhighlight> | |||
* Nos PBXs parar o processo Asterisk, editar os codecs e retomar o mesmo: | |||
<syntaxhighlight lang=bash> | |||
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 | |||
</syntaxhighlight> | |||
* Em r0pc0 desligar a atual ligação e ligar para D, verificando posteriormente a qualidade da ligação: | |||
<syntaxhighlight lang=bash> | |||
h | |||
m | |||
sip:0101@192.168.0.1 | |||
dq | |||
</syntaxhighlight> | |||
* Em r1pc1 atender a ligação: | |||
<syntaxhighlight lang=bash> | |||
a | |||
200 | |||
dq | |||
</syntaxhighlight> | |||
* Em r0pc0 copiar a captura de rede: | |||
<syntaxhighlight lang=bash> | |||
Ctrl + z | |||
cp /tmp/r0pc0.pcap /hostlab/ | |||
fg | |||
</syntaxhighlight> | |||
* Em r1pc1 idem: | |||
<syntaxhighlight lang=bash> | |||
Ctrl + z | |||
cp /tmp/r1pc1.pcap /hostlab/ | |||
fg | |||
</syntaxhighlight> | |||
===02/04=== | |||
Entrega: ''codecs'' personalizados por canal/tronco. | |||
* Configurar o ambiente para clonar o repositório <tt>git</tt> com as configurações vistas em aula: | |||
<syntaxhighlight lang=bash> | |||
cat > $HOME/.gitconfig << EOF | |||
[http] | |||
sslVerify=no | |||
EOF | |||
</syntaxhighlight> | |||
* Para evitar sobreposição de arquivos, e como o <tt>git</tt> é um [http://en.wikipedia.org/wiki/Distributed_revision_control DCVS], é fortemente recomendado o seu uso no diretório <tt>/tmp</tt>: | |||
<syntaxhighlight lang=bash> | |||
cd /tmp | |||
rm -rf rmu20141 | |||
git clone https://tele.sj.ifsc.edu.br/projetos/rmu20141 | |||
cd rmu20141/cenario0 | |||
gnome-netkit | |||
</syntaxhighlight> | |||
e abrir o laboratório <tt>/tmp/rmu20141/cenario0/lab.conf</tt>. | |||
* 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: | |||
<pre> | |||
core show translation | |||
core show channels | |||
core show channel (nome do canal) | |||
</pre> | |||
==Transmissão de Mídia== | ==Transmissão de Mídia== | ||
=== | ===07/04=== | ||
* Estudo de caso: [http://www.ietf.org/proceedings/62/slides/avt-9.pdf Há quase 10 anos, já se falava em compartilhamento e controle remoto de tela com RTP]. | * Estudo de caso: [http://www.ietf.org/proceedings/62/slides/avt-9.pdf Há quase 10 anos, já se falava em compartilhamento e controle remoto de tela com RTP]. | ||
* Transmissão de mídia, RTP/RTcP. | * 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. | * Transmissão de mídia, RTP/RTcP. | ||
* Entrega: | * Mudado o cenário: agora são dois roteadores com enlace PPP, com taxa de transmissão limitada, interligando-os (''commit'' <tt>0674122088242986472548f6bdf05dcef8fa777f</tt> do repositório). | ||
** Nota: o antigo está disponível no repositório (versões antigas) ou em [http://tele.sj.ifsc.edu.br/~etorresini/rmu20141/cenario0.tbz 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 <tt>c2e43743718c84fb1dc7818440f27d6d3457f269</tt> do repositório. | |||
==Qualidade de Serviço== | ==Qualidade de Serviço== | ||
=== | |||
===28/04=== | |||
* Estudo de caso: [http://www.cisco.com/c/en/us/td/docs/ios/solutions_docs/qos_solutions/QoSVoIP/QoSVoIP.html Implementando qualidade de serviço para VoIP usando Cisco]. | * Estudo de caso: [http://www.cisco.com/c/en/us/td/docs/ios/solutions_docs/qos_solutions/QoSVoIP/QoSVoIP.html Implementando qualidade de serviço para VoIP usando Cisco]. | ||
* Qualidade de serviço. | * Qualidade de serviço. | ||
=== | '''Leituras sugeridas para próxima aula''' | ||
* | * [https://tools.ietf.org/html/rfc2474 DSCP] | ||
* [https://tools.ietf.org/html/rfc4441 802.1] para cobrir o tópico da 802.1p | |||
Recomendável, mas não obrigatório, pode-se ler também a RFC do [https://www.ietf.org/rfc/rfc2873.txt 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. | * Filas e priorização em redes sem QoS. | ||
* Entrega: ambiente com e sem protocolo de 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. | |||
<center> | |||
[[Imagem:Diagrama_cenario1.png|800px]]<br/> | |||
Diagrama exposto em sala de aula. | |||
</center> | |||
===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. | |||
Diagrama da rede que estamos trabalhando:[[Arquivo:1_1.jpg]] | |||
===14/05=== | |||
* IPv6. | |||
* ''Traffic class''. | |||
[[Arquivo:MindnodeRMU.png]] | |||
===19/05=== | |||
* IPv6. | |||
* ''Traffic class''. | |||
Diagrama da aula: | |||
[[Arquivo:Cenario 2.png|800px]] | |||
===21/05=== | |||
* 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á 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. | |||
===26/05=== | |||
* Roteamento dinâmico com OSPF. | |||
** Comandos úteis para o processo <tt>ospfd</tt> do Quagga: | |||
<code> | |||
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 [http://www.ripe.net/lir-services/new-lir/ipv6_reference_card.pdf RIPE.net]), roteamento. | |||
Exemplo de configuração do nosso cenário: | |||
<center><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></center> | |||
Configuração de roteamento baseada na RFC 4861, seção 8, parágrafo 3: | |||
* Terminal A: | |||
<syntaxhighlight lang=bash> | |||
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 | |||
</syntaxhighlight> | |||
* Roteador B: | |||
<syntaxhighlight lang=bash> | |||
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 | |||
</syntaxhighlight> | |||
* Roteador C: | |||
<syntaxhighlight lang=bash> | |||
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 | |||
</syntaxhighlight> | |||
* Terminal D: | |||
<syntaxhighlight lang=bash> | |||
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 | |||
</syntaxhighlight> | |||
Para visualizar a tabela de roteamento: | |||
* No OSPF6d (via <tt>telnet ::1 2606</tt>): <tt>show ipv6 ospf6 route</tt> | |||
* No Zebra (via <tt>telnet localhost 2601</tt>): <tt>show ipv6 route</tt> | |||
* No Linux (CLI): <tt>ip -6 route show</tt> | |||
==Segurança== | ==Segurança== | ||
=== | ===02/06=== | ||
* Estudo de [https://support.google.com/a/answer/1279090 Google Hangouts]. | * Estudo de [https://support.google.com/a/answer/1279090 Google Hangouts]. | ||
* Criptografia. | * Criptografia. | ||
* SSL, TLS, SIP com TLS. | * SSL, TLS, SIP com TLS. | ||
=== | ===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=== | |||
* Criptografia opcional e obrigatório. | * Criptografia opcional e obrigatório. | ||
* Entrega: sinalização e mídia criptografados sob demanda, 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=== | |||
[[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== | ||
* Estudo de caso: [http://www.webrtc.org/reference/architecture WebRTC]. | * Estudo de caso: [http://www.webrtc.org/reference/architecture WebRTC]. | ||
* Novas tecnologias e a WWW. | * Novas tecnologias e a WWW. | ||
* Servidor Web, HTML5, Javascript. | * Servidor Web, HTML5, Javascript. | ||
* HTML5, Javascript, WebRTC. | * HTML5, Javascript, WebRTC. | ||
* HTML5, Javascript, WebRTC. | * HTML5, Javascript, WebRTC. | ||
* Entrega: ligação entre ramal analógico e canal WebRTC. | * Entrega: ligação entre ramal analógico e canal WebRTC. | ||
Edição atual tal como às 16h47min de 15 de julho de 2014
Endereço encurtado desta página: http://bit.ly/rmu20141
1 Sobre a disciplina
2 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.
2.1 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.
2.2 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 |
3 Aulas
3.1 Apresentação da disciplina e oportunidades
3.1.1 10/02
- Apresentação da disciplina: metodologia e avaliação.
3.1.2 12/02
- Definição da metodologia e escopo do problema: a rede de comunicação.
3.1.3 17/02
Não houve aula.
3.1.4 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.
3.2 Sinalização
3.2.1 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.
3.2.2 26/02
- O protocolo SIP - RFC 3261.
3.2.3 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>
3.2.3.1 Experimentos
3.2.3.1.1 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>
3.2.3.1.2 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.
3.2.5 17/03
- SIP, intercentrais e modelo hierárquico e federado (com DNS).
- Adicionada a ferramenta de controle de versão dos arquivos.
3.2.6 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
3.3 Descrição de Mídia
3.3.1 26/03
- Estudo de caso: Skype e o codec SILK.
- Descrição de mídia, SIP/SDP, codecs.
3.3.2 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
3.3.3 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)
3.4 Transmissão de Mídia
3.4.1 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.
3.4.4 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.
3.4.5 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.
3.5 Qualidade de Serviço
3.5.1 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)
3.5.2 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?
3.5.3 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.
3.6 IP e Qualidade de Serviço
3.6.1 07/05
- Estatíticas de uso (Cisco): http://6lab.cisco.com/stats/
- IPv4, NAT, STUN, ICE, túneis (seguros ou não).
- 802.1p.
3.6.2 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.
3.6.3 14/05
- IPv6.
- Traffic class.
3.6.4 19/05
- IPv6.
- Traffic class.
3.6.5 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.
3.6.6 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>
3.6.7 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
3.7 Segurança
3.7.1 02/06
- Estudo de Google Hangouts.
- Criptografia.
- SSL, TLS, SIP com TLS.
3.7.2 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.
3.7.2.1 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
3.7.2.2 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).
3.7.3 09/06
- Criptografia opcional e obrigatório.
- Entrega: sinalização e mídia criptografados sob demanda, opcional e obrigatório.
3.8.1 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>
3.8.2 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.
3.8.3 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.
3.9 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.