Patrick:
Is your NAT SIP aware? What should be happening here is the 200 from
your asterisk box will be sent to openser, and relayed out to your
polycom. The polycom should send the ACK to the address in the top
Record-Route header. In this trace, that is a private IP. Your NAT
needs to re-write that to the public IP of your openser box as it hits
the internet. If the private IP makes it out onto the internet, you
will find your polycom is sending the ACK to 10.3.1.33. When the
asterisk box doesn't receive the ACK, the call will drop.
Thanks,
Phil
On Dec 13, 2007 6:00 PM, Patrick Baker <pbaker(a)adeptra.com> wrote:
Internal UA's connecting to the sip proxy work
fine, but as soon an External UA connects to the sip proxy via a NAT'd public IP
address - the call lasts for approx 20 seconds then disconnects. From what I can see
openser is attempting to respond to asterisk after the session is initiated via the public
IP NAT'd address - and is unable since asterisk and openser are behind the firewall on
the internal network ( ELBOW routing ). Any help getting this working would be most
appreciated, I would also like to document the issue to help others that encounter similar
problems as mine.
External phones:
UA -> [(public IP) Firewall (NAT to localip)] -> openser -> asterisk
Internal phones:
UA -> openser -> asterisk
#### Layout ( asterisk and openser are on the same machine )
NATD public ip = xxx.206.xxx.136 -> 10.3.1.33
phone ip = xxx.206.xxx.137
openser = 10.3.1.33 p5060
asteriskSIP = 10.3.1.34 p5060
#### Asterisk SIP Config
[general]
canreinvite=no
externip=xxx.206.xxx.136
localnet=10.3.1.0/255.255.255.0
context=default
bindport=5060
bindaddr=10.3.1.34
sipdebug=yes
[openser]
type=friend
context=default
insecure=very
externalnotify=yes
allow=all
host=10.3.1.33
#### SER LOG
Dec 13 22:15:03 phonesys-slave openser[15976]: New request - M=INVITE
RURI=sip:500@xxx.206.xxx.136:5060;user=phone F=sip:pbaker@xxx.206.xxx.136
T=sip:500@xxx.206.xxx.136;user=phone IP=xxx.206.xxx.137
ID=f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
Dec 13 22:15:03 phonesys-slave openser[15976]: Callee is not local - M=INVITE
RURI=sip:500@xxx.206.xxx.136:5060;user=phone F=sip:pbaker@xxx.206.xxx.136
T=sip:500@xxx.206.xxx.136;user=phone IP=xxx.206.xxx.137
ID=f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
Dec 13 22:15:03 phonesys-slave openser[15976]: Request leaving server,
D-URI='<null>' - M=INVITE RURI=sip:500@10.3.1.34:5060;transport=udp
F=sip:pbaker@xxx.206.xxx.136 T=sip:500@xxx.206.xxx.136;user=phone IP=xxx.206.xxx.137
ID=f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
Dec 13 22:15:03 phonesys-slave openser[15973]: Reply - S=100 D=Trying
F=sip:pbaker@xxx.206.xxx.136 T=sip:500@xxx.206.xxx.136;user=phone IP=10.3.1.34
ID=f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
Dec 13 22:15:03 phonesys-slave openser[15978]: Reply - S=200 D=OK
F=sip:pbaker@xxx.206.xxx.136 T=sip:500@xxx.206.xxx.136;user=phone IP=10.3.1.34
ID=f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
Dec 13 22:15:04 phonesys-slave openser[15989]: Reply - S=200 D=OK
F=sip:pbaker@xxx.206.xxx.136 T=sip:500@xxx.206.xxx.136;user=phone IP=10.3.1.34
ID=f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
Dec 13 22:15:05 phonesys-slave openser[15986]: Reply - S=200 D=OK
F=sip:pbaker@xxx.206.xxx.136 T=sip:500@xxx.206.xxx.136;user=phone IP=10.3.1.34
ID=f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
Dec 13 22:15:07 phonesys-slave openser[15976]: Reply - S=200 D=OK
F=sip:pbaker@xxx.206.xxx.136 T=sip:500@xxx.206.xxx.136;user=phone IP=10.3.1.34
ID=f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
#### Asterisk LOG
*CLI> [Dec 13 22:15:03]
<--- SIP read from 10.3.1.33:5060 --->
INVITE sip:500@10.3.1.34:5060;transport=udp SIP/2.0
Record-Route: <sip:10.3.1.33;lr;ftag=CFE2AAA1-5B882804>
Via: SIP/2.0/UDP 10.3.1.33;branch=z9hG4bK2fc1.94c7bb96.0
Via: SIP/2.0/UDP xxx.206.xxx.137;rport=5060;branch=z9hG4bKcbd9a65f8D4E5FE0
From: "pbaker" <sip:pbaker@xxx.206.xxx.136>;tag=CFE2AAA1-5B882804
To: <sip:500@xxx.206.xxx.136;user=phone>
CSeq: 2 INVITE
Call-ID: f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
Contact: <sip:pbaker@xxx.206.xxx.137>
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK,
UPDATE, REFER
User-Agent: PolycomSoundPointIP-SPIP_501-UA/2.1.0.2708
Supported: 100rel,replaces
Allow-Events: talk,hold,conference
Max-Forwards: 69
Content-Type: application/sdp
Content-Length: 254
v=0
o=- 978310717 978310717 IN IP4 xxx.206.xxx.137
s=Polycom IP Phone
c=IN IP4 xxx.206.xxx.137
t=0 0
m=audio 35022 RTP/AVP 0 8 18 101
a=sendrecv
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=rtpmap:101 telephone-event/8000
<------------->
[Dec 13 22:15:03] --- (16 headers 11 lines) ---
[Dec 13 22:15:03] == Using TOS bits 0
[Dec 13 22:15:03] == Using CoS mark 5
[Dec 13 22:15:03] Sending to 10.3.1.33 : 5060 (no NAT)
[Dec 13 22:15:03] Using INVITE request as basis request -
f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
[Dec 13 22:15:03] No user 'pbaker' in SIP users list
[Dec 13 22:15:03] Found peer 'openser' for 'pbaker' from 10.3.1.33:5060
[Dec 13 22:15:03] Found RTP audio format 0
[Dec 13 22:15:03] Found RTP audio format 8
[Dec 13 22:15:03] Found RTP audio format 18
[Dec 13 22:15:03] Found RTP audio format 101
[Dec 13 22:15:03] Peer audio RTP is at port xxx.206.xxx.137:35022
[Dec 13 22:15:03] Found audio description format PCMU for ID 0
[Dec 13 22:15:03] Found audio description format PCMA for ID 8
[Dec 13 22:15:03] Found audio description format G729 for ID 18
[Dec 13 22:15:03] Found audio description format telephone-event for ID 101
[Dec 13 22:15:03] Capabilities: us - 0x27f9fff
(g723|gsm|ulaw|alaw|g726|adpcm|slin|lpc10|g729|speex|ilbc|g726aal2|g722|slin16|jpeg|png|h261|h263|h263p|h264|mpeg4|t140),
peer - audio=0x10c (ulaw|alaw|g729)/video=0x0 (nothing)/text=0x0 (nothing), combined -
0x10c (ulaw|alaw|g729)
[Dec 13 22:15:03] Non-codec capabilities (dtmf): us - 0x1 (telephone-event), peer - 0x1
(telephone-event), combined - 0x1 (telephone-event)
[Dec 13 22:15:03] Peer audio RTP is at port xxx.206.xxx.137:35022
[Dec 13 22:15:03] Looking for 500 in default (domain 10.3.1.34)
[Dec 13 22:15:03] list_route: hop: <sip:10.3.1.33;lr;ftag=CFE2AAA1-5B882804>
[Dec 13 22:15:03]
<--- Transmitting (no NAT) to 10.3.1.33:5060 --->
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 10.3.1.33;branch=z9hG4bK2fc1.94c7bb96.0;received=10.3.1.33
Via: SIP/2.0/UDP xxx.206.xxx.137;rport=5060;branch=z9hG4bKcbd9a65f8D4E5FE0
Record-Route: <sip:10.3.1.33;lr;ftag=CFE2AAA1-5B882804>
From: "pbaker" <sip:pbaker@xxx.206.xxx.136>;tag=CFE2AAA1-5B882804
To: <sip:500@xxx.206.xxx.136;user=phone>
Call-ID: f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
CSeq: 2 INVITE
User-Agent: Asterisk PBX SVN-trunk-r92779
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: <sip:500@10.3.1.34>
Content-Length: 0
<------------>
[Dec 13 22:15:03] -- Executing [500@default:1]
Playback("SIP/xxx.206.xxx.136-090b5380", "demo-abouttotry") in new
stack
[Dec 13 22:15:03] Audio is at 10.3.1.34 port 47068
[Dec 13 22:15:03] Adding codec 0x4 (ulaw) to SDP
[Dec 13 22:15:03] Adding codec 0x8 (alaw) to SDP
[Dec 13 22:15:03] Adding codec 0x100 (g729) to SDP
[Dec 13 22:15:03] Adding non-codec 0x1 (telephone-event) to SDP
[Dec 13 22:15:03]
<--- Reliably Transmitting (no NAT) to 10.3.1.33:5060 --->
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.3.1.33;branch=z9hG4bK2fc1.94c7bb96.0;received=10.3.1.33
Via: SIP/2.0/UDP xxx.206.xxx.137;rport=5060;branch=z9hG4bKcbd9a65f8D4E5FE0
Record-Route: <sip:10.3.1.33;lr;ftag=CFE2AAA1-5B882804>
From: "pbaker" <sip:pbaker@xxx.206.xxx.136>;tag=CFE2AAA1-5B882804
To: <sip:500@xxx.206.xxx.136;user=phone>;tag=as26a99907
Call-ID: f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
CSeq: 2 INVITE
User-Agent: Asterisk PBX SVN-trunk-r92779
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: <sip:500@10.3.1.34>
Content-Type: application/sdp
Content-Length: 333
v=0
o=root 45593872 45593872 IN IP4 10.3.1.34
s=Asterisk PBX SVN-trunk-r92779
c=IN IP4 10.3.1.34
t=0 0
m=audio 47068 RTP/AVP 0 8 18 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
<------------>
[Dec 13 22:15:04] -- <SIP/xxx.206.xxx.136-090b5380> Playing
'demo-abouttotry.slin' (language 'en')
[Dec 13 22:15:04] Retransmitting #1 (no NAT) to 10.3.1.33:5060:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.3.1.33;branch=z9hG4bK2fc1.94c7bb96.0;received=10.3.1.33
Via: SIP/2.0/UDP xxx.206.xxx.137;rport=5060;branch=z9hG4bKcbd9a65f8D4E5FE0
Record-Route: <sip:10.3.1.33;lr;ftag=CFE2AAA1-5B882804>
From: "pbaker" <sip:pbaker@xxx.206.xxx.136>;tag=CFE2AAA1-5B882804
To: <sip:500@xxx.206.xxx.136;user=phone>;tag=as26a99907
Call-ID: f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
CSeq: 2 INVITE
User-Agent: Asterisk PBX SVN-trunk-r92779
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: <sip:500@10.3.1.34>
Content-Type: application/sdp
Content-Length: 333
v=0
o=root 45593872 45593872 IN IP4 10.3.1.34
s=Asterisk PBX SVN-trunk-r92779
c=IN IP4 10.3.1.34
t=0 0
m=audio 47068 RTP/AVP 0 8 18 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
---
[Dec 13 22:15:05] Retransmitting #2 (no NAT) to 10.3.1.33:5060:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.3.1.33;branch=z9hG4bK2fc1.94c7bb96.0;received=10.3.1.33
Via: SIP/2.0/UDP xxx.206.xxx.137;rport=5060;branch=z9hG4bKcbd9a65f8D4E5FE0
Record-Route: <sip:10.3.1.33;lr;ftag=CFE2AAA1-5B882804>
From: "pbaker" <sip:pbaker@xxx.206.xxx.136>;tag=CFE2AAA1-5B882804
To: <sip:500@xxx.206.xxx.136;user=phone>;tag=as26a99907
Call-ID: f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
CSeq: 2 INVITE
User-Agent: Asterisk PBX SVN-trunk-r92779
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: <sip:500@10.3.1.34>
Content-Type: application/sdp
Content-Length: 333
v=0
o=root 45593872 45593872 IN IP4 10.3.1.34
s=Asterisk PBX SVN-trunk-r92779
c=IN IP4 10.3.1.34
t=0 0
m=audio 47068 RTP/AVP 0 8 18 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
---
[Dec 13 22:15:07] Retransmitting #3 (no NAT) to 10.3.1.33:5060:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.3.1.33;branch=z9hG4bK2fc1.94c7bb96.0;received=10.3.1.33
Via: SIP/2.0/UDP xxx.206.xxx.137;rport=5060;branch=z9hG4bKcbd9a65f8D4E5FE0
Record-Route: <sip:10.3.1.33;lr;ftag=CFE2AAA1-5B882804>
From: "pbaker" <sip:pbaker@xxx.206.xxx.136>;tag=CFE2AAA1-5B882804
To: <sip:500@xxx.206.xxx.136;user=phone>;tag=as26a99907
Call-ID: f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
CSeq: 2 INVITE
User-Agent: Asterisk PBX SVN-trunk-r92779
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: <sip:500@10.3.1.34>
Content-Type: application/sdp
Content-Length: 333
v=0
o=root 45593872 45593872 IN IP4 10.3.1.34
s=Asterisk PBX SVN-trunk-r92779
c=IN IP4 10.3.1.34
t=0 0
m=audio 47068 RTP/AVP 0 8 18 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
---
[Dec 13 22:15:11] Retransmitting #4 (no NAT) to 10.3.1.33:5060:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.3.1.33;branch=z9hG4bK2fc1.94c7bb96.0;received=10.3.1.33
Via: SIP/2.0/UDP xxx.206.xxx.137;rport=5060;branch=z9hG4bKcbd9a65f8D4E5FE0
Record-Route: <sip:10.3.1.33;lr;ftag=CFE2AAA1-5B882804>
From: "pbaker" <sip:pbaker@xxx.206.xxx.136>;tag=CFE2AAA1-5B882804
To: <sip:500@xxx.206.xxx.136;user=phone>;tag=as26a99907
Call-ID: f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
CSeq: 2 INVITE
User-Agent: Asterisk PBX SVN-trunk-r92779
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: <sip:500@10.3.1.34>
Content-Type: application/sdp
Content-Length: 333
v=0
o=root 45593872 45593872 IN IP4 10.3.1.34
s=Asterisk PBX SVN-trunk-r92779
c=IN IP4 10.3.1.34
t=0 0
m=audio 47068 RTP/AVP 0 8 18 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
---
[Dec 13 22:15:15] Retransmitting #5 (no NAT) to 10.3.1.33:5060:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.3.1.33;branch=z9hG4bK2fc1.94c7bb96.0;received=10.3.1.33
Via: SIP/2.0/UDP xxx.206.xxx.137;rport=5060;branch=z9hG4bKcbd9a65f8D4E5FE0
Record-Route: <sip:10.3.1.33;lr;ftag=CFE2AAA1-5B882804>
From: "pbaker" <sip:pbaker@xxx.206.xxx.136>;tag=CFE2AAA1-5B882804
To: <sip:500@xxx.206.xxx.136;user=phone>;tag=as26a99907
Call-ID: f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
CSeq: 2 INVITE
User-Agent: Asterisk PBX SVN-trunk-r92779
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: <sip:500@10.3.1.34>
Content-Type: application/sdp
Content-Length: 333
v=0
o=root 45593872 45593872 IN IP4 10.3.1.34
s=Asterisk PBX SVN-trunk-r92779
c=IN IP4 10.3.1.34
t=0 0
m=audio 47068 RTP/AVP 0 8 18 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
---
[Dec 13 22:15:18] -- Executing [500@default:2]
Dial("SIP/xxx.206.xxx.136-090b5380",
"IAX2/guest@misery.digium.com/s@default") in new stack
[Dec 13 22:15:18] -- Called guest@misery.digium.com/s@default
[Dec 13 22:15:18] -- Call accepted by 216.207.245.8 (format gsm)
[Dec 13 22:15:18] -- Format for call is gsm
[Dec 13 22:15:18] -- IAX2/216.207.245.8:4569-1 is ringing
[Dec 13 22:15:19] -- IAX2/216.207.245.8:4569-1 answered SIP/xxx.206.xxx.136-090b5380
[Dec 13 22:15:19] Retransmitting #6 (no NAT) to 10.3.1.33:5060:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.3.1.33;branch=z9hG4bK2fc1.94c7bb96.0;received=10.3.1.33
Via: SIP/2.0/UDP xxx.206.xxx.137;rport=5060;branch=z9hG4bKcbd9a65f8D4E5FE0
Record-Route: <sip:10.3.1.33;lr;ftag=CFE2AAA1-5B882804>
From: "pbaker" <sip:pbaker@xxx.206.xxx.136>;tag=CFE2AAA1-5B882804
To: <sip:500@xxx.206.xxx.136;user=phone>;tag=as26a99907
Call-ID: f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137
CSeq: 2 INVITE
User-Agent: Asterisk PBX SVN-trunk-r92779
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: <sip:500@10.3.1.34>
Content-Type: application/sdp
Content-Length: 333
v=0
o=root 45593872 45593872 IN IP4 10.3.1.34
s=Asterisk PBX SVN-trunk-r92779
c=IN IP4 10.3.1.34
t=0 0
m=audio 47068 RTP/AVP 0 8 18 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
---
[Dec 13 22:15:23] WARNING[16421]: chan_sip.c:2337 retrans_pkt: Maximum retries exceeded
on transmission f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137 for seqno 2 (Critical Response)
[Dec 13 22:15:23] WARNING[16421]: chan_sip.c:2364 retrans_pkt: Hanging up call
f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137 - no reply to our critical packet.
[Dec 13 22:15:23] -- Hungup 'IAX2/216.207.245.8:4569-1'
[Dec 13 22:15:23] == Spawn extension (default, 500, 2) exited non-zero on
'SIP/xxx.206.xxx.136-090b5380'
[Dec 13 22:15:24] Really destroying SIP dialog
'f7232b5-5d4b9a93-e6ff617e(a)xxx.206.xxx.137' Method: INVITE
#### PCAP Diagram
|Time | xxx.206.xxx.137 | 10.3.1.33 |
|5.056 | Request: INVITE sip |SIP/SDP: Request: INVITE
sip:500@xxx.206.xxx.136:5060;user=phone, with session description
| |(5060) ------------------> (5060) |
|5.058 | Status: 100 Trying |SIP: Status: 100 Trying
| |(5060) <------------------ (5060) |
|5.058 | Status: 407 Proxy A |SIP: Status: 407 Proxy Authentication
Required
| |(5060) <------------------ (5060) |
|5.140 | Request: ACK sip:50 |SIP: Request: ACK
sip:500@xxx.206.xxx.136:5060
| |(5060) ------------------> (5060) |
|5.165 | Request: INVITE sip |SIP/SDP: Request: INVITE
sip:500@xxx.206.xxx.136:5060;user=phone, with session description
| |(5060) ------------------> (5060) |
|5.165 | Status: 100 Trying |SIP: Status: 100 Trying
| |(5060) <------------------ (5060) |
|5.168 | Status: 200 OK, wit |SIP/SDP: Status: 200 OK, with session
description
| |(5060) <------------------ (5060) |
|6.169 | Status: 200 OK, wit |SIP/SDP: Status: 200 OK, with session
description
| |(5060) <------------------ (5060) |
|7.168 | Status: 200 OK, wit |SIP/SDP: Status: 200 OK, with session
description
| |(5060) <------------------ (5060) |
|9.168 | Status: 200 OK, wit |SIP/SDP: Status: 200 OK, with session
description
| |(5060) <------------------ (5060) |
|13.169 | Status: 200 OK, wit |SIP/SDP: Status: 200 OK, with session
description
| |(5060) <------------------ (5060) |
|17.169 | Status: 200 OK, wit |SIP/SDP: Status: 200 OK, with session
description
| |(5060) <------------------ (5060) |
|21.169 | Status: 200 OK, wit |SIP/SDP: Status: 200 OK, with session
description
| |(5060) <------------------ (5060) |
#### OpenSER Config 1.2
########################################################################
# This configuration is autogenerated by sip:wizard
# (
http://www.sipwise.com/wizard) on Thu Dec 13 22:43:43 +0100 2007
# for OpenSER 1.2
#
# Copyright (C) 2007 Sipwise (support(a)sipwise.com)
########################################################################
########################################################################
# By obtaining, using, and/or copying this configuration and/or its
# associated documentation, you agree that you have read, understood,
# and will comply with the Terms of Usage provided at
#
http://www.sipwise.com/news/?page_id=6 as well as the following
# additions:
#
# Permission to use, copy, modify, and distribute this configuration and
# its associated documentation for any purpose and without fee is hereby
# granted, provided that the above copyright notice appears in all
# copies, and that both that copyright notice and this permission notice
# appear in supporting documentation, and that the name of Sipwise or
# the author will not be used in advertising or publicity pertaining to
# distribution of the configuration without specific, written prior
# permission.
########################################################################
########################################################################
# Before using this configuration, read the following prerequisites in
# order to gain the designated functionallity:
#
# base:
# You have to insert all locally served domains (i.e.
# "openserctl domain add your.domain.com").
#
# nat-rtpproxy:
# You have to install RTPProxy
# (
http://www.openser.org/downloads/snapshots/rtpproxy/) for relaying
# RTP traffic.
#
# offnet-pstn:
# You have to add a routing entry for lcr (i.e. "openserctl lcr
# addroute '' '' 1 1"). Additionally, you have to add your
gateways
# (i.e. "openserctl lcr addgw my-test-gw 1.2.3.4 5060 sip udp 1").
#
########################################################################
########################################################################
# Configuration 'sip:wizard - Thu Dec 13 22:43:43 +0100 2007'
########################################################################
listen = udp:10.3.1.33:5060
mpath = "/usr/local/lib/openser/modules"
children = 8
debug = 3
fork = yes
group = "openser"
user = "openser"
disable_tcp = no
log_facility = LOG_DAEMON
log_stderror = no
tcp_children = 4
mhomed = no
server_signature = yes
sock_group = "openser"
sock_mode = 0600
sock_user = "openser"
unix_sock = "/tmp/openser.sock"
unix_sock_children = 1
reply_to_via = no
sip_warning = yes
check_via = no
dns = no
rev_dns = no
disable_core_dump = no
dns_try_ipv6 = yes
dns_use_search_list = yes
loadmodule "usrloc.so"
modparam("usrloc", "user_column", "username")
modparam("usrloc", "domain_column", "domain")
modparam("usrloc", "contact_column", "contact")
modparam("usrloc", "expires_column", "expires")
modparam("usrloc", "q_column", "q")
modparam("usrloc", "callid_column", "callid")
modparam("usrloc", "cseq_column", "cseq")
modparam("usrloc", "methods_column", "methods")
modparam("usrloc", "flags_column", "flags")
modparam("usrloc", "user_agent_column", "user_agent")
modparam("usrloc", "received_column", "received")
modparam("usrloc", "socket_column", "socket")
modparam("usrloc", "use_domain", 0)
modparam("usrloc", "desc_time_order", 0)
modparam("usrloc", "timer_interval", 60)
modparam("usrloc", "db_url",
"mysql://openser:openserrw@localhost/openser")
modparam("usrloc", "db_mode", 1)
modparam("usrloc", "matching_mode", 0)
modparam("usrloc", "cseq_delay", 20)
modparam("usrloc", "nat_bflag", 6)
loadmodule "textops.so"
loadmodule "rr.so"
modparam("rr", "enable_full_lr", 0)
modparam("rr", "append_fromtag", 1)
modparam("rr", "enable_double_rr", 1)
modparam("rr", "add_username", 0)
loadmodule "tm.so"
modparam("tm", "fr_timer", 30)
modparam("tm", "fr_inv_timer", 120)
modparam("tm", "wt_timer", 5)
modparam("tm", "delete_timer", 2)
modparam("tm", "noisy_ctimer", 0)
modparam("tm", "ruri_matching", 1)
modparam("tm", "via1_matching", 1)
modparam("tm", "unix_tx_timeout", 2)
modparam("tm", "restart_fr_on_each_reply", 1)
modparam("tm", "pass_provisional_replies", 0)
loadmodule "xlog.so"
modparam("xlog", "buf_size", 4096)
modparam("xlog", "force_color", 0)
loadmodule "mi_fifo.so"
modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")
modparam("mi_fifo", "fifo_mode", 0660)
modparam("mi_fifo", "fifo_group", "openser")
modparam("mi_fifo", "fifo_user", "openser")
modparam("mi_fifo", "reply_dir", "/tmp/")
modparam("mi_fifo", "reply_indent", "\t")
loadmodule "domain.so"
modparam("domain", "db_url",
"mysql://openser:openserrw@localhost/openser")
modparam("domain", "db_mode", 1)
modparam("domain", "domain_table", "domain")
modparam("domain", "domain_col", "domain")
loadmodule "nathelper.so"
modparam("nathelper", "natping_interval", 60)
modparam("nathelper", "ping_nated_only", 1)
modparam("nathelper", "rtpproxy_sock",
"unix:/var/run/rtpproxy.sock")
modparam("nathelper", "rtpproxy_disable", 0)
modparam("nathelper", "rtpproxy_disable_tout", 60)
modparam("nathelper", "rtpproxy_tout", 1)
modparam("nathelper", "rtpproxy_retr", 5)
modparam("nathelper", "sipping_method", "OPTIONS")
modparam("nathelper", "received_avp", "$avp(i:801)")
loadmodule "sl.so"
modparam("sl", "enable_stats", 1)
loadmodule "uri.so"
loadmodule "registrar.so"
modparam("registrar", "default_expires", 3600)
modparam("registrar", "min_expires", 60)
modparam("registrar", "max_expires", 0)
modparam("registrar", "default_q", 0)
modparam("registrar", "append_branches", 1)
modparam("registrar", "case_sensitive", 0)
modparam("registrar", "received_param", "received")
modparam("registrar", "max_contacts", 0)
modparam("registrar", "retry_after", 0)
modparam("registrar", "method_filtering", 0)
modparam("registrar", "path_mode", 2)
modparam("registrar", "path_use_received", 0)
modparam("registrar", "received_avp", "$avp(i:801)")
loadmodule "maxfwd.so"
modparam("maxfwd", "max_limit", 256)
loadmodule "mysql.so"
modparam("mysql", "ping_interval", 300)
modparam("mysql", "auto_reconnect", 1)
loadmodule "auth.so"
modparam("auth", "nonce_expire", 300)
modparam("auth", "rpid_suffix",
";party=calling;id-type=subscriber;screen=yes")
modparam("auth", "rpid_avp", "$avp(s:rpid)")
loadmodule "auth_db.so"
modparam("auth_db", "db_url",
"mysql://openser:openserrw@localhost/openser")
modparam("auth_db", "user_column", "username")
modparam("auth_db", "domain_column", "domain")
modparam("auth_db", "password_column", "password")
modparam("auth_db", "password_column_2", "ha1b")
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "use_domain", 0)
modparam("auth_db", "load_credentials", "rpid")
loadmodule "uri_db.so"
modparam("uri_db", "db_url",
"mysql://openser:openserrw@localhost/openser")
modparam("uri_db", "uri_table", "uri")
modparam("uri_db", "uri_user_column", "username")
modparam("uri_db", "uri_domain_column", "domain")
modparam("uri_db", "uri_uriuser_column", "uri_user")
modparam("uri_db", "subscriber_table", "subscriber")
modparam("uri_db", "subscriber_user_column", "username")
modparam("uri_db", "subscriber_domain_column", "domain")
modparam("uri_db", "use_uri_table", 0)
modparam("uri_db", "use_domain", 0)
loadmodule "lcr.so"
modparam("lcr", "db_url",
"mysql://openser:openserrw@localhost/openser")
modparam("lcr", "gw_table", "gw")
modparam("lcr", "gw_name_column", "gw_name")
modparam("lcr", "ip_addr_column", "ip_addr")
modparam("lcr", "port_column", "port")
modparam("lcr", "uri_scheme_column", "uri_scheme")
modparam("lcr", "transport_column", "transport")
modparam("lcr", "grp_id_column", "grp_id")
modparam("lcr", "lcr_table", "lcr")
modparam("lcr", "strip_column", "strip")
modparam("lcr", "prefix_column", "prefix")
modparam("lcr", "from_uri_column", "from_uri")
modparam("lcr", "priority_column", "priority")
modparam("lcr", "gw_uri_avp", "1400")
modparam("lcr", "ruri_user_avp", "1402")
modparam("lcr", "contact_avp", "1401")
modparam("lcr", "fr_inv_timer_avp", "s:fr_inv_timer_avp")
modparam("lcr", "fr_inv_timer", 90)
modparam("lcr", "fr_inv_timer_next", 30)
modparam("lcr", "rpid_avp", "s:rpid")
########################################################################
# Request route 'main'
########################################################################
route[0]
{
xlog("L_INFO", "New request - M=$rm RURI=$ru F=$fu T=$tu IP=$si
ID=$ci\n");
force_rport();
if(msg:len > max_len)
{
xlog("L_INFO", "Message too big - M=$rm RURI=$ru F=$fu
T=$tu IP=$si ID=$ci\n");
sl_send_reply("513", "Message Too Big");
exit;
}
if (!mf_process_maxfwd_header("10"))
{
xlog("L_INFO", "Too many hops - M=$rm RURI=$ru F=$fu T=$tu
IP=$si ID=$ci\n");
sl_send_reply("483", "Too Many Hops");
exit;
}
if(!is_method("REGISTER"))
{
if(nat_uac_test("19"))
{
record_route(";nat=yes");
}
else
{
record_route();
}
}
if(is_method("CANCEL") || is_method("BYE"))
{
unforce_rtp_proxy();
}
if(loose_route())
{
if(!has_totag())
{
xlog("L_INFO", "Initial loose-routing rejected -
M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
sl_send_reply("403", "Initial Loose-Routing
Rejected");
exit;
}
if(nat_uac_test("19") ||
search("^Route:.*;nat=yes"))
{
fix_nated_contact();
setbflag(6);
}
route(3);
}
if(is_method("REGISTER"))
{
route(2);
}
if(is_method("INVITE"))
{
route(4);
}
if(is_method("CANCEL") || is_method("ACK"))
{
route(8);
}
route(9);
}
########################################################################
# Request route 'stop-rtp-proxy'
########################################################################
route[1]
{
if(isflagset(22))
{
unforce_rtp_proxy();
}
}
########################################################################
# Request route 'base-route-register'
########################################################################
route[2]
{
sl_send_reply("100", "Trying");
if(!www_authorize("", "subscriber"))
{
xlog("L_INFO", "Register authentication failed - M=$rm
RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
www_challenge("", "0");
exit;
}
if(!check_to())
{
xlog("L_INFO", "Spoofed To-URI detected - M=$rm RURI=$ru
F=$fu T=$tu IP=$si ID=$ci\n");
sl_send_reply("403", "Spoofed To-URI Detected");
exit;
}
consume_credentials();
if(!search("^Contact:[ ]*\*") && nat_uac_test("19"))
{
fix_nated_register();
setbflag(6);
}
if(!save("location"))
{
xlog("L_ERR", "Saving contact failed - M=$rm RURI=$ru
F=$fu T=$tu IP=$si ID=$ci\n");
sl_reply_error();
exit;
}
xlog("L_INFO", "Registration successful - M=$rm RURI=$ru F=$fu
T=$tu IP=$si ID=$ci\n");
exit;
}
########################################################################
# Request route 'base-outbound'
########################################################################
route[3]
{
if(isbflagset(6))
{
if(!isflagset(22) && !search("^Content-Length:[ ]*0"))
{
setflag(22);
force_rtp_proxy();
}
t_on_reply("2");
}
else
{
t_on_reply("1");
}
if(!isflagset(21))
{
t_on_failure("2");
}
if(isflagset(29))
{
append_branch();
}
if(is_present_hf("Proxy-Authorization"))
{
consume_credentials();
}
xlog("L_INFO", "Request leaving server, D-URI='$du' -
M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
# no 100 (we already sent it) and no DNS blacklisting
if(!t_relay("0x05"))
{
sl_reply_error();
if(is_method("INVITE") && isbflagset(6))
{
unforce_rtp_proxy();
}
}
exit;
}
########################################################################
# Request route 'base-route-invite'
########################################################################
route[4]
{
sl_send_reply("100", "Trying");
if(from_gw())
{
xlog("L_INFO", "Call from PSTN' - M=$rm RURI=$ru F=$fu
T=$tu IP=$si ID=$ci\n");
setflag(23);
}
else
{
if(!proxy_authorize("", "subscriber"))
{
xlog("L_INFO", "Proxy authentication failed -
M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
proxy_challenge("", "0");
exit;
}
if(!check_from())
{
xlog("L_INFO", "Spoofed From-URI detected - M=$rm
RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
sl_send_reply("403", "Spoofed From-URI
Detected");
exit;
}
}
if(nat_uac_test("19"))
{
fix_nated_contact();
setbflag(6);
}
route(5);
}
########################################################################
# Request route 'invite-find-callee'
########################################################################
route[5]
{
if(!is_domain_local("$rd"))
{
setflag(20);
route(7);
}
if(does_uri_exist())
{
xlog("L_INFO", "Callee is local - M=$rm RURI=$ru F=$fu
T=$tu IP=$si ID=$ci\n");
route(6);
}
else
{
xlog("L_INFO", "Callee is not local - M=$rm RURI=$ru F=$fu
T=$tu IP=$si ID=$ci\n");
route(7);
}
exit;
}
########################################################################
# Request route 'invite-to-internal'
########################################################################
route[6]
{
if(!lookup("location"))
{
xlog("L_INFO", "Local user offline - M=$rm RURI=$ru F=$fu
T=$tu IP=$si ID=$ci\n");
sl_send_reply("404", "User Offline");
}
else
{
xlog("L_INFO", "Local user online - M=$rm RURI=$ru F=$fu
T=$tu IP=$si ID=$ci\n");
route(3);
}
exit;
}
########################################################################
# Request route 'invite-to-external'
########################################################################
route[7]
{
if(isflagset(20))
{
xlog("L_INFO", "Call to foreign domain - M=$rm RURI=$ru
F=$fu T=$tu IP=$si ID=$ci\n");
route(3);
exit;
}
if(!isflagset(23))
{
# don't allow calls relaying from PSTN to PSTN, if not explicitely
forwarded
if(uri =~ "^sip:[0-9]+@")
{
# only route numeric users to PSTN
if(!load_gws())
{
xlog("L_ERR", "Error loading PSTN gateways
- M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
sl_send_reply("503", "PSTN Termination
Currently Unavailable");
exit;
}
if(!next_gw())
{
xlog("L_ERR", "No PSTN gateways available
- M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
sl_send_reply("503", "PSTN Termination
Currently Unavailable");
exit;
}
setflag(21);
t_on_failure("1");
route(3);
}
}
xlog("L_INFO", "Call to unknown user - M=$rm RURI=$ru F=$fu T=$tu
IP=$si ID=$ci\n");
sl_send_reply("404", "User Not Found");
exit;
}
########################################################################
# Request route 'base-route-local'
########################################################################
route[8]
{
t_on_reply("1");
if(t_check_trans())
{
xlog("L_INFO", "Request leaving server - M=$rm RURI=$ru
F=$fu T=$tu IP=$si ID=$ci\n");
if(!t_relay())
{
sl_reply_error();
}
}
else
{
xlog("L_INFO", "Dropping mis-routed request - M=$rm
RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
}
exit;
}
########################################################################
# Request route 'base-route-generic'
########################################################################
route[9]
{
xlog("L_INFO", "Method not supported - M=$rm RURI=$ru F=$fu T=$tu
IP=$si ID=$ci\n");
sl_send_reply("501", "Method Not Supported Here");
exit;
}
########################################################################
# Request route 'base-filter-failover'
########################################################################
route[10]
{
if(!t_check_status("408|500|503"))
{
xlog("L_INFO", "No failover routing needed for this
response code - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
route(1);
exit;
}
}
########################################################################
# Reply route 'base-standard-reply'
########################################################################
onreply_route[1]
{
xlog("L_INFO", "Reply - S=$rs D=$rr F=$fu T=$tu IP=$si
ID=$ci\n");
exit;
}
########################################################################
# Reply route 'base-nat-reply'
########################################################################
onreply_route[2]
{
xlog("L_INFO", "NAT-Reply - S=$rs D=$rr F=$fu T=$tu IP=$si
ID=$ci\n");
if(nat_uac_test("1"))
{
fix_nated_contact();
}
if(isbflagset(6) && status=~"(180)|(183)|2[0-9][0-9]")
{
if(!search("^Content-Length:[ ]*0"))
{
force_rtp_proxy();
}
}
exit;
}
########################################################################
# Failure route 'pstn-failover'
########################################################################
failure_route[1]
{
xlog("L_INFO", "Failure route for PSTN entered - M=$rm RURI=$ru
F=$fu T=$tu IP=$si ID=$ci\n");
route(10);
if(!next_gw())
{
xlog("L_ERR", "Failed to select next PSTN gateway - M=$rm
RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
route(1);
exit;
}
t_on_failure("1");
route(3);
}
########################################################################
# Failure route 'base-standard-failure'
########################################################################
failure_route[2]
{
route(10);
route(1);
}
_______________________________________________
Users mailing list
Users(a)lists.openser.org
http://lists.openser.org/cgi-bin/mailman/listinfo/users