Asterisk não funciona com 2 links com CentOS 6.3 [RESOLVIDO]

25. Re: Asterisk não funciona com 2 links com CentOS 6.3 [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 30/12/2013 - 17:04h

estefaniobrunha escreveu:

Não deu certo, tentei! Como você mesmo disse, meus pacotes estão no chain output, pois são as resposta do chain input, então e como falei no meu tópico anterior, não vejo como fazer as regras, para mim as regras forward e postrouting e prerouting não faz sentido.


Eu lanço regras com o ip route nas tabelas auxiliares, na tabela main, que é a usando pelo kernel, ele mesmo cria automático, que gerencia melhor do que eu.



Você tem DHCP nessa máquina?

E essas regras peguei de arquivos de configurações que eu tinha com Asterisk quando trabalhava com ele, e funcionavam.

Acredito que o teu problema aí é pouca coisa.


  


26. Re: Asterisk não funciona com 2 links com CentOS 6.3 [RESOLVIDO]

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 31/12/2013 - 12:13h

Buckminster escreveu:

estefaniobrunha escreveu:

Não deu certo, tentei! Como você mesmo disse, meus pacotes estão no chain output, pois são as resposta do chain input, então e como falei no meu tópico anterior, não vejo como fazer as regras, para mim as regras forward e postrouting e prerouting não faz sentido.


Eu lanço regras com o ip route nas tabelas auxiliares, na tabela main, que é a usando pelo kernel, ele mesmo cria automático, que gerencia melhor do que eu.



Você tem DHCP nessa máquina?

E essas regras peguei de arquivos de configurações que eu tinha com Asterisk quando trabalhava com ele, e funcionavam.

Acredito que o teu problema aí é pouca coisa.


Não tenho dhcp neste servidor, uma coisa que eu não falei porque achei que já estava subentendido, e que os testes foram feitos usando 3 links.

Somente enfatizando, meu servidor já funciona a anos, e todos os telefones remotos sempre conectaram quando estou usando apenas um link. Hoje tenho um servidor firewall separado e um servidor de voip separado, a intenção era juntos os dois, e economizar uma maquina, energia, nobread etc... Este servidor voip sempre funcionou sem regras de iptables com o link ligado direto.

Senário simples para ver o comportamento do servidor voip com 2 links


Servidor: voip+2links

eth0: 192.168.0.254 rede lan todos os telefones nesta rede funcionam bem

Link 1 e 2 do servidor
eth1: 200.150.10.99 link1 onde todos os telefones remotos vão se conectar
eth2: 10.2.0.254 link2 (externo 201.17.255.228 dinâmico) que por hora esta parado

3 Link Telefone remoto

Esta ligado direto no route com todos os previlegios e consegue conectar no servidor(voip) somente quando o link2 esta desativado

Ainda continuo incrédulo quando ao forward/prerouting/prostrouting, para este servidor(voip+2link), ele esta com a eth0 200.150.10.99 para ele, não acredito que qualquer software rodando dentro desta maquina precise do forward/preroutind/prostrouting! Afinal o kernel só vai tratar o input e o output. O senário acima e o mais básico para ver o funcionamento.

Estou usando asterisk 11.7

vou deixar para quebrar a cabeça ano que vem kk

Buckminster, obrigado pela atenção, feliz 2014, tudo de bom, sucesso!





















27. Re: Asterisk não funciona com 2 links com CentOS 6.3 [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 31/12/2013 - 19:02h

Veja bem, o fato de estar usando 2 links, 3 links, 4 links, etc, nesse caso não influencia muito. O ponto é que você colocou um link a mais e o sistema provavelmente está se perdendo aí porque você não definiu o caminho de cada um.

O Iptables é praticamente um módulo do kernel (ou melhor, são vários módulos) e para ele o tratamento dos processos locais depende, basicamente, dos IPs e dos MACs.

Veja essas explicações matadoras do Mestre Elgio Schlemer no Artigo "Estrutura do Iptables" na página 2:

"Conforme pode ser observado na Figura 1, um datagrama IP dentro do kernel do Linux passa por várias etapas. Basicamente um datagrama IP é de um dentre três tipos:

1. O datagrama chegou por uma de suas interfaces, o nível de enlace viu o seu mac address no quadro ethernet. Contudo o datagrama não é destinado ao número IP desta máquina. Se a máquina não for configurada para atuar como roteador, o datagrama é descartado. Se a máquina estiver atuando como roteador, o datagrama deve ser roteado por ela.

2. O datagrama chegou por uma de suas interfaces, o nível de enlace viu o seu mac address no quadro ethernet e ele é destinado ao IP desta máquina, logo deve ser entregue a um de seus processos locais (se for HTTP, por exemplo, deve ser entregue ao apache).

3. O datagrama IP foi gerado por um de seus processos locais, por um cliente de email por exemplo, e deve ser repassado a outra máquina.
Cada datagrama passa por uma etapa de roteamento, onde o kernel decide para onde ele vai. Nesta etapa é que são consultadas, se for o caso, as tabelas de roteamento. Os do tipo 1 devem serem roteados para fora da máquina, que no caso deve estar atuando como roteador, sendo que na etapa de roteamento o kernel decide qual o próximo ponto de rota que deve ser usada. Se for para o IP desta máquina, é o roteamento que verifica isto (isto é, recebe o datagrama, vê que é local e entrega ao nível de transporte, que irá repassá-lo ao processo correspondente).

Da mesma forma, pacotes os gerados por processos locais também passam pelo roteamento para serem encaminhados. Logo, todos os datagramas passam, de uma forma ou de outra, pela etapa de roteamento.

Caso ele precise ser repassado a outra máquina (somente se ela estiver atuando como roteador IP), a etapa de "repasse de pacotes" realiza as alterações necessárias, como a reescrita total do cabeçalho de enlace (trocando o MAC origem para o seu), atualização do TTL, etc. Evidente que isto após a decisão de roteamento, pois a escrita do cabeçalho de enlace leva em conta o destino."

E veja esta outra, também dele, no Artigo "Estrutura do Iptables 2", página 2:

Lista nat PREROUTING

"Nesta lista irão as regras que serão aplicadas no gancho PREROUTING, ou seja, para pacotes que acabaram de entrar por uma das interfaces de rede, não importando qual será o destino dos mesmos, se para um processo local ou para ser roteado (forward).

Deve-se ter em mente que a etapa de roteamento é quem decidirá qual o caminho que o pacote irá tomar, inclusive decidindo se o mesmo será repassado ou entregue a um processo local. Para realizar o roteamento são considerados parâmetros de destino, como o IP, para saber se é desta máquina ou se deve ser repassado, e porta, se for local para decidir para qual processo."


E por aí vai...

Feliz Natal (passado) e bom Ano Novo para você também!


28. Re: Asterisk não funciona com 2 links com CentOS 6.3 [RESOLVIDO]

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 02/01/2014 - 10:20h

O senário é conexão entrando pelo link1 e saindo pelo link1.

Buckminster escreveu:

Veja bem, o fato de estar usando 2 links, 3 links, 4 links, etc, nesse caso não influencia muito. O ponto é que você colocou um link a mais e o sistema provavelmente está se perdendo aí porque você não definiu o caminho de cada um.


É muito importante olhar par ao senário, esta maquina não precisa de definições para tratar um processo interno se eu estivesse tirando o pacote de dentro desta maquina e reenviando ele para outro destino, ai sim teria que se definir algo. Talvez uma configuração no sysctl.conf ou em outro lugar que não conheça possa definir algo, mas desconheço.



2. O datagrama chegou por uma de suas interfaces, o nível de enlace viu o seu mac address no quadro ethernet e ele é destinado ao IP desta máquina, logo deve ser entregue a um de seus processos locais (se for HTTP, por exemplo, deve ser entregue ao apache).


A explicação acima se encaixa para o ssh e o http, consigo acessar os dois serviços tanto no link1 como no link2, sem regra nenhuma de nat. No caso do asterisk a configuração para ele ficar somente disponível para o link1 é o bindaddr=200.150.10.99, que me parece ser a única opção para se definir. Neste ponto o kernel e o asterisk deveriam se entender.


Da mesma forma, pacotes os gerados por processos locais também passam pelo roteamento para serem encaminhados. Logo, todos os datagramas passam, de uma forma ou de outra, pela etapa de roteamento.


Olhando mais uma vez pelo senário.

Olhando do ponto de vista que o datagrama foi gerando pelo asterisk "processo interno", então o kernel devera decidir ou não se ele precisa ser roteado, como ele entrou pelo link1 e vai sair pelo link1 será descartado o opção rotear.


Lista nat PREROUTING


Este caso ne se aplica, não faz sentido fazer prerouting da maquina para ela mesmo.

É como falei estou em um senário simples, apenas instalei mais uma placa. não requer lançar rotas ou criar nat, por isto falei que estou incrédulo.

Se não existir uma configuração no sysctl.conf ou em outro lugar para corrigir este comportamento, acredito que seja uma falha do asterisk/kernel no datagrama UDP.












29. Re: Asterisk não funciona com 2 links com CentOS 6.3 [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 02/01/2014 - 22:16h

Da mesma forma, pacotes os gerados por processos locais também passam pelo roteamento para serem encaminhados. Logo, todos os datagramas passam, de uma forma ou de outra, pela etapa de roteamento.

Bom, se depois dessa explicação aí em cima que resume tudo, tu ainda duvida, então tu é muito cabeça dura ou está precisando estudar mais.

E o cenário nesse caso não influencia muito. Sim, "cenário" é com "c".

Veja bem, O KERNEL NÃO TEM INTELIGÊNCIA, ELE NÃO SABE PENSAR, O KERNEL É UM PROGRAMA DE COMPUTADOR, O ÚNICO IP QUE ELE SABE DISCERNIR SE ESTÁ NA MÁQUINA OU NÃO, É ALGUM IP DA FAIXA 127.0.0.0 PORQUE ELE FOI PROGRAMADO ASSIM.

OS OUTROS IPs, NESSE CASO, NÃO INTERESSAM SE ESTÁ NA PRÓPRIA MÁQUINA OU NÃO. O KERNEL FAZ A DISTINÇÃO DO ENVIO DOS PROCESSOS LOCAIS ATRAVÉS DAS PORTAS E SE UMA PORTA ESTIVER ASSOCIADA COM UM IP DE UMA DETERMINADA PLACA DE REDE, O KERNEL FARÁ A DISTINÇÃO PELA PORTA E PELO IP.

SE O PROBLEMA ESTÁ DANDO JUSTAMENTE QUANDO VOCÊ ACRESCENTA MAIS UM LINK, O QUÊ PODE SER?

E JÁ FOI DITO AQUI QUE O ASTERISK TEM PROBLEMAS COM VÁRIOS LINKS.

E isso aqui:

"..então o kernel devera decidir ou não se ele precisa ser roteado...",

O KERNEL POR SI SÓ NÃO FAZ ROTEAMENTO, ELE PRECISA DE REGRAS EXPLÍCITAS PARA ISSO, NO CASO, IPTABLES OU OUTRO PROGRAMA QUE ATUE COMO MÓDULO DO KERNEL E FAÇA ROTEAMENTO.

E isso aqui:

"Este caso ne se aplica, não faz sentido fazer prerouting da maquina para ela mesmo."

Vou colocar DE NOVO o que está no Manuel do Iptables:

"nat :: Esta tabela é consultada quando for encontrado um pacote que criou uma nova conexão. É composta de três built-ins: PREROUTING (para alterar pacotes no momento que eles chegam, antes do roteamento ou compartilhamento.), OUTPUT (para alterar pacotes gerados localmente antes do roteamento ou compartilhamento), POSTROUTING (para alterar pacotes quando eles estão prestes a sair, depois do roteamento ou compartilhamento)."

Veja que a chain PREROUTING na tabela NAT altera os pacotes no momento que eles chegam, antes do roteamento ou compartilhamento.

E associe essa frase aí em cima com isso aqui de baixo:

Lista nat PREROUTING

"Nesta lista irão as regras que serão aplicadas no gancho PREROUTING, ou seja, para pacotes que acabaram de entrar por uma das interfaces de rede, não importando qual será o destino dos mesmos, se para um processo local ou para ser roteado (forward).

Deve-se ter em mente que a etapa de roteamento é quem decidirá qual o caminho que o pacote irá tomar, inclusive decidindo se o mesmo será repassado ou entregue a um processo local. Para realizar o roteamento são considerados parâmetros de destino, como o IP, para saber se é desta máquina ou se deve ser repassado, e porta, se for local para decidir para qual processo."

Mas caso tu não conseguir associar, eu explico, DE NOVO:

PARA O KERNEL É INDIFERENTE PARA ONDE ELE VAI ENVIAR O PACOTE, SE PARA FORA DA MÁQUINA OU SE PARA UM PROCESSO LOCAL, O QUE PRECISA ESTAR DEFINIDO É PARA ONDE VAI O PACOTE, SE VAI PARA FORA DA MÁQUINA OU PARA UM PROCESSO LOCAL.
E PARA A DISTRIBUIÇÃO DOS PROCESSOS LOCAIS ELE FAZ A DISTINÇÃO ATRAVÉS DA PORTA E/OU DO IP, E COMO O ASTERISK ESCUTA EM UMA PORTA E ESSA PORTA ESTÁ ASSOCIADA AO IP DA PLACA DE REDE, PRECISA INDICAR O CAMINHO CORRETO.

E PARA INDICAR ESSE CAMINHO VOCÊ PODE FAZER PELO IPTABLES, OU PELO sysctl.conf, OU POR ONDE VOCÊ QUISER.

E SE É UMA FALHA DO ASTERISK/KERNEL NO DATAGRAMA UDP COMO TU ESTÁ DIZENDO, ONDE VOCÊ CORRIGE ESSA FALHA?

QUAL É O MÓDULO DO KERNEL ENCARREGADO DE TRATAR OS DATAGRAMAS IPs?
É O NETFILTER.

E O IPTABLES ATUA SOBRE QUEM?
SOBRE O NETFILTER.


E VEJA O QUE O MANUEL DO ASTERISK (http://cdn.oreillystatic.com/books/9780596510480.pdf) DIZ:

"Configuring a Local Firewall
If you’re running iptables on the same machine as the Asterisk box, then you can run
the following commands to open port 5060 for SIP signaling, and ports 10,000 through
20,000 for the RTP traffic. You can also narrow the range of RTP ports in the rtp.conf
file located in /etc/asterisk. An excellent book on iptables firewalls is Linux Firewalls by
Steve Suehring and Robert Ziegler (Novell Press).
# iptables -I RH-Firewall-1-INPUT -p udp --dport 5060 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT -p udp --dport 10000:20000 -j ACCEPT
# service iptables save
Be aware that this will allow all UDP traffic from any source access to ports 5060 and
10,000 through 20,000.

Most of the previous configuration may be familiar to you by now, but in case it’s not, here is a brief rundown.

By defining the type as a peer, we are telling Asterisk not to match on the [my_service_provider] name, but rather to match on the IP address in the INVITE message (when the provider is sending us a call). The host parameter is the IP address that we’ll place our calls to, and the IP address we’ll be matching on when receiving a call from the provider."

"Se você estiver executando o iptables na mesma máquina que o Asterisk, então você pode executar os seguintes comandos para abrir a porta 5060 para a sinalização SIP e portas 10.000 por 20.000 para o tráfego RTP."

E mais abaixo a explicação, "By defining the type as a peer, ...", ou seja, "Ao definir o tipo como peer, estamos dizendo ao Asterisk para não combinar o nome [my_service_provider], mas sim, para combinar o endereço IP na mensagem INVITE (quando o provedor está nos enviando uma chamada)."


E sobre os endereços/máscaras de rede, veja isto na RFC 1519 (http://www.ietf.org/rfc/rfc1519.txt), seção 5. Example of new allocation and routing, e tu verá que, às vezes, o roteador A não enxerga uma determinada rede no roteador B. E podemos considerar o teu roteador como B e o roteador do ISP como A, portanto, precisa indicar o caminho.

E eles colocam isso devido à uma nota na seção 4.2:

"Roteamento para todos os destinos deve ser feito apenas na base de origem. Isto implica que os destinos que são multi-homed em relação a um domínio de roteamento, devem sempre ser explicitamente anunciados em qual domínio de roteamento que não podem ser resumidos (isto tem sentido intuitivo - se uma rede é multi-homed, todos os caminhos dentro de um domínio de roteamento que é "superior" na hierarquia das redes, deve ser conhecido para esta rede "superior")."

E este "conhecimento" para a rede superior é feito determinando-se o caminho de origem e de destino no datagrama do pacote.
E quem determina o caminho (origem e destino) no datagrama do pacote, qual o módulo do kernel que faz isso nesse caso?


30. Re: Asterisk não funciona com 2 links com CentOS 6.3 [RESOLVIDO]

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 03/01/2014 - 23:39h

Veja ai, Buckminster! Ainda não funcionou, você tem alguma critica a fazer?






script básico das rotas para testes

#!/bin/bash

### Criando tabela link1 ###
ip route add table link1 200.150.10.0/24 dev eth1 proto kernel scope link src 200.150.10.99
ip route add table link1 10.1.0.0/24 dev eth0 proto kernel scope link src 10.1.0.254
ip route add table link1 192.168.0.0/22 dev eth0 proto kernel scope link src 192.168.0.254
ip route add default via 200.150.10.99 table link1

### Criando tabela link2 ###
ip route add table link2 10.2.0.0/24 dev eth2 proto kernel scope link src 10.2.0.254
ip route add table link2 10.1.0.0/24 dev eth0 proto kernel scope link src 10.1.0.254
ip route add table link2 192.168.0.0/22 dev eth0 proto kernel scope link src 192.168.0.254
ip route add default via 10.2.0.253 table link2

ip rule add fwmark 1 lookup link1
ip rule add from 200.150.10.99 lookup link1
:x




#ip rule
0: from all lookup local
32764: from 200.150.10.99 lookup link1
32765: from all fwmark 0x1 lookup link1
32766: from all lookup main
32767: from all lookup default

ip route show table link1
200.150.10.0/24 dev eth1 proto kernel scope link src 200.150.10.99
10.1.0.0/24 dev eth0 proto kernel scope link src 10.1.0.254
192.168.0.0/22 dev eth0 proto kernel scope link src 192.168.0.254
default via 200.150.10.99 dev eth1

ip route show table link2
10.2.0.0/24 dev eth2 proto kernel scope link src 10.2.0.254
10.1.0.0/24 dev eth0 proto kernel scope link src 10.1.0.254
192.168.0.0/22 dev eth0 proto kernel scope link src 192.168.0.254
default via 10.2.0.253 dev eth2

Script firewall básico para testes

#!/bin/bash

iptables -F
iptables -X
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

echo 0 > /proc/sys/net/ipv4/conf/all/log_martians
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/ip_dynaddr

modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_tables

iptables -t mangle -A OUTPUT -p udp -m multiport --sport 5060,10000:20000 -j MARK --set-mark 1
iptables -t mangle -A INPUT -p udp -m multiport --dport 5060,10000:20000 -j MARK --set-mark 1

iptables -A FORWARD -p udp --sport 5060 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p udp --dport 5060 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p udp --sport 10000:20000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p udp --dport 10000:20000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A POSTROUTING -p udp --dport 5060 -d 200.150.10.99 -j MASQUERADE
iptables -t nat -A PREROUTING -p udp -i eth1 --dport 5060 -j DNAT --to 200.150.10.99
iptables -t nat -A POSTROUTING -p udp --dport 10000:20000 -d 200.150.10.99 -j MASQUERADE
iptables -t nat -A PREROUTING -p udp -i eth1 --dport 10000:20000 -j DNAT --to 200.150.10.99


iptables -A FORWARD -t filter -j ACCEPT
iptables -A FORWARD -t filter -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A FORWARD -s 0/0 -d 0/0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 0/0 -d 0/0 -o eth+ -j MASQUERADE
:x



#iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:5060 to:200.150.10.99
DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:10000:20000 to:200.150.10.99

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE udp -- 0.0.0.0/0 200.150.10.99 udp dpt:5060
MASQUERADE udp -- 0.0.0.0/0 200.150.10.99 udp dpts:10000:20000
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


# iptables -nL -t mangle
Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain INPUT (policy ACCEPT)
target prot opt source destination
MARK udp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 5060,10000:20000 MARK set 0x1

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
MARK udp -- 0.0.0.0/0 0.0.0.0/0 multiport sports 5060,10000:20000 MARK set 0x1

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination





31. Re: Asterisk não funciona com 2 links com CentOS 6.3 [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 04/01/2014 - 19:21h

Estefânio, poste aqui a saída do comando

ip route show table main


32. Re: Asterisk não funciona com 2 links com CentOS 6.3 [RESOLVIDO]

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 04/01/2014 - 19:34h

Buckminster escreveu:

Estefânio, poste aqui a saída do comando

ip route show table main


# ip route show table main
200.150.10.0/24 dev eth1 proto kernel scope link src 200.150.10.99
10.2.0.0/24 dev eth2 proto kernel scope link src 10.2.0.254
192.168.0.0/22 dev eth0 proto kernel scope link src 192.168.0.254
169.254.0.0/16 dev eth1 scope link metric 1002
169.254.0.0/16 dev eth2 scope link metric 1003
169.254.0.0/16 dev eth0 scope link metric 1004
default via 200.150.10.1 dev eth1
default via 10.2.0.253 dev eth2








33. Re: Asterisk não funciona com 2 links com CentOS 6.3 [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 05/01/2014 - 08:12h

Estou olhando tuas regras, mas me tira uma dúvida aqui:

### Criando tabela link2 ###
ip route add table link2 10.2.0.0/24 dev eth2 proto kernel scope link src 10.2.0.254
ip route add table link2 10.1.0.0/24 dev eth0 proto kernel scope link src 10.1.0.254
ip route add table link2 192.168.0.0/22 dev eth0 proto kernel scope link src 192.168.0.254
ip route add default via 10.2.0.253 table link2

O gateway default é 10.2.0.253, mas o IP na primeira regra é 10.2.0.254... confere?
E me diz porque isso está assim.

E quantas placas de rede terão na máquina com todos os links funcionando?

Os modens/roteadores têm IP fixo ou são dinâmicos?


Vou te enviar uma sugestão de regras, mas a princípio posso dizer que não tem necessidade de criar duas tabelas Link1 e Link2. As rotas principais você adiciona na tabela main e cria somente uma tabela, pode chamar de Link, por exemplo. E nessa tabela link você adiciona a(s) rota(s) da(s) rede(s) que tem gateway(s), por exemplo, uma segunda rede local.

E veja que não aparece essa rota "ip route add table link2 10.1.0.0/24 dev eth0 proto kernel scope link src 10.1.0.254" na tabela main (ip route show table main).

E a faixa de rede 169.254.0.0/16 que aparece é o zeroconf atuando. A maioria das distribuições Linux utilizam a suíte de automação de rede de configuração zero (zeroconf).
O zeroconf utiliza o endereço de rede 169.254.0.0/16 (que é uma faixa reservada) para autoconfigurar uma série de consultas ARP não respondidas e, em seguida, assume um endereço nessa faixa se as consultas produzem um resultado vazio.
É semelhante ao APIPA no Windows, que é na mesma faixa. Quando uma máquina Windows não encontra DHCP, o APIPA (que está no próprio sistema) fornece um IP nessa faixa reservada. Uma das diferenças para o zeroconf é essa, no ifconfig do Linux não aparece o IP ou fica tudo zero.

E aqui

iptables -t nat -A POSTROUTING -s 0/0 -d 0/0 -o eth+ -j MASQUERADE

antes dessa regra acima tu tem regras POSTROUTING e PREROUTING (as que eu sugeri), sendo que essa regra acima compartilha tudo com tudo (todas as redes) em todas as placas de rede (eth+) da máquina. Isso, em conjunto com rotas erradas, pode fazer o Iptables se perder.
Com vários links sempre faça os NATs (MASQUERADE) com uma regra para cada eth à qual você deseja compartilhar, quando for o caso.
Essa regra acima se usa somente quando se tem 2 ou 3 links e quer que todos sejam compartilhados na rede local. Porém, essa regra deve vir por primeiro, além disso, não é aconselhável usar ela porque ela é meio "xarope", pois compartilha tudo com tudo e pode influenciar nas outras regras.


34. Re: Asterisk não funciona com 2 links com CentOS 6.3 [RESOLVIDO]

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 05/01/2014 - 10:31h

Buckminster, vou fechar este tópico, e deixar a mesma mensagem que deixei no fórum do asterisk brasil

muito obrigado buckumister!


############ mensagem do fórum asterisk brasil ##########


Ok, Mike!

Seguinte, vou contar um pouco mais sobre a minha situação, primeiro sou assinante do fórum a um ano e meio ou 2 não me lembro direito, porém nunca tinha feito perguntas, talvez por não ter me apresentado todos me ajudaram no nível 1, ou se já, não sabiam se eu tinha o conhecimento básico. Sobre o asterisk tenho ele funcionando a mais de 2 anos, sempre funcionou bem, porém ele sempre esteve atrás do firewall, este firewall foi escrito por mim, tem todos os recurso controle de banda, 2 links, proxy, interface para gerenciamento, etc... etc... Como é uma coisa que não faço todos os dias, as vezes o conhecimento adormece. Este final de ano, resolvi por questões praticas, juntar os dois em uma só maquina, com isto obtendo economia de energia, nobreak, espaço no rack, manutenção, investimento, etc.. etc..

Com relação a rede, minha rede é 192.168.0.0/22 isto mesmo 22. Tenho uma rede com mais de 380 computadores preciso de uma mascara de rede diferente. O script que postei aqui no fórum era só para ter o mínimo mesmo, se fosse postar o meu firewall completo, são muitas linhas e isto ia tirar o foco do problema, ia gerar ene outras perguntas. Assim como o caso da mascara de rede.

Bom, depois de muitos testes conseguir funcionar da seguinte forma “SEM IP ROUTE/IP RULE”, ainda no ambiente mínimo para os teste . Talvez possa aparecer outros problemas mais teste são teste, e preciso fazer todos para ter uma conclusão mais firme.

Como falei no meus primeiros posts, se o ip da eth1 esta na mesma maquina, que abriga o asterisk, não faria sentido enviar os pacotes do asterisk para uma tabela diferente da main. Veja como como fiz para conseguir funcionar.

# route –n
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
200.150.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.2.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
192.168.0.0 0.0.0.0 255.255.252.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth2
169.254.0.0 0.0.0.0 255.255.0.0 U 1004 0 0 eth0
0.0.0.0 200.150.10.1 0.0.0.0 UG 0 0 0 eth1 <- Os processo locais vão pegar a 1 rota como saída
0.0.0.0 10.2.0.253 0.0.0.0 UG 0 0 0 eth2

Isto é o básico do básico, o que entra por um link sai por ele mesmo. Por isto o ssh e o http estavam e estão funcionando bem.

Preciso de 2 rotas na tabela main, para que o squid possa usar as tags:

tcp_outgoing_address 200.150.10.99 ip-link1
tcp_outgoing_address 10.2.0.254 ip-link2

No asterisk configurei o bindaddr=200.150.10.99 bindport=5060, estas configurações fizeram meu asterisk parar de responder na eth2, nos telefones configurei para procurar o ip 200.150.10.99, os telefones que estão na rede 192.168.0.0 conseguiram se conectar no 200.150.10.99, com as seguinte regras.

# iptables –nvL –t nat

15860 5344K ACCEPT udp -- * * 0.0.0.0/0 200.150.10.99 multiport dports 5060,5061
34428 3317K ACCEPT udp -- * * 0.0.0.0/0 200.150.10.99 multiport dports 10000:20000

56 12853 MASQUERADE udp -- * eth1 0.0.0.0/0 0.0.0.0/0 multiport dports 5060:5082
7 634 MASQUERADE udp -- * eth1 0.0.0.0/0 0.0.0.0/0 multiport dports 10000:20000


Vou dar o post como resolvido, caso haja outras considerações abro outro.

Mais uma vez obrigado a todos pela atenção!

Estefânio Brunhara
San Giovanne Informática Ltda.
Soluções e integrações c/ Sistemas Inteligentes
Windows/Linux a melhor opção Empresa/Internet
(31)3375-1202 3082-3181 8846-2330

Ao encaminhar esta mensagem, por favor:
1. Apague o meu e-mail e o meu nome.
2. Apague também os endereços dos amigos antes de reenviar.
3. Encaminhe como cópia oculta (Cco ou Bcc) aos SEUS destinatários.
Agindo sempre assim dificultaremos a disseminação de vírus, spams e banners.

Pense antes de imprimir, quanto menos papel mais árvores.



35. Re: Asterisk não funciona com 2 links com CentOS 6.3 [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 05/01/2014 - 19:42h

De nada.

Bom, que resolveu.
Se precisar, estamos aí.



01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts