bernhard-b
Goto Top

Cisco NAT (VoiP)

Hallo,

ich habe ein kleines Problem mit dem Betrieb eines Asterisk VoiP Servers hinter meiner Cisco Hardware.
Zum Aufbau: Als Interget-Gateway fungiert ein Cisco 886VA Router (Interne IP 192.168.1.1) and diesem hängt eine Cisco SG300 Switch (Interne IP 192.168.1.2), das Switch befindet sich im L3 Modus und es sind zwei VLANs aktiv VLAN 1 und VLAN 3. Im VLAN 3 möchte ich einen Asterisk Server betreiben.
Ich habe nun das Problem, das ich beim telefonieren nur einseitig Audio empfangen kann, d.h. Anrufer können mich hören, ich aber die Anrufer nicht. Laut Asterisk Dokumentation ist dies in 99% der Fälle auf ein NAT Problem zurück zu führen, daher habe ich hier angefangen zu forschen.

Testweise habe ich den Asterisk Server ins VLAN 1 verschoben, hier tritt das Problem nicht auf. Die Konfiguration am Router sieht dabei wie folgt aus:

interface Vlan1
 ip address 192.168.1.1 255.255.255.0
 ip nat inside
...
!
interface Dialer1
 ip access-group 111 in
 ip nat outside
...
!
ip nat inside source list 101 interface Dialer1 overload
ip route 192.168.3.0 255.255.255.0 192.168.1.2
!
dialer-list 1 protocol ip list 101
!
access-list 101 permit ip 192.168.1.0 0.0.0.255 any
access-list 101 permit ip 192.168.3.0 0.0.0.255 any
access-list 101 permit udp any any eq 3478
access-list 101 permit udp any any eq 3479
access-list 101 permit udp any any eq 5060
access-list 101 permit udp any any eq 5070
access-list 101 permit udp any any eq 5080
access-list 101 permit udp any any range 10000 20000
access-list 101 permit udp any any range 30000 31000
access-list 101 permit udp any any range 40000 41000

access-list 111 permit icmp any any administratively-prohibited
access-list 111 permit icmp any any echo-reply
access-list 111 permit icmp any any packet-too-big
access-list 111 permit icmp any any time-exceeded
access-list 111 permit icmp any any unreachable
access-list 111 remark VoiP
access-list 111 permit udp any any eq 3478
access-list 111 permit udp any any eq 3479
access-list 111 permit udp any eq 5060 any
access-list 111 permit udp any eq 5070 any
access-list 111 permit udp any eq 5080 any
access-list 111 permit udp any range 10000 20000 any range 10000 20000
access-list 111 permit udp any range 30000 31000 any range 30000 31000
access-list 111 permit udp any range 40000 41000 any range 40000 41000
access-list 111 permit udp any eq domain any
access-list 111 permit tcp any eq domain any
access-list 111 permit tcp any any eq www
access-list 111 remark SMTP (STARTTLS) TCP
access-list 111 permit tcp any any eq 587
access-list 111 remark IMAP (STARTTLS) TCP
access-list 111 permit tcp any any eq 143
access-list 111 remark IMAP (STARTTLS) UDP
access-list 111 permit udp any any eq 143
access-list 111 remark IMAP (SSL) TCP
access-list 111 permit tcp any any eq 993
access-list 111 permit tcp any any eq ftp
access-list 111 permit tcp any any eq ftp-data
access-list 111 remark FTP passive mode
access-list 111 permit tcp any any gt 1023
access-list 111 permit udp any eq ntp any
access-list 111 permit gre any any
access-list 111 deny   ip any any log

Wenn ich den Asterisk Server ins VLAN 3 schiebe muss ich mindestens den Port 5060 weiterleiten, sonst kommt gar nichts an:
ip nat inside source static udp 192.168.3.3 5060 ***dialer-1-ip(statisch)*** 5060 extendable

Von der Telekom Seite weiß ich, dass "UDP (in): Ports 5070, 5080, 30000-31000, 40000-41000" freigegeben sein müssen.
Daher dachte ich mir ich leite die Ports mal an die IP des Servers im VLAN 3 weiter.
Dabei habe ich mich an folgender Anleitung orientiert.
D.h. ich habe folgende Zeile entfernt:
ip nat inside source static udp 192.168.3.3 5060 ***dialer-1-ip(statisch)*** 5060 extendable

Und dafür folgendes hinzugefügt:
ip nat pool VOIPFWD 192.168.3.3 192.168.3.3 netmask 255.255.255.0 type rotary

access-list 100 permit udp any any eq 3478
access-list 100 permit udp any any eq 3479
access-list 100 permit udp any any eq 5060
access-list 100 permit udp any any eq 5070
access-list 100 permit udp any any eq 5080
access-list 100 permit udp any any range 10000 20000
access-list 100 permit udp any any range 30000 31000
access-list 100 permit udp any any range 40000 41000

ip nat inside destination list 100 pool VOIPFWD

Leider empfange ich noch immer keine eingehendes Audiosignal, wenn der Server im VLAN 3 ist, daher vermute ich, das ich irgendwas falsch mache.
Ich würde mich sehr freuen, wenn mir jemand erklären könnte was ich falsch mache und was halb die Datenpackete nicht da ankommen, wo sie hin sollen.

Mit freundlichen Grüßen
Bernhard

Content-ID: 307385

Url: https://administrator.de/contentid/307385

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

aqui
Lösung aqui 16.06.2016 aktualisiert um 21:12:42 Uhr
Goto Top
Vermutlich ist deine Konfig nicht vollständig aber es sieht so aus als ob du die Firewall mit dem Application Gateway gar nicht in Betreib hast auf dem Router.
Das solltest du auch schon aus Sicherheitsgründen dringenst machen !
Die Firewall öffnet dir dann Session basiert die richtigen Ports über das Application Gateway.
Hier findest du eine laufende Konfig zum Abtippen:
Cisco 880, 890 und ISR Router Konfiguration mit xDSL, Kabel oder FTTH Anschluss plus VPN und IP-TV
Relevant sind (Standard Konfig weggelassen):
ip inspect name myfw tcp
ip inspect name myfw udp
ip inspect name myfw sip
ip inspect name myfw rtsp

!
interface Dialer0
ip inspect myfw out

ip access-group 111 in
!
access-list 111 permit icmp any any administratively-prohibited
access-list 111 permit icmp any any echo-reply
access-list 111 permit icmp any any packet-too-big
access-list 111 permit icmp any any time-exceeded
access-list 111 permit icmp any any unreachable
access-list 111 permit udp any eq domain any
access-list 111 permit tcp any eq domain any
access-list 111 permit udp any eq 5060 any

access-list 111 deny ip any any

Damit klappt das schon alles problemlos.
Zusätzlich kannst du noch no ip nat service sip udp port 5060 verwenden in der Konfig, das ist aber meist nicht nötig wenn du mit STUN arbeitest auf der Voice Seite.
Die o.a. Konfig rennt getestet mit Asterisk und diversen Cisco_IP_Phones fejhlerlos an einem ADSL und auch VDSL Anschluss.
Wenn ich den Asterisk Server ins VLAN 3 schiebe muss ich mindestens den Port 5060 weiterleiten, sonst kommt gar nichts an:
Von einem VLAN 3 sieht man aber nichts oben in deiner Konfig. Routest du das VLAN 3 auf dem Switch ???
Forwarden musst du aber nichts. Mit access-list 111 permit udp any eq 5060 any lässt du incomming SIP Calls durch die CBAC Firewall. Mehr ist dafür nicht zu machen. Das RTP Session Handling macht die FW dynamisch....sofern du sie denn aktiviert hast ?!
Wenn man sich deine etwas rumpelige ACL 111 ansieht besteht aber Befürchtung das das nicht der Fall ist (geraten).
Ich würde mich sehr freuen, wenn mir jemand erklären könnte was ich falsch mache
Vermutlich (geraten) die CBAC Firewall nicht aktiviert und eine falsche Inbound ACL konfiguriert ?? Schwer zu sagen da deine Konfig nur ein Auszug ist.
Halte dich an das oben zitierte Tutorial. Da ist alles zu dem Thema (und in den Threads noch mehr) haarklein erklärt.
Bernhard-B
Bernhard-B 21.06.2016 um 15:30:22 Uhr
Goto Top
Hallo aqui,

vielen Dank für deine Antwort. Da ich die letzten Tage unterwegs war konnte ich leider nicht eher antworten.


Zitat von @aqui:
Von einem VLAN 3 sieht man aber nichts oben in deiner Konfig. Routest du das VLAN 3 auf dem Switch ???

Ja das hat das Switch gemacht, das meinte ich mit meinem nicht ganz eindeutigen "das Switch befindet sich im L3 Modus!

Ich habe den Router sowie den Switch jetzt umkonfiguriert. Der Switch aggiert jetzt nur noch im L2 Modus und macht kein Routing mehr, fungiert aber noch als DHCP-Server.
Die VLANs habe ich am Router erstellt. Da ich derzeit nur einen Port mit dem Switch verbinden möchte habe ich das FastEthernet Interface im Trunk Mode konfigueriert und nicht im Access Mode, die VLANs sind am entsprechenden Port am Switch auch eingerichtet.

Telefonieren intern funktioniert ohne Problem, Trunk läst sich registrieren, Gespräche gehen ein und aus, Audio geht raus, aber ich habe nach wie vorher kein eingehendes Audiosignal.

Um noch etwas Licht ins ganze zu bringen hier (fast) die ganze Konfig(VPN Konfiguration habe ich entfernt):
version 15.4
no service pad
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R1
!
boot-start-marker
boot system flash:c880data-universalk9-mz.154-3.M5.bin
boot-end-marker
!
!
logging buffered 52000
enable secret ***geheim***
enable password ***geheim***
!
aaa new-model
!
!
aaa authentication login default local
aaa authentication login clientauth local
aaa authorization exec default local
aaa authorization network groupauth local
!
!
!
!
!
aaa session-id common
no process cpu extended history
no process cpu autoprofile hog
memory-size iomem 10
clock timezone Berlin 1 0
clock summer-time Berlin date Mar 30 2003 2:00 Oct 26 2003 3:00
!
!
no ip source-route
no ip gratuitous-arps
!
!
ip name-server 194.25.2.129
ip name-server 194.25.2.130
ip name-server 8.8.8.8
ip name-server 8.8.4.4
ip inspect name FWOUT sip
ip inspect name FWOUT rtsp
ip inspect name FWOUT ftp
ip inspect name FWOUT smtp
ip inspect name FWOUT ftps
ip inspect name FWOUT imap
ip inspect name FWOUT tcp
ip inspect name FWOUT udp
ip cef
no ipv6 cef
!
username ***geheim***
!
controller VDSL 0
 firmware filename flash:VA_A_39m_B_38h3_24h_o.bin
no cdp run
!
interface Ethernet0
 description $ETH-LAN$
 no ip address
!
interface Ethernet0.7
 description VDSL - VLAN 7 tagged
 encapsulation dot1Q 7
 pppoe enable group global
 pppoe-client dial-pool-number 1
!
interface BRI0
 no ip address
 encapsulation hdlc
 shutdown
 isdn termination multidrop
 no cdp enable
!
interface ATM0
 no ip address
 shutdown
 no atm ilmi-keepalive
!
interface FastEthernet0
 switchport trunk allowed vlan 1,3,1002-1005
 switchport mode trunk
 no ip address
 no cdp enable
!
interface FastEthernet1
 no ip address
 shutdown
 no cdp enable
!
interface FastEthernet2
 no ip address
 shutdown
 no cdp enable
!
interface FastEthernet3
 no ip address
 shutdown
 no cdp enable
!
interface Virtual-Template2 type tunnel
 description VPN Interface
 ip unnumbered Vlan1
 ip nat inside
 ip virtual-reassembly in
 tunnel mode ipsec ipv4
 tunnel protection ipsec profile IPSEC-Profile-1
!
interface Vlan1
 description Lokales Netzwerk
 ip address 192.168.1.1 255.255.255.0
 ip nat inside
 ip virtual-reassembly in
 ip tcp adjust-mss 1452
!
interface Vlan3
 description VoiP
 ip address 192.168.3.1 255.255.255.0
 ip nat inside
 ip virtual-reassembly in
 ip tcp adjust-mss 1452
!
interface Dialer1
 ip address negotiated
 ip access-group 111 in
 no ip redirects
 no ip unreachables
 no ip proxy-arp
 ip mtu 1492
 ip nat outside
 ip inspect FWOUT out
 ip virtual-reassembly in
 encapsulation ppp
 dialer pool 1
 dialer-group 1
 no keepalive
 ppp authentication chap callin
 ppp chap hostname ***geheim***
 ppp chap password ***geheim***
 ppp ipcp dns request
 ppp ipcp mask request
 ppp ipcp route default
 no cdp enable
!
ip forward-protocol nd
no ip http server
ip http authentication local
ip http secure-server
ip http timeout-policy idle 60 life 86400 requests 10000
!
!
ip dns server
no ip nat service sip udp port 5060
ip nat inside source list 101 interface Dialer1 overload
!
dialer-list 1 protocol ip list 101
!
access-list 23 permit 192.168.1.0 0.0.0.255
access-list 101 permit ip 192.168.1.0 0.0.0.255 any
access-list 101 permit ip 192.168.3.0 0.0.0.255 any
access-list 111 remark VPN
access-list 111 permit udp any any eq non500-isakmp
access-list 111 permit udp any any eq isakmp
access-list 111 permit esp any any
access-list 111 permit ahp any any
access-list 111 remark ICMP
access-list 111 permit icmp any any administratively-prohibited
access-list 111 permit icmp any any echo-reply
access-list 111 permit icmp any any packet-too-big
access-list 111 permit icmp any any time-exceeded
access-list 111 permit icmp any any unreachable
access-list 111 permit udp any eq domain any
access-list 111 permit tcp any eq domain any
access-list 111 remark Voip
access-list 111 permit udp any eq 5060 any
access-list 111 remark Deny-All-Other
access-list 111 deny   ip any any
!
control-plane
!
line con 0
 exec-timeout 0 0
 no modem enable
line aux 0
line vty 0 4
 access-class 23 in
 password ***geheim***
 transport preferred none
 transport input telnet ssh
 transport output telnet ssh
!
ntp master
ntp update-calendar
ntp server ptbtime1.ptb.de prefer

event manager applet storePreferences
 event none sync yes
!
end

Ich habe auch nochmal versucht mittels Port Forwarding, den Verkehr in die richtige Richtung zu biegen(192.168.3.3=Asterisk Server):
ip nat pool voip 192.168.3.3 192.168.3.3 prefix-length 24 type rotary

ip nat inside destination list 103 pool voip

access-list 103 permit udp any any range 10000 20000
access-list 103 permit udp any any range 30000 31000

Aber auch das hat nichts gebracht.
So langsam gehen mir einfach die Ideen aus, an was es noch liegen könnte.
Besonders da es ja funktioniert, wenn ich den Server ins VLAN 1 verschiebe, was ich aber aus verschiedenen Gründen nicht möchte.

Mit freundlichen Grüßen
Bernhard
aqui
Lösung aqui 21.06.2016 aktualisiert um 17:59:17 Uhr
Goto Top
das Switch befindet sich...
Ist ein Switch nicht männlich ?
Wenn ich den Asterisk Server ins VLAN 3 schiebe muss ich mindestens den Port 5060 weiterleiten,
Das musst du bei aktivierter CBAC Firewall so oder so immer machen !
Vorweg: Das "access-list 111 permit ahp any any " kannst du vollständig entfernen, denn IPsec AH ist gar nicht NAT fähig, kann also niemals verwendet werden hier.
Ansonsten ist die Grundkonfig soweit richtig ! Kommunikation ist ja aus beiden VLANs möglich, richtig ?
Hier rennt sowas in exakt dem gleichen Design fehlerlos. Telefonie in einem separaten VLAN und ACL 111 sieht so aus:
access-list 111 permit icmp any any administratively-prohibited
access-list 111 permit icmp any any echo-reply
access-list 111 permit icmp any any packet-too-big
access-list 111 permit icmp any any time-exceeded
access-list 111 permit icmp any any unreachable
access-list 111 permit udp any eq domain any
access-list 111 permit tcp any eq domain any
access-list 111 permit udp any eq 5060 any
access-list 111 permit udp any any eq 4500
access-list 111 permit udp any any eq isakmp
access-list 111 permit esp any any
access-list 111 deny ip any any


Man kann nur vermuten das das Problem ggf. in der VPN Konfig steckt, das du vergessen hast das VLAN 3 vom VPN zu excluden etc.
Hast du mal mit einem Wireshark gepüft was passiert wenn die Telefonie in VLAN 3 ist wenn ein incoming Call kommt (outgoing ebenso) und das mal mit dem Verhalten in VLAN 1 verglichen ??
Was genau ist da unterschiedlich ??

Nochwas am Rande...
Könntest du mal ein "sh contr vdsl 0" machen und mal posten hier. Da du den o Patch der Modem SW verwendest wäre mal interessant ob der wirklich in der 38Version aktiv ist.
Grund dafür..siehe hier:
Kann der Cisco 866VAE VDSL-Vectoring? (und ein Blick in die DSL-Firmware)
Bernhard-B
Bernhard-B 22.06.2016 aktualisiert um 16:37:50 Uhr
Goto Top
Zitat von @aqui:

das Switch befindet sich...
Ist ein Switch nicht männlich ?

Da der Genus eines Anglizismus in der deutschen Sprache nicht geregelt ist, bin ich da ganz entspannt und verwende abwechselnd maskulinum und neutrum. ;)

In wie weit soll sich denn die VPN Konfiguration auf den Audio-Verkehr beziehen, das verstehe ich nicht.
Ich nutze VPN nur für den Fernzugriff und nicht um darüber VoiP Kommunikation zu übertragen.
Anbei der VPN Teil, den ich raus gelöscht habe, da ich ihn als unwichtig erachtet habe:
crypto isakmp policy 100
 encr aes 256
 hash sha256
 authentication pre-share
 group 14
!
crypto isakmp client configuration group VPNFERN
 key ***geheim***
 dns 8.8.8.8
 pool vpnpool
 save-password
 max-users 5
crypto isakmp profile VPN-Profile
   match identity group VPNFERN
   client authentication list clientauth
   isakmp authorization list groupauth
   client configuration address respond
   virtual-template 2
!
!
crypto ipsec transform-set VPN esp-aes 256 esp-sha-hmac
 mode tunnel
!
crypto ipsec profile IPSEC-Profile
 set transform-set VPN


ip local pool vpnpool 192.168.1.100 192.168.1.109 recycle delay 60

Als nächstes werde ich die Datenverkehr am Asterisk-Server mit tcpdump mitschneiden und im Wireshark betrachten, um das Verhalten in den beiden VLANs zu vergleichen.

P.S. Die Modem SW vom sh contr vdsl 0 Output habe ich mal direkt in den anderen Thread gepostet, wo es am besten aufgehoben ist.
Bernhard-B
Bernhard-B 22.06.2016 um 20:53:21 Uhr
Goto Top
Also ich habe den Verkehr jetzt mit tcpdum am Asterisk-Server geloggt. Was dabei sofort auffiel, ist das das bei dem Server im VLAN 3 nur um die 100 Packete empfangen wurden, im VLAN 1 aber weit über 1000, je nach Gesprächslänge.
Das gleiche zeigt sich auch, wenn ich das ganze im Wireshark betrachte, bei dem Server im VLAN 3 fehlt der komplette RTP Stream.

Flow Sequenz im VLAN 3:
capture-asterisk_vlan3_call_flow_mod.

Flow Sequenz im VLAN 1:
capture-asterisk_vlan1_call_flow_mod.


Nur bin ich dadurch noch nicht so richtig viel schlauer.
In den SIP Settings vom Asterisk sind die RTP Ports auf den Bereich 10000 - 20000 eingetragen. Beim Router hatte ich ja auch schon versucht die mittels Port Forwarding zum Asterisk Server umzuleiten, was aber nicht den gewünschten Effekt gezeigt hat.

Ich weiß mittlerweile, das ich am Router mittels "ip traffic-export profile xyz mode capture" und dann mit "traffic-export interface xxx start/stop" den Verkehr an einem Interface (zB Dialer 0) loggen kann, aber kann ich dann auch irgendwie weiter verfolgen wohin die Pakete im Netz geleitet werden?

