Asterisk 11 behind NAT

Asterisk 11 behind NAT in XEN Server!

L’esigenza nasce dalla solita situazione.. ho un server dedicato con Xen Server ed un solo ip pubblico. Devo nattare tutte le macchine.
Ho la necessità di avere un Asterisk 11 funzionante.
Ecco una configurazione base che funziona dietro NAT.

 

Regole di firewall di prerouting:

-A PREROUTING -i xenbr1 -p udp -s ! 10.0.0.0/24 –dport 5060 -j DNAT –to-destination 10.0.0.4:5060
-A PREROUTING -i xenbr1 -p udp -s ! 10.0.0.0/24 –dport 4569 -j DNAT –to-destination 10.0.0.4:4569
-A PREROUTING -i xenbr1 -p udp -s ! 10.0.0.0/24 –dport 30000:40000 -j DNAT –to-destination 10.0.0.4

Regole di firewall in ingresso:

-A RH-Firewall-1-INPUT -p udp -m state –state NEW -m udp –dport 5060 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state –state NEW -m udp –dport 4569 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state –state NEW -m udp –dport 30000:40000 -j ACCEPT

sip.conf

[general]
context=internal
allowguest=no
allowoverlap=no
bindport=5060
bindaddr=0.0.0.0
srvlookup=no
disallow=all
allow=alaw
canreinvite=no
nat=force_rport,comedia
session-timers=refuse
externip=your-public-ip
localnet=10.0.0.0/255.255.255.0
[7001]
type=friend
host=dynamic
secret=123
context=internal
qualify=yes

[7002]
type=friend
host=dynamic
secret=456
context=internal
qualify=yes

[7003]
type=friend
host=dynamic
secret=789
context=internal
qualify=yes

extensions.conf

[internal]
exten => 7001,1,Dial(SIP/7001,60)
exten => 7001,n,Playback(vm-nobodyavail)
exten => 7001,n,VoiceMail(7001@main)
exten => 7001,n,Hangup()

exten => 7002,1,Dial(SIP/7002,60)
exten => 7002,n,Playback(vm-nobodyavail)
exten => 7002,n,VoiceMail(7002@main)
exten => 7002,n,Hangup()

exten => 7003,1,Dial(SIP/7003,60)
exten => 7003,n,Playback(vm-nobodyavail)
exten => 7003,n,VoiceMail(7003@main)
exten => 7003,n,Hangup()

exten => 8001,1,VoicemailMain(7001@main)
exten => 8001,2,Hangup()

exten => 8002,1,VoicemailMain(7002@main)
exten => 8002,2,Hangup()

Uno strumento utile per vedere ed analizzare il traffico è:

tshark -n -i eth0 not port 22

Dalla console di asterisk possiamo debuggare la parte sip con il seguente comando:

sip set debug on