Sip com Qos
Topologia da Rede:
SoftPhone A:
eth1 = 192.168.1.33/24
SoftPhone B:
eth1 = 192.168.1.34/24
Central Sip C:
eth1 = 192.168.1.133/24
eth2 = 192.168.13.1/24
Central Sip D:
eth1 = 192.168.1.134/24
eth2 = 192.168.33.2/24
Roteador E:
eth1 = 192.168.13.2/24
eth2 = 192.168.23.1/24
Roteador F:
eth1 = 192.168.33.1/24
eth2 = 192.168.23.2/24
Registro com SoftPhone Jitsi:
SoftPhone A:
a@192.168.1.133
SoftPhone B:
b@192.168.1.134
Configuração de interfaces:
Central Sip C:
# "Matando dhclient"
killall -9 dhclient
# Configurando DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf
# Derrubando todas interfaces
ifconfig eth1 down
ifconfig eth2 down
# Ativando todas interfaces
ip link set eth1 up
ip link set eth2 up
# Configurando ip/rede das interfaces
ip -4 address add 192.168.13.1/24 broadcast 192.168.13.255 dev eth1 scope site
ip -4 address add 192.168.1.133/24 broadcast 192.168.1.255 dev eth2 scope site
# Configurando rotas
ip -4 route add 192.168.23.0/24 via 192.168.13.2 scope site
ip -4 route add 192.168.33.0/24 via 192.168.13.2 scope site
# Rota padrao para internet
ip -4 route add 0.0.0.0/0 via 192.168.1.1 scope global
# Coamndo usado para gravar pacotes e abrir depois com o wireshark:
# tcpdump -n -i any -w /tmp/servidor.pcap
Central Sip D:
# "Matando dhclient"
killall -9 dhclient
# Configurando DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf
# Derrubando todas interfaces
ifconfig eth1 down
ifconfig eth2 down
# Ativando todas interfaces
ip link set eth1 up
ip link set eth2 up
# Configurando ip/rede das interfaces
ip -4 address add 192.168.33.2/24 broadcast 192.168.33.255 dev eth1 scope site
ip -4 address add 192.168.1.134/24 broadcast 192.168.1.255 dev eth2 scope site
# Configurando rotas
ip -4 route add 192.168.23.0/24 via 192.168.33.1 scope site
ip -4 route add 192.168.13.0/24 via 192.168.33.1 scope site
# Rota padrao para internet
ip -4 route add 0.0.0.0/0 via 192.168.1.1 scope global
# Coamndo usado para gravar pacotes e abrir depois com o wireshark:
# tcpdump -n -i any -w /tmp/servidor.pcap
Roteador E:
# "Matando dhclient"
killall -9 dhclient
# Configurando DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf
# Derrubando todas interfaces
ifconfig eth1 down
ifconfig eth2 down
# Ativando todas interfaces
ip link set eth1 up
ip link set eth2 up
# Configurando ip/rede das interfaces
ip -4 address add 192.168.13.2/24 broadcast 192.168.13.255 dev eth1 scope site
ip -4 address add 192.168.23.1/24 broadcast 192.168.23.255 dev eth2 scope site
# Configurando rotas
ip -4 route add 192.168.33.0/24 via 192.168.23.2 scope site
# Habilitando roteamento
sysctl -w net.ipv4.conf.all.forwarding=1
# Coamndo usado para gravar pacotes e abrir depois com o wireshark:
# tcpdump -n -i any -w /tmp/servidor.pcap
Roteador F:
# "Matando dhclient"
killall -9 dhclient
# Configurando DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf
# Derrubando todas interfaces
ifconfig eth1 down
ifconfig eth2 down
# Ativando todas interfaces
ip link set eth1 up
#ip link set eth2 up
# Configurando ip/rede das interfaces
ip -4 address add 192.168.33.1/24 broadcast 192.168.33.255 dev eth1 scope site
ip -4 address add 192.168.23.2/24 broadcast 192.168.23.255 dev eth2 scope site
# Configurando rotas
ip -4 route add 192.168.13.0/24 via 192.168.23.1 scope site
# Habilitando roteamento
sysctl -w net.ipv4.conf.all.forwarding=1
# Coamndo usado para gravar pacotes e abrir depois com o wireshark:
# tcpdump -n -i any -w /tmp/servidor.pcap
Configurando Centrais Sip:
Central SIP C:
/etc/asterisk/sip.conf:
[general]
[a]
type=friend
context=rmu20142
;
; SIP
host=dynamic
qualify=yes
insecure=port,invite
;
; SDP
disallow=all
allow=alaw
allow=ulaw
allow=gsm
[cd-ipv4]
type=peer
context=rmu20142
;
; SIP
host=192.168.33.2
qualify=yes
insecure=port,invite
;
; SDP
directmedia=no
disallow=all
allow=alaw
[dc-ipv4]
type=user
context=rmu20142
;
; SIP
host=192.168.33.2
qualify=yes
insecure=port,invite
;
; SDP
directmedia=no
disallow=all
allow=alaw
/etc/asterisk/extensions.conf:
[rmu20142]
;
; Local: "100" ou "a"
exten => 100,1,Dial(SIP/a)
exten => 100,2,Hangup()
exten => a,1,Dial(SIP/\${EXTEN})
exten => a,2,Hangup()
;
; Remoto via tronco SIP: "0" antecipando demais caracteres
exten => _0.,1,Dial(SIP/cd-ipv4/\${EXTEN:1})
exten => _0.,2,Hangup()
Central SIP D:
/etc/asterisk/sip.conf:
[general]
[b]
type=friend
context=rmu20142
;
; SIP
host=dynamic
qualify=yes
insecure=port,invite
;
; SDP
disallow=all
allow=alaw
allow=ulaw
allow=gsm
[cd-ipv4]
type=user
context=rmu20142
;
; SIP
host=192.168.13.1
qualify=yes
insecure=port,invite
;
; SDP
directmedia=no
disallow=all
allow=alaw
[dc-ipv4]
type=peer
context=rmu20142
;
; SIP
host=192.168.13.1
qualify=yes
insecure=port,invite
;
; SDP
directmedia=no
disallow=all
allow=alaw
/etc/asterisk/extensions.conf:
[rmu20142]
;
; Local: "100" ou "b"
exten => 100,1,Dial(SIP/b)
exten => 100,2,Hangup()
exten => b,1,Dial(SIP/\${EXTEN})
exten => b,2,Hangup()
;
; Remoto via tronco SIP: "0" antecipando demais caracteres
exten => _0.,1,Dial(SIP/dc-ipv4/\${EXTEN:1})
exten => _0.,2,Hangup()
Aplicando QoS:
Central Sip C:
#!/bin/bash
#
# 20140511 Ederson Torrresini: funções para os outros scripts.
limpeza()
{
iptables -t mangle -F
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t filter -F
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT
}
mostrar_regras()
{
echo "Tabela mangle:"
iptables -t mangle -L -n -v
echo ""
echo "Tabela filter:"
iptables -t filter -L -n -v
}
case ${1} in
"limpeza")
limpeza
mostrar_regras
;;
"mostrar_regras")
mostrar_regras
;;
esac
#!/bin/bash
#
# 20140511 Ederson Torrresini: classificação e marcação dos pacotes na interface interna (eth0).
#
# Nota: na tabela mangle a última linha que corresponde ao padrão (last match) é utilizada, ao contrário
# das tabelas filter e nat. Por isso, as regras devem ser escritas ao contrário quando há conflito
# ou correspondência em mais de uma regra - detalhe para a da classe 2, que abrange qualquer pacote.
# Classe 2: a qualquer protocolo se recomenda DF PHB - http://tools.ietf.org/html/rfc4594#page-47
iptables -t mangle -A OUTPUT -j DSCP --set-dscp 0
# Classe 1: ao transporte de áudio (RTP) se recomenda EF PHB - http://tools.ietf.org/html/rfc4594#page-31
iptables -t mangle -A OUTPUT -p udp -m multiport --dport 10000:20000 -j DSCP --set-dscp 46
# Classe 0: à sinalização de telefonia IP (SIP) se recomenda CS5 do DSCP - http://tools.ietf.org/html/rfc4594#page-33
iptables -t mangle -A OUTPUT -p udp --dport 5060 -j DSCP --set-dscp 40
iptables -t mangle -A OUTPUT -p tcp --dport 5060 -j DSCP --set-dscp 40
iptables -t mangle -A OUTPUT -p tcp --dport 5061 -j DSCP --set-dscp 40
mostrar_regras
Central Sip D:
#!/bin/bash
#
# 20140511 Ederson Torrresini: funções para os outros scripts.
limpeza()
{
iptables -t mangle -F
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t filter -F
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT
}
mostrar_regras()
{
echo "Tabela mangle:"
iptables -t mangle -L -n -v
echo ""
echo "Tabela filter:"
iptables -t filter -L -n -v
}
case ${1} in
"limpeza")
limpeza
mostrar_regras
;;
"mostrar_regras")
mostrar_regras
;;
esac
#!/bin/bash
#
# 20140511 Ederson Torrresini: classificação e marcação dos pacotes na interface interna (eth0).
#
# Nota: na tabela mangle a última linha que corresponde ao padrão (last match) é utilizada, ao contrário
# das tabelas filter e nat. Por isso, as regras devem ser escritas ao contrário quando há conflito
# ou correspondência em mais de uma regra - detalhe para a da classe 2, que abrange qualquer pacote.
# Classe 2: a qualquer protocolo se recomenda DF PHB - http://tools.ietf.org/html/rfc4594#page-47
iptables -t mangle -A OUTPUT -j DSCP --set-dscp 0
# Classe 1: ao transporte de áudio (RTP) se recomenda EF PHB - http://tools.ietf.org/html/rfc4594#page-31
iptables -t mangle -A OUTPUT -p udp -m multiport --dport 10000:20000 -j DSCP --set-dscp 46
# Classe 0: à sinalização de telefonia IP (SIP) se recomenda CS5 do DSCP - http://tools.ietf.org/html/rfc4594#page-33
iptables -t mangle -A OUTPUT -p udp --dport 5060 -j DSCP --set-dscp 40
iptables -t mangle -A OUTPUT -p tcp --dport 5060 -j DSCP --set-dscp 40
iptables -t mangle -A OUTPUT -p tcp --dport 5061 -j DSCP --set-dscp 40
mostrar_regras
Roteador E:
#!/bin/bash
#
# 20140511 Ederson Torrresini: funções para os outros scripts.
limpeza()
{
iptables -t mangle -F
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t filter -F
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT
}
mostrar_regras()
{
echo "Tabela mangle:"
iptables -t mangle -L -n -v
echo ""
echo "Tabela filter:"
iptables -t filter -L -n -v
}
case ${1} in
"limpeza")
limpeza
mostrar_regras
;;
"mostrar_regras")
mostrar_regras
;;
esac
#!/bin/bash
#
# 20140511 Ederson Torresini: estabelecimento da política de qualidade de serviço, em especial no
# enlace gargalo da rede do cenário 1, PPP, na interface externa (eth2).
#
# Nota: na tabela mangle a última linha que corresponde ao padrão (last match) é utilizada, ao contrário
# das tabelas filter e nat. Por isso, as regras devem ser escritas ao contrário quando há conflito
# ou correspondência em mais de uma regra - detalhe para a da classe 2, que abrange qualquer pacote.
# Definição da fila (queue discipline), a ser aplicada na interface externa, PPP, com taxa de 1Mbps.
tc qdisc del dev eth2 root
tc qdisc add dev eth2 root handle 1:0 htb default 12
tc class add dev eth2 parent 1:0 classid 1:1 htb rate 1Mbit
# Classe 2: a qualquer protocolo se recomenda DF PHB - http://tools.ietf.org/html/rfc4594#page-47
iptables -t mangle -A POSTROUTING -o eth2 -m dscp --dscp 0 -j CLASSIFY --set-class 1:12
# Classe 1: ao transporte de áudio (RTP) se recomenda EF PHB - http://tools.ietf.org/html/rfc4594#page-31
iptables -t mangle -A POSTROUTING -o eth2 -m dscp --dscp 46 -j CLASSIFY --set-class 1:11
# Classe 0: à sinalização de telefonia IP (SIP) se recomenda CS5 do DSCP - http://tools.ietf.org/html/rfc4594#page-33
iptables -t mangle -A POSTROUTING -o eth2 -m dscp --dscp 40 -j CLASSIFY --set-class 1:10
#!/bin/bash
#
# 20140511 Ederson Torrresini: aplicacao da política definida na interface externa (eth2).
#
# Nota: apesar de não haver sequência na escrita das classes,
# será mantida a mesma sequência para fins de legibilidade do código.
# Classe 2: demais protocolos
tc class add dev eth2 parent 1:1 classid 1:12 htb rate 900Kbit ceil 1000Kbit prio 2
# Classe 1: transporte de mídia (RTP)
tc class add dev eth2 parent 1:1 classid 1:11 htb rate 80Kbit ceil 100Kbit prio 1
# Classe 0: sinalização e descrição de mídia (SIP/SDP)
tc class add dev eth2 parent 1:1 classid 1:10 htb rate 5Kbit ceil 10Kbit prio 0
mostrar_regras
Roteador F:
#!/bin/bash
#
# 20140511 Ederson Torrresini: funções para os outros scripts.
limpeza()
{
iptables -t mangle -F
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t filter -F
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT
}
mostrar_regras()
{
echo "Tabela mangle:"
iptables -t mangle -L -n -v
echo ""
echo "Tabela filter:"
iptables -t filter -L -n -v
}
case ${1} in
"limpeza")
limpeza
mostrar_regras
;;
"mostrar_regras")
mostrar_regras
;;
esac
#!/bin/bash
#
# 20140511 Ederson Torresini: estabelecimento da política de qualidade de serviço, em especial no
# enlace gargalo da rede do cenário 1, PPP, na interface externa (eth2).
#
# Nota: na tabela mangle a última linha que corresponde ao padrão (last match) é utilizada, ao contrário
# das tabelas filter e nat. Por isso, as regras devem ser escritas ao contrário quando há conflito
# ou correspondência em mais de uma regra - detalhe para a da classe 2, que abrange qualquer pacote.
# Definição da fila (queue discipline), a ser aplicada na interface externa, PPP, com taxa de 1Mbps.
tc qdisc del dev eth2 root
tc qdisc add dev eth2 root handle 1:0 htb default 12
tc class add dev eth2 parent 1:0 classid 1:1 htb rate 1Mbit
# Classe 2: a qualquer protocolo se recomenda DF PHB - http://tools.ietf.org/html/rfc4594#page-47
iptables -t mangle -A POSTROUTING -o eth2 -m dscp --dscp 0 -j CLASSIFY --set-class 1:12
# Classe 1: ao transporte de áudio (RTP) se recomenda EF PHB - http://tools.ietf.org/html/rfc4594#page-31
iptables -t mangle -A POSTROUTING -o eth2 -m dscp --dscp 46 -j CLASSIFY --set-class 1:11
# Classe 0: à sinalização de telefonia IP (SIP) se recomenda CS5 do DSCP - http://tools.ietf.org/html/rfc4594#page-33
iptables -t mangle -A POSTROUTING -o eth2 -m dscp --dscp 40 -j CLASSIFY --set-class 1:10
#!/bin/bash
#
# 20140511 Ederson Torrresini: aplicacao da política definida na interface externa (eth2).
#
# Nota: apesar de não haver sequência na escrita das classes,
# será mantida a mesma sequência para fins de legibilidade do código.
# Classe 2: demais protocolos
tc class add dev eth2 parent 1:1 classid 1:12 htb rate 900Kbit ceil 1000Kbit prio 2
# Classe 1: transporte de mídia (RTP)
tc class add dev eth2 parent 1:1 classid 1:11 htb rate 80Kbit ceil 100Kbit prio 1
# Classe 0: sinalização e descrição de mídia (SIP/SDP)
tc class add dev eth2 parent 1:1 classid 1:10 htb rate 5Kbit ceil 10Kbit prio 0
mostrar_regras

Nenhum comentário:
Postar um comentário