quinta-feira, 11 de dezembro de 2014

Sip com Qos

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