Thanks for the answer Daniel, I’ve done some more digging and your answer makes perfect sense to me now. Actually when looking at the packet traces again, I saw that the Via sent by our firewall in the REGISTER says 212.126.160.92:6717 but the request is actually sent from port 19091 by the firewall. So I think this probably triggers the detection of “NAT case” in kamailio.
The SIP-Alg of the firewall leaves no additional clues in the request (i.e. modification of User-Agent header or something) that could be used for an exception rule. So I will raise this as a defect with Juniper. I think the Via must represent the exact IP + port the request is coming from, would you agree? Best regards, Joachim > On 16.02.2015, at 17:35, Daniel-Constantin Mierla <mico...@gmail.com> wrote: > > Hello, > > if you know that the contact address is valid and should be used for > opening connections towards UA, then do not call fix_nated_register() > for REGISTER request. > > Unfortunately UA behind NAT using STUN can lead to public address in > Via/Contact/etc... but with a wrong port, therefore we have many tests > to decide if UA should be considered behind NAT or no. In your case, > should not be considered behind nat. > > The received parameter in Via header was fixed, but I am quite sure > 3.2.x doesn't have it, that's quite old. You have to upgrade to a more > recent version. > > Cheers, > Daniel > > On 13/02/15 17:55, Joachim Büchse wrote: >> Good day, >> >> I’m experiencing some problems with our VoiP providers handling of REGISTER >> requests. We are using a Gigaset PRO N720 as UAC behind a Juniper SSG 140 >> with SIP-Alg enabled. This setup kind of works with UDP but our provider >> wants us to use TCP. With TCP enforced incoming calls don’t work. I’ve done >> some wire tracing and to me it seems that the providers configuration is to >> blame, but then - there are many RFCs out there and many NAT and UAC bug >> workarounds. Anyway, I wanted to get the opinion of “the" experts about how >> the requests send to the UAS SHOULD be correctly interpreted. >> >> >> The REGISTER requests/responses look like this (outside of the firewall): >> >> Protocol TCP! >> client port 19091 <-> server port 5060 >> >> REGISTER sip:pbx.peoplefone.ch SIP/2.0 >> Via: SIP/2.0/TCP >> 212.126.160.92:6717;rport;branch=z9hG4bKc1375589832468de63a719eac31156ec >> From: "Michel" <sip:90780408...@pbx.peoplefone.ch>;tag=2153084485 >> To: "Michel" <sip:90780408...@pbx.peoplefone.ch> >> Call-ID: 2825358480@10_10_128_10 >> CSeq: 1 REGISTER >> Contact: <sip:90780408050@212.126.160.92:6717;transport=tcp> >> Max-Forwards: 70 >> User-Agent: N720-DM-PRO/70.089.00.000.000 >> Expires: 180 >> Allow: INVITE, ACK, CANCEL, BYE, OPTIONS, INFO, REFER, SUBSCRIBE, NOTIFY >> Content-Length: 0 >> >> SIP/2.0 401 Unauthorized >> Via: SIP/2.0/TCP >> 212.126.160.92:6717;rport=19091;branch=z9hG4bKc1375589832468de63a719eac31156ec >> From: "Michel" <sip:90780408...@pbx.peoplefone.ch>;tag=2153084485 >> To: "Michel" >> <sip:90780408...@pbx.peoplefone.ch>;tag=a0440f545f39b2694d387b475a5f6bc9.b8fc >> Call-ID: 2825358480@10_10_128_10 >> CSeq: 1 REGISTER >> WWW-Authenticate: Digest realm="pbx.peoplefone.ch", >> nonce="VNqJBVTah9m57ZGGs8b5XCTM3GyaExDy" >> Server: kamailio (3.2.1 (x86_64/linux)) >> Content-Length: 0 >> >> REGISTER sip:pbx.peoplefone.ch SIP/2.0 >> Via: SIP/2.0/TCP >> 212.126.160.92:6717;rport;branch=z9hG4bK9c27afea96e2af4baab2f8d144a588e0 >> From: "Michel" <sip:90780408...@pbx.peoplefone.ch>;tag=2153084485 >> To: "Michel" <sip:90780408...@pbx.peoplefone.ch> >> Call-ID: 2825358480@10_10_128_10 >> CSeq: 2 REGISTER >> Contact: <sip:90780408050@212.126.160.92:6717;transport=tcp> >> Authorization: Digest username="90780408050", realm="pbx.peoplefone.ch", >> uri="sip:pbx.peoplefone.ch", nonce="VNqJBVTah9m57ZGGs8b5XCTM3GyaExDy", >> response="764f371a08d258157a249f8d1b852514" >> Max-Forwards: 70 >> User-Agent: N720-DM-PRO/70.089.00.000.000 >> Expires: 180 >> Allow: INVITE, ACK, CANCEL, BYE, OPTIONS, INFO, REFER, SUBSCRIBE, NOTIFY >> Content-Length: 0 >> >> SIP/2.0 200 OK >> Via: SIP/2.0/TCP >> 212.126.160.92:6717;rport=19091;branch=z9hG4bK9c27afea96e2af4baab2f8d144a588e0 >> From: "Michel" <sip:90780408...@pbx.peoplefone.ch>;tag=2153084485 >> To: "Michel" >> <sip:90780408...@pbx.peoplefone.ch>;tag=a0440f545f39b2694d387b475a5f6bc9.6bda >> Call-ID: 2825358480@10_10_128_10 >> CSeq: 2 REGISTER >> Contact: >> <sip:90780408050@212.126.160.92:6717;transport=tcp>;q=0;expires=180;received="sip:212.126.160.92:19091;transport=TCP" >> Server: kamailio (3.2.1 (x86_64/linux)) >> Content-Length: 0 >> >> >> The ip:port the firewall is sending those requests from is ip >> 212.126.160.92 port 19091. So this does NOT match the port from the Contact >> header. For TCP this seems rather logical to me, as one cant be listening on >> a TCP port and use it for sending at the same time. The UAC closes this >> “register connection” with TCP FIN after the register, and so does the >> firewall. >> >> However unfortunately subsequent requests from the provider (ie UAS) come in >> on port 19091 (not port 6717 from the Contact header) and the firewall >> simply drops them. >> >> Observations: >> - the server does NOT include received=212.126.160.92 in the Via of the >> reponse. According to RFC3581 this is mandatory when rport is present in the >> request, so this is probably an error in the server. >> - the server does include >> received="sip:212.126.160.92:19091;transport=TCP” in the Contact of the >> response. I didnt see this in any RFC (which means nothing;-) but it could >> be an error. >> - after the client received the 200 OK it closes the TCP connection. >> - the server tries several times to re-contact the client (incoming TCP >> SYN). However not on port 6717 (defined in the Contact header) but on port >> 19091 (where the REGISTER came from). >> >> RFC3581 defines special behaviour when “rport” is defined in the request >> (i.e. response should go to the same port the request came from) - however >> it’s not so clear if this should apply to subsequent (INVITE/OPTIONS) >> requests from the server to the client. Those are strictly spoken not >> replies (or are they?). >> >> RFC5626 defines that a “proxy” should keep track of the flows over which it >> received a registration and send requests over the same flow. It is not >> clear if RFC5626 should be applied. The RFC5626 defines that a UAC includes >> an “ob” parameter in the Contact field if it whishes further requests over >> the same flow. Also the RFC mandates a client to add a "reg-id=x" in the >> Contact field. Both are not the case here, so in short I think RFC5626 >> should NOT be applied. In which case conecting to the originating port >> (instead of the Contact port) would be a server error. >> >> So in short and if I interpret the RFCs correctly, the client is reachable >> and should be contacted on >> Transport: TCP >> IP: 212.126.160.92 >> Port: 6717 >> >> >> If anyone who lives and breathes SIP could enlighten me if the UAS is right >> to call back on 19091 instead of 6717 I would really appreciate it;-)) >> >> Best regards, >> Joachim >> >> >> >> _______________________________________________ >> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list >> sr-users@lists.sip-router.org >> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users > > -- > Daniel-Constantin Mierla > http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda > Kamailio World Conference, May 27-29, 2015 > Berlin, Germany - http://www.kamailioworld.com >
_______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users