Назад | Перейти на главную страницу

Входящие SIP-вызовы через Cisco 881 NAT зависают через несколько секунд

Недавно я перешел на маршрутизатор Cisco 881 для подключения к глобальной сети. Раньше я использовал Cisco Linksys WAG320N в качестве модема / маршрутизатора / WiFi AP / межсетевого экрана NAT. WAG320N теперь работает в мостовом режиме, поэтому он просто действует как модем с одним из портов LAN, подключенным к FE4 WAN на моем Cisco 881.

Cisco 881 получает IP-адрес, предоставленный DHCP, от моего интернет-провайдера. Моя локальная сеть является частью Vlan 1 по умолчанию (192.168.1.0/24). В целом подключение к Интернету работает отлично, мне удалось настроить статические правила NAT для моих HTTP / HTTPS / SMTP и т. Д. службы, которые работают в моей локальной сети. Не знаю, стоит ли упоминать, что я решил использовать NVI NAT (ip nat enable в отличие от традиционных ip nat outside/ip nat inside) настроить. Моя причина для этого в том, что NVI разрешает NAT loopback из моей локальной сети в WAN IP и обратно на необходимый сервер в локальной сети.

Я использую АТС Asterisk 1.8 в своей локальной сети, которая подключается к провайдеру SIP в Интернете. И входящие, и исходящие вызовы через старую настройку (WAG320N, обеспечивающая маршрутизацию / NAT) работали нормально. Однако после перехода на Cisco 881 входящие вызовы пропадают примерно через 10 секунд, тогда как исходящие вызовы работают нормально.

На моей АТС Asterisk регистрируется следующее сообщение:

[Dec  9 15:27:45] WARNING[27734]: chan_sip.c:3641 retrans_pkt: Retransmission timeout reached on transmission hs216_ba88b814-1a6e37b0-734d176f-fb6f@10.16.171.14 for seqno 1 (Critical Response) -- See https://wiki.asterisk.org/wiki/display/AST/SIP+Retransmissions
Packet timed out after 6528ms with no response
[Dec  9 15:27:45] WARNING[27734]: chan_sip.c:3670 retrans_pkt: Hanging up call hs216_ba88b814-1a6e37b0-734d176f-fb6f@10.16.171.14 - no reply to our critical packet (see https://wiki.asterisk.org/wiki/display/AST/SIP+Retransmissions).

(Я знаю, что это довольно распространенная проблема - я потратил на это большую часть двух дней, тщательно просматривая Google.)

Я сделал, как мне сказали, и проверил https://wiki.asterisk.org/wiki/display/AST/SIP+Retransmissions. Ссылаясь на раздел «Другие SIP-запросы» на странице, указанной выше, я считаю, что причиной зависания является ACK от моего SIP-провайдера не передается обратно через NAT в Asterisk на моей АТС.

Я попытался выяснить это, выгружая пакеты на мой интерфейс WAN на 881. Мне удалось получить дамп PCAP пакетов, входящих / исходящих из моего интерфейса WAN. Вот пример подтверждения, полученного маршрутизатором от моего провайдера:

689 21.219999   193.x.x.x   188.x.x.x   SIP 502 Request: ACK sip:441925xxxxxx@188.x.x.x | 

Однако трассировка SIP на сервере Asterisk показывает, что нет ACKполучено в ответ на 200 OK с моей АТС:

http://pastebin.com/wwHpLPPz

В прошлом мне настоятельно советовали отключить любые SIP ALG на маршрутизаторах и / или брандмауэрах, и многие сообщения об этой проблеме в Интернете, похоже, подтверждают это. Однако я считаю, что в Cisco IOS команда config для отключения SIP ALG является no ip nat service sip udp port 5060 однако это, похоже, не помогает ситуации. Чтобы подтвердить, что настройка конфигурации установлена:

Router1#show running-config | include sip
no ip nat service sip udp port 5060

Еще один интересный поворот: в течение короткого времени я пробовал другого провайдера. К счастью, моя пробная учетная запись с ними все еще доступна, поэтому я вернул свою конфигурацию Asterisk обратно в ревизию, прежде чем интегрироваться с моим текущим поставщиком. Затем я набрал номер DDI, связанный с пробным соединением, и звонок не прервался, и я не получил ошибку, указанную выше! Для меня это указывает на провайдера, но я знаю, что, как и все провайдеры, он скажет: «Нет проблем с нашими SIP-прокси - это ваш брандмауэр». Я склонен согласиться с этим, поскольку эта проблема не была очевидна для старого маршрутизатора WAG320N, когда он выполнял NAT.

Я уверен, что вы тоже захотите увидеть мою рабочую конфигурацию:

!
! Last configuration change at 15:55:07 UTC Sun Dec 9 2012 by xxx
version 15.2
no service pad
service tcp-keepalives-in
service tcp-keepalives-out
service timestamps debug datetime msec localtime show-timezone
service timestamps log datetime msec localtime show-timezone
no service password-encryption
service sequence-numbers
!
hostname Router1
!
boot-start-marker
boot-end-marker
!
!
security authentication failure rate 10 log
security passwords min-length 6
logging buffered 4096
logging console critical
enable secret 4 xxx
!
aaa new-model
!
!
aaa authentication login local_auth local
!
!
!
!
!
aaa session-id common
!
memory-size iomem 10
!
crypto pki trustpoint TP-self-signed-xxx
 enrollment selfsigned
 subject-name cn=IOS-Self-Signed-Certificate-xxx
 revocation-check none
 rsakeypair TP-self-signed-xxx
!
!
crypto pki certificate chain TP-self-signed-xxx
 certificate self-signed 01
    quit
no ip source-route
no ip gratuitous-arps
ip auth-proxy max-login-attempts 5
ip admission max-login-attempts 5
!
!
!
!
!
no ip bootp server
ip domain name dmz.merlin.local
ip domain list dmz.merlin.local
ip domain list merlin.local
ip name-server x.x.x.x
ip inspect audit-trail
ip inspect udp idle-time 1800
ip inspect dns-timeout 7
ip inspect tcp idle-time 14400
ip inspect name autosec_inspect ftp timeout 3600
ip inspect name autosec_inspect http timeout 3600
ip inspect name autosec_inspect rcmd timeout 3600
ip inspect name autosec_inspect realaudio timeout 3600
ip inspect name autosec_inspect smtp timeout 3600
ip inspect name autosec_inspect tftp timeout 30
ip inspect name autosec_inspect udp timeout 15
ip inspect name autosec_inspect tcp timeout 3600
ip cef
login block-for 3 attempts 3 within 3
no ipv6 cef
!
!
multilink bundle-name authenticated
license udi pid CISCO881-SEC-K9 sn 
!
!
username xxx privilege 15 secret 4 xxx
username xxx secret 4 xxx
!
!
!
!
!
ip ssh time-out 60
! 
!
!
!
!
!
!
!
!
interface FastEthernet0
 no ip address
!
interface FastEthernet1
 no ip address
!
interface FastEthernet2
 no ip address
!
interface FastEthernet3
 switchport access vlan 2
 no ip address
!
interface FastEthernet4
 ip address dhcp
 no ip redirects
 no ip unreachables
 no ip proxy-arp
 ip nat enable
 duplex auto
 speed auto
!
interface Vlan1
 ip address 192.168.1.1 255.255.255.0
 no ip redirects
 no ip unreachables
 no ip proxy-arp
 ip nat enable
!
interface Vlan2
 ip address 192.168.0.2 255.255.255.0
!
ip forward-protocol nd
ip http server
ip http access-class 1
ip http authentication local
ip http secure-server
ip http timeout-policy idle 60 life 86400 requests 10000
!
!
no ip nat service sip udp port 5060
ip nat source list 1 interface FastEthernet4 overload
ip nat source static tcp x.x.x.x 80 interface FastEthernet4 80
ip nat source static tcp x.x.x.x 443 interface FastEthernet4 443
ip nat source static tcp x.x.x.x 25 interface FastEthernet4 25
ip nat source static tcp x.x.x.x 587 interface FastEthernet4 587
ip nat source static tcp x.x.x.x 143 interface FastEthernet4 143
ip nat source static tcp x.x.x.x 993 interface FastEthernet4 993
ip nat source static tcp x.x.x.x 1723 interface FastEthernet4 1723
!
!
logging trap debugging
logging facility local2
access-list 1 permit 192.168.1.0 0.0.0.255
access-list 1 permit 192.168.0.0 0.0.0.255
no cdp run
!
!
!
!
control-plane
!
!
banner motd 
Authorized Access only

!
line con 0
 login authentication local_auth
 length 0
 transport output all
line aux 0
 exec-timeout 15 0
 login authentication local_auth
 transport output all
line vty 0 1
 access-class 1 in
 logging synchronous
 login authentication local_auth
 length 0
 transport preferred none
 transport input telnet
 transport output all
line vty 2 4
 access-class 1 in
 login authentication local_auth
 length 0
 transport input ssh
 transport output all
!
!
end

... и, если он нужен, вот моя конфигурация SIP Asterisk:

[general]
context=default                 ; Default context for calls
allowoverlap=no                 ; Disable overlap dialing support. (Default is yes)
udpbindaddr=0.0.0.0             ; IP address to bind UDP listen socket to (0.0.0.0 binds to all)
                                ; Optionally add a port number, 192.168.1.1:5062 (default is port 5060)
tcpenable=no                    ; Enable server for incoming TCP connections (default is no)
tcpbindaddr=0.0.0.0             ; IP address for TCP server to bind to (0.0.0.0 binds to all interfaces)
                                ; Optionally add a port number, 192.168.1.1:5062 (default is port 5060)
srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                                ; Note: Asterisk only uses the first host
                                ; in SRV records
                                ; Disabling DNS SRV lookups disables the
                                ; ability to place SIP calls based on domain
                                ; names to some other SIP users on the Internet
                                ; Specifying a port in a SIP peer definition or
                                ; when dialing outbound calls will supress SRV
                                ; lookups for that peer or call.
directmedia=no                  ; Don't allow direct RTP media between extensions (doesn't work through NAT)
externhost=<MY DYNDNS HOSTNAME> ; Our external hostname to resolve to IP and be used in NAT'ed packets
localnet=192.168.1.0/24         ; Define our local network so we know which packets need NAT'ing
qualify=yes                     ; Qualify peers by default
dtmfmode=rfc2833                ; Set the default DTMF mode
disallow=all                    ; Disallow all codecs by default
allow=ulaw                      ; Allow G.711 u-law
allow=alaw                      ; Allow G.711 a-law

; ----------------------
; SIP Trunk Registration
; ----------------------

; Orbtalk
register => <MY SIP PROVIDER USER NAME>:xxx@sipgw3.orbtalk.co.uk/<MY DDI>       ; Main Orbtalk number

; ----------
; Trunks
; ----------

[orbtalk]                       ; Main Orbtalk trunk
type=peer
insecure=invite
host=sipgw3.orbtalk.co.uk
nat=yes
username=<MY SIP PROVIDER USER NAME>
defaultuser=<MY SIP PROVIDER USER NAME>
fromuser=<MY SIP PROVIDER USER NAME>
secret=xxx
context=inbound

Я действительно не знаю, что с этим делать. Если кто-нибудь может помочь мне узнать, почему эти звонки прерываются, я был бы признателен, если бы вы могли вмешаться! Пожалуйста, дайте мне знать, если потребуется дополнительная информация.

ОБНОВЛЕНИЕ 12.10.2012 (1):

@GerryEgan предложил добавить следующий статический NAT: ip nat source static udp 192.168.1.2 5060 interface FastEthernet 4 5060 Хотя это, кажется, исправляет ситуацию, насколько я могу судить, это оставило бы меня уязвимым для атак грубой силы на 5060.

@GerryEgan также предложил правило проверки: ip inspect name autosec_inspect sip ...и (config-if)#ip inspect autosec_inspect in на моем WAN-интерфейсе Даже после очистки трансляций NAT NVI это само по себе не решает проблему.

Вот debug ip nat sip от входящего вызова, который был сброшен: http://pastebin.com/3WHPcyDD

Примечание. Если я попробую no ip nat service sip udp port 5060 конфигурации, упомянутой выше, я не получаю никаких отладочных данных из debug ip nat sip, так что пока у меня по умолчанию ip nat service sip udp port 5060 в моей конфигурации - надеюсь, я не путаю с этим.

Что еще хуже, мои статические правила NAT NVI, похоже, не работают при перезагрузке маршрутизатора :-(. Это отдельная проблема, но может иметь некоторое отношение к вашим ответам.

ОБНОВЛЕНИЕ 12.10.2012 (2): Когда звонки прерываются Asterisk, я вижу следующее в /var/log/syslog:

Dec 10 20:02:39 <PBX> asterisk[26620]: rc_avpair_new: unknown attribute 1490026597

ОБНОВЛЕНИЕ 12.11.2012:

@GerryEgan предложил добавить:

access-list 101 permit udp X.X.X.X 0.0.0.255 host 1.2.3.4 eq 5060
access-list 101 deny   udp any any eq 5060
access-list 101 permit ip any any

и

interface FastEthernet4
ip access-group 101 in

Я видел теорию, поэтому ожидал, что это сработает, но, к сожалению, нет.

Это странно, так как WAG320N, который я раньше обрабатывал SIP с тем же провайдером, PBX и т. Д., Не требовал настройки или NAT. Это побудило меня перестроить новый 881, так что для полноты, вот текущая конфигурация:

!
! Last configuration change at 20:20:15 UTC Tue Dec 11 2012 by xxx
version 15.2
no service pad
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
!
hostname xxx
!
boot-start-marker
boot-end-marker
!
!
enable secret 4 xxxx
!
aaa new-model
!
!
aaa authentication login local_auth local
!
!
!
!
!
aaa session-id common
!
memory-size iomem 10
!
crypto pki trustpoint TP-self-signed-xxx
 enrollment selfsigned
 subject-name cn=IOS-Self-Signed-Certificate-xxx
 revocation-check none
 rsakeypair TP-self-signed-xxx
!
!
crypto pki certificate chain TP-self-signed-xxx
 certificate self-signed 01
  xxx
    quit
ip gratuitous-arps
ip auth-proxy max-login-attempts 5
ip admission max-login-attempts 5
!
!
!
!
!
ip domain list dmz.xxx.local
ip domain list xxx.local
ip domain name dmz.xxx.local
ip name-server 192.168.1.x
ip cef
login block-for 3 attempts 3 within 3
no ipv6 cef
!
!
multilink bundle-name authenticated
license udi pid CISCO881-SEC-K9 sn xxx
!
!
username admin privilege 15 secret 4 xxx
username joe secret 4 xxx
!
!
!
!
!
ip ssh time-out 60
! 
!
!
!
!
!
!
!
!
interface FastEthernet0
 no ip address
!
interface FastEthernet1
 no ip address
!
interface FastEthernet2
 no ip address
!
interface FastEthernet3
 switchport access vlan 2
 no ip address
!
interface FastEthernet4
 ip address dhcp
 ip access-group 101 in
 ip nat enable
 duplex auto
 speed auto
!
interface Vlan1
 ip address 192.168.1.x 255.255.255.0
 no ip redirects
 no ip unreachables
 no ip proxy-arp
 ip nat enable
!
interface Vlan2
 ip address 192.168.0.x 255.255.255.0
!
ip forward-protocol nd
ip http server
ip http access-class 1
ip http authentication local
ip http secure-server
!
!
ip nat source list 1 interface FastEthernet4 overload
ip nat source list 2 interface FastEthernet4 overload
ip nat source static tcp 192.168.1.x 1723 interface FastEthernet4 1723
!
!
access-list 1 permit 192.168.0.0 0.0.0.255
access-list 2 permit 192.168.1.0 0.0.0.255
access-list 101 permit udp 193.x.x.0 0.0.0.255 any eq 5060
access-list 101 deny   udp any any eq 5060
access-list 101 permit ip any any
!
!
!
!
control-plane
!
!
banner motd 
Authorized Access only

!
line con 0
 exec-timeout 15 0
 login authentication local_auth
line aux 0
 exec-timeout 15 0
 login authentication local_auth
line vty 0 4
 access-class 2 in
 login authentication local_auth
 length 0
 transport input all
!
!
end

Вы заметите, что я использовал access-list 101 permit udp 193.x.x.0 0.0.0.255 any eq 5060 вместо того access-list 101 permit udp X.X.X.X 0.0.0.255 host 1.2.3.4 eq 5060. Причина в том, что мой IP-адрес WAN предоставляется DHCP, поэтому у меня нет IP-адреса для ввода после host. Я надеюсь, что это действительная замена (?).

Опять же, просто чтобы повторить - этот провайдер SIP отлично работал на моем старом «домашнем» Linksys WAG320N без настройки NAT и межсетевого экрана. SIP ALG по умолчанию отключен в этой системе.

Еще один интересный момент - в настоящий момент я не могу использовать NAT для входящего PPTP через этот маршрутизатор. Похоже, что трафик GRE не проходит. Хотя я знаю, что это не одно и то же, это может быть одна и та же основная проблема конфигурации, которая мешает маршрутизатору правильно обрабатывать трафик для каждого из протоколов с помощью NAT - я мог бы лаять не в том дереве ...

ОБНОВЛЕНИЕ 16.12.2012:

Я заметил улучшение при комментировании localnet=192.168.1.0/24 в sip.conf Asterisk; Если этот параметр не указан, я могу принимать входящие вызовы, не отвлекая их.

Я знаю, что это можно рассматривать как решение проблемы, но это не объясняет, почему АТС работала с этой настройкой в ​​течение ~ 6 месяцев, когда она находилась за WAG320N в качестве межсетевого экрана / маршрутизатора. Имея это в виду, есть ли у кого-нибудь еще идеи? Комментируя localnet Директива не сидит у меня в голове, и я не хочу полагаться на нее как на постоянное решение, когда она так хорошо работала со старым маршрутизатором.

Я видел проблемы на нескольких 881, которые я развернул при выполнении перегрузки nat и использовании интерфейса. По большей части создание wan-ссылки на статический IP-адрес и изменение команды IP nat overload на это устранило большинство проблем со звонками и даже зависанием телефонов. Удачи

У меня была одна и та же проблема в течение целого месяца, когда я перепрыгивал между двумя VPS, которые у меня есть, один из которых недостаточно активен, но работает безупречно, а другой перегружен и страдает той же проблемой. Обходя весь Интернет без ответа, мне приходилось продолжать тестирование, пока я не обнаружил проблему. Я выставил "qualify = no" через настройки FreePBX Advance, после этого все заработало.

единственный виновник - Qualify.

Если добавление NAT и правил проверки устранили проблему, но вы не хотите открывать порт для доступа в Интернет, почему бы не добавить список доступа к интерфейсу WAN, чтобы разрешить только трафик на порт 5060 из диапазона IP-адресов вашего поставщика SIP ? вам понадобится что-то вроде:

access-list 101 permit udp X.X.X.X 0.0.0.255 host 1.2.3.4 eq 5060
access-list 101 deny   udp any any eq 5060
access-list 101 permit ip any any

Где X.X.X.X / 24 - это диапазон ваших SIP-провайдеров, а 1.2.3.4 - ваш внешний IP-адрес. Затем примените это к своему внешнему интерфейсу с помощью:

interface FastEthernet4
ip access-group 101 in

Из вашего обновления я не уверен, что правила NAT полностью исправили его, и вы удалили его, чтобы он работал по-другому, или он все еще не работает с правилом NAT ... Если NAT исправляет это, добавьте список доступа и тебе должно быть хорошо. если возникнут еще проблемы, дайте мне знать.