Grüße
Bernhard
aqui
aqui 22.06.2016 um 21:41:31 Uhr
Goto Top
Anbei der VPN Teil, den ich raus gelöscht habe, da ich ihn als unwichtig erachtet habe:
Ist er auch...es ging nur um die Crypto Map was da an Traffic excluded und included ist.
Nebenbei: 8.8.8.8 solltest du besser nicht als DNS verwenden sondern die des lokalen Providers. Google schnüffelt dich damit und deinem Internet verhalten aus. Nur Dummies nutzen diesen DNS....
Vergleich zum VPN findest du auch hier:
IPsec VPN Praxis mit Standort Vernetzung Cisco, Mikrotik, pfSense, FritzBox u.a
Das ist aber in der Tat nicht das Thema...abgesehen von der Crypto Map ACL.

Was du nach den obigen Erkenntnissen mal machen kannst ist testweise mal das CBAC Firewalling wegzunehmen vom Dialer Port und auch jegliche ACLs. Damit wäre der WAN Port dann offen. Ist für einen kurzen Test mal tolerabel.
Dann nochmal einen Call initiieren und checken ob das durchkommt.
Ist das der Fall kann es nur am Firewall Setup liegen.
Es ist insofern komisch denn das VLAN 3 oder VLAN 1 sind ja aus Router Sicht nur 2 ganz normale IP Segmente am Router. Bevorzugen tut er keins davon denn die sind beide absolut gleichbereichtigt.
Ohne FW und ACL muss das dann aber funktionieren.
Spaßeshalber kannst du ja auch mal VLAN 1 deaktivieren und einzig nur mit VLAN 3 arbeiten....das muss dan auch funktionieren.
Es kann eigentlich nur was an der FW oder den ACLs sein.
Hast du parallel mal ein no ip nat service sip udp port 5060 probiert ?
Bernhard-B
Bernhard-B 23.06.2016 um 18:53:23 Uhr
Goto Top
Es geht!!??

Das blöde daran ist nur ich weiß nicht warum!?

Ich habe gestern den Asterisk Server runtergefahren, wie schon ein dutzend mal davor beim testen. Der Server ist eine virteulle Maschine, diese habe ich zwei mal gespiegelt, um mit verschiedenen Einstellungen zu experimentieren. Hat leider alles nichts gebracht. Jetzt habe ich die ursprüngliche Asterisk VM (im VLAN 3) wieder hochgefahren und es ging auch dann nicht. Hab denn nur in den SIP Settings zusätzlich zum Lokalen Netzwerk 192.168.3.0/24 noch das zweite Netz 192.168.1.0/24 eingetragen. Auf einmal ging es!
ABER ich habe dannach den Eintrag "192.168.1.0/24" wieder entfernt und es funktioniert immernoch.

Ich hab dann den VM neugestartet, sowie am Router die running-config zur startup-config kopiert und den Router ebenfalls reloaded.
Gleiches Ergebnis Audio ist in beide Richtungen verfügbar.

Auf der einen Seite bin ich glücklich das es funktioniert, auf der anderen Seite traue ich dem ganzen noch nicht so ganz, da ich die Ursache nicht nachvollziehen kann.

Grüße
Bernhard
aqui
aqui 24.06.2016 aktualisiert um 11:45:12 Uhr
Goto Top
Klingt etwas mystisch, das stimmt. Aber gut wenns nun klappt und auch so bleibt.
Bei Cisco sollte das immer der Fall sein face-wink
Bernhard-B
Bernhard-B 29.06.2016 um 18:19:25 Uhr
Goto Top
So gestern hatte ich den Fehler wieder. Die Ursache, warum er genau gestern wieder auftratt, erschliesst sich mir leider nicht.

Ich habe darauf mit tcpdump den Datenverkehr überprüft und festgestellt, dass im Gegensatz zu vorher, ein RTP Stream vorhanden war.
Da ich im Wireshark gesehen habe, dass die Telekom ihren Stream mit ulaw aufbauen möchte habe ich in Asterisk den ulaw Codec an erste Stelle gesetzt. Das hat geholfen.

Da der Fehler nicht mehr beim Cisco Router liegt, schliesse ich das ganze hier mal ab.

Grüße
Bernhard
aqui
aqui 04.07.2016 um 13:23:12 Uhr
Goto Top
Der RTP Stream kommt auch nur zusatnde zw. den Endstationen wenn die SIP Session erfolgreich war. RTP sind die eigentlichen Voice Daten.
Vermutlich gibt oder gab es bei der SIP Negotiation über den gemeinsamen Codec einen Fehler der das ausgelöst hat.
Gut wenns nun rennt wie es soll face-wink