Hi,
We have an ugly message looping scenario where a SIP request message received at Kamailio
is forwarded to the switch/router and back to Kamailio in a loop until the Max-forwards
header value becomes 0 or the transaction times out.
After receiving an incoming INVITE request from a local user, Kamailio forwards the INVITE
request to another proxy located in a different network. The call is established
successfully.
During the call setup the external proxy sends an OPTIONS request to Kamailio (actually
to the external public IP address from where it received INVITE request from Kamailio).
The OPTIONS request arrives at Kamailio. But the request uri contains the mapped public
address instead of the local ip address where Kamailio is listening. So Kamailio forwards
the request to the public IP address (i.e. the switch) which again sends it back to
Kamailio again and it keeps looping.
Here is the message flow. 192.168.1.3 is the local user registered to Kamailio which is
running at 192.168.1.5. IP address of the external proxy server is 10.139.90.161 and
10.139.90.137 is the public IP address of the switch/router. NAT isn't enabled at
Kamailio.
Internet Protocol Version 4, Src: 192.168.1.3 (192.168.1.3), Dst: 192.168.1.5
(192.168.1.5)
User Datagram Protocol, Src Port: sip (5060), Dst Port: sip (5060)
Session Initiation Protocol
Request-Line: INVITE sip:1002@video-conf SIP/2.0
Message Header
Via: SIP/2.0/UDP 192.168.1.3:5060;rport;branch=z9hG4bK1941685709
From: "xxxx" <sip:1001@192.168.1.5>;tag=256977615
To: <sip:1002@video-conf>
Call-ID: 1110783207
CSeq: 20 INVITE
Contact: <sip:1001@192.168.1.3>
Content-Type: application/sdp
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
Max-Forwards: 70
User-Agent: Linphone/3.5.2 (eXosip2/3.6.0)
Subject: Phone call
Content-Length: 510
Message Body
Internet Protocol Version 4, Src: 192.168.1.5 (192.168.1.5), Dst: 192.168.1.3
(192.168.1.3)
User Datagram Protocol, Src Port: sip (5060), Dst Port: sip (5060)
Session Initiation Protocol
Status-Line: SIP/2.0 100 trying -- your call is important to us
Message Header
Via: SIP/2.0/UDP 192.168.1.3:5060;rport=5060;branch=z9hG4bK1941685709
From: "xxxx" <sip:1001@192.168.1.5>;tag=256977615
To: <sip:1002@video-conf>
Call-ID: 1110783207
CSeq: 20 INVITE
Server: kamailio (3.3.3 (i386/linux))
Content-Length: 0
Internet Protocol Version 4, Src: 192.168.1.5 (192.168.1.5), Dst: 10.139.90.161
(10.139.90.161)
User Datagram Protocol, Src Port: sip (5060), Dst Port: sip (5060)
Session Initiation Protocol
Request-Line: INVITE sip:1002@vc-vcs-control.air2gnd.net SIP/2.0
Message Header
Record-Route: <sip:192.168.1.5;lr=on>
Via: SIP/2.0/UDP 192.168.1.5;branch=z9hG4bKd6e1.f7985e64.0
Via: SIP/2.0/UDP 192.168.1.3:5060;rport=5060;branch=z9hG4bK1941685709
From: "xxxx" <sip:1001@192.168.1.5>;tag=256977615
To: <sip:1002@video-conf>
Call-ID: 1110783207
CSeq: 20 INVITE
Contact: <sip:1001@192.168.1.3>
Content-Type: application/sdp
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
Max-Forwards: 69
User-Agent: Linphone/3.5.2 (eXosip2/3.6.0)
Subject: Phone call
Content-Length: 510
Message Body
Internet Protocol Version 4, Src: 10.139.90.161 (10.139.90.161), Dst: 192.168.1.5
(192.168.1.5)
User Datagram Protocol, Src Port: sip (5060), Dst Port: sip (5060)
Session Initiation Protocol
Status-Line: SIP/2.0 100 Trying
Message Header
Via: SIP/2.0/UDP 192.168.1.5;branch=z9hG4bKd6e1.f7985e64.0;received=10.139.90.137
Via: SIP/2.0/UDP 192.168.1.3:5060;rport=5060;branch=z9hG4bK1941685709
From: "xxxx" <sip:1001@192.168.1.5>;tag=256977615
To: <sip:1002@video-conf>
Call-ID: 1110783207
CSeq: 20 INVITE
Content-Length: 0
Internet Protocol Version 4, Src: 10.139.90.161 (10.139.90.161), Dst: 192.168.1.5
(192.168.1.5)
User Datagram Protocol, Src Port: sip (5060), Dst Port: sip (5060)
Session Initiation Protocol
Status-Line: SIP/2.0 101 Dialog Establishement
Message Header
Via: SIP/2.0/UDP 192.168.1.5;branch=z9hG4bKd6e1.f7985e64.0;received=10.139.90.137
Via: SIP/2.0/UDP 192.168.1.3:5060;rport=5060;branch=z9hG4bK1941685709
Record-Route: <sip:192.168.1.5;lr=on>
From: "xxxx" <sip:1001@192.168.1.5>;tag=256977615
To: <sip:1002@ video-conf>;tag=689763673
Call-ID: 1110783207
CSeq: 20 INVITE
Contact: <sip:1002@10.139.90.161:5060>
Content-Length: 0
Internet Protocol Version 4, Src: 192.168.1.5 (192.168.1.5), Dst: 192.168.1.3
(192.168.1.3)
User Datagram Protocol, Src Port: sip (5060), Dst Port: sip (5060)
Session Initiation Protocol
Status-Line: SIP/2.0 101 Dialog Establishement
Message Header
Via: SIP/2.0/UDP 192.168.1.3:5060;rport=5060;branch=z9hG4bK1941685709
Record-Route: <sip:192.168.1.5;lr=on>
From: "xxxx" <sip:1001@192.168.1.5>;tag=256977615
To: <sip:1002@video-conf>;tag=689763673
Call-ID: 1110783207
CSeq: 20 INVITE
Contact: sip:1002@10.139.90.161:5060
Content-Length: 0
P-Received: 10.139.90.137
Internet Protocol Version 4, Src: 10.139.90.161 (10.139.90.161), Dst: 192.168.1.5
(192.168.1.5)
User Datagram Protocol, Src Port: sip (5060), Dst Port: sip (5060)
Session Initiation Protocol
Request-Line: OPTIONS sip:10.139.90.137:5060 SIP/2.0
Message Header
Via: SIP/2.0/UDP 10.139.90.161:5060;rport;branch=z9hG4bK231479102
From: "yyyy" <sip:1002@10.139.90.161>;tag=537974226
To: <sip:1001@192.168.1.5>
Call-ID: 1856507851
CSeq: 20 OPTIONS
Accept: application/sdp
Max-Forwards: 70
Content-Length: 0
Internet Protocol Version 4, Src: 192.168.1.5 (192.168.1.5), Dst: 10.139.90.137
(10.139.90.137)
User Datagram Protocol, Src Port: sip (5060), Dst Port: sip (5060)
Session Initiation Protocol
Request-Line: OPTIONS sip:10.139.90.137:5060 SIP/2.0
Message Header
Via: SIP/2.0/UDP 192.168.1.5;branch=z9hG4bK8ba7.fa94bab7.0
Via: SIP/2.0/UDP 10.139.90.161:5060;rport=5060;branch=z9hG4bK231479102
From: "yyyy" <sip:1002@10.139.90.100>;tag=537974226
To: <sip:1001@192.168.1.5>
Call-ID: 1856507851
CSeq: 20 OPTIONS
Accept: application/sdp
Max-Forwards: 69
Content-Length: 0
Internet Protocol Version 4, Src: 10.139.90.137 (10.139.90.137), Dst: 192.168.1.5
(192.168.1.5)
User Datagram Protocol, Src Port: sip (5060), Dst Port: sip (5060)
Session Initiation Protocol
Request-Line: OPTIONS sip:10.139.90.137:5060 SIP/2.0
Message Header
Via: SIP/2.0/UDP 192.168.1.5;branch=z9hG4bK8ba7.fa94bab7.0
Via: SIP/2.0/UDP 10.139.90.161:5060;rport=5060;branch=z9hG4bK231479102
From: "uuuu" <sip:1002@10.139.90.100>;tag=537974226
To: <sip:1001@192.168.1.5>
Call-ID: 1856507851
CSeq: 20 OPTIONS
Accept: application/sdp
Max-Forwards: 69
Content-Length: 0
Internet Protocol Version 4, Src: 192.168.1.5 (192.168.1.5), Dst: 10.139.90.137
(10.139.90.137)
User Datagram Protocol, Src Port: sip (5060), Dst Port: sip (5060)
Session Initiation Protocol
Request-Line: OPTIONS sip:10.139.90.137:5060 SIP/2.0
Message Header
Via: SIP/2.0/UDP 192.168.1.5;branch=z9hG4bK8ba7.0b94bab7.0
Via: SIP/2.0/UDP 192.168.1.5;received=10.139.90.137;branch=z9hG4bK8ba7.fa94bab7.0
Via: SIP/2.0/UDP 10.139.90.161:5060;rport=5060;branch=z9hG4bK231479102
From: "yyyy" <sip:1002@10.139.90.100>;tag=537974226
To: <sip:1001@192.168.1.5>
Call-ID: 1856507851
CSeq: 20 OPTIONS
Accept: application/sdp
Max-Forwards: 68
Content-Length: 0
Internet Protocol Version 4, Src: 10.139.90.137 (10.139.90.137), Dst: 192.168.1.5
(192.168.1.5)
User Datagram Protocol, Src Port: sip (5060), Dst Port: sip (5060)
Session Initiation Protocol
Request-Line: OPTIONS sip:10.139.90.137:5060 SIP/2.0
Message Header
Via: SIP/2.0/UDP 192.168.1.5;branch=z9hG4bK8ba7.0b94bab7.0
Via: SIP/2.0/UDP 192.168.1.5;received=10.139.90.137;branch=z9hG4bK8ba7.fa94bab7.0
Via: SIP/2.0/UDP 10.139.90.161:5060;rport=5060;branch=z9hG4bK231479102
From: "yyyy" <sip:1002@10.139.90.100>;tag=537974226
To: <sip:1001@192.168.1.5>
Call-ID: 1856507851
CSeq: 20 OPTIONS
Accept: application/sdp
Max-Forwards: 68
Content-Length: 0
This message forwarding goes on for a long time in a loop, each time with an extra Via
header and Max-Forwards value decremented by one. After sometime it eventually times out
and Kamailio starts sending 408 response for the OPTIONS request which again keeps
looping.
Probably adding an alias for the public IP address i.e., 10.139.90.137 in the Kamailio
config file would solve the problem. But this IP address is not fixed and may change and I
guess there is no way Kamailio can learn the public IP address on its own.
Any help or reference to previous posts if it is already discussed and solved will be much
helpful.
Regards,
Ajay