Thanks for the answer Sergiu, Ovidiu
I don't know your setup but I use kamailio as load balancer with FS nodes (instead of kamailio's media proxy).
That is why I have FS node IP in the contact header of 200 OK message which go to MS teams (it's outbound call from MS to kam).
Like we all know MS doesn't like IP address at all (in contact and record-route). Thus I have to replace (at kamailio) FS node IP to fqdn of trunk I use with MS.
Also I had to comment record_route() for invites from MS.
You mentioned that I should not change contact header but... really MS ignore my 200 OK for all other cases.
Also you mentioned that you have record route header in 200 OK, but again - MS do not ignore 200 OK only in case I have only one record route header which was in initial INVITE from MS.
You said it is working for you. Not sure why really. May be you use kamalio rtpproxy and that is why have correct contact at once.
As for record route header - I have no ideas why MS doesn't ignore several record route headter in 200 OK for your case.
With my changes i got ACK from MS. And also got voice call but obviously it is dopped in ~30 sec because kamialio do not know destination for ACK from MS (it has kamailio FQDN in URI)
Normally with my setup, 200 OK keeps ip address of FS node and MS should send ACK to kamilio IP but with FS IP address in URI. We all know that MS do not respect RFC and can not do so. They just said in docs (we do not support sip proxy).
So... Now I should to think how re-direct such ACK to FS node. Should be possible to all this begin to be more and more complicated.
Any advice are welcome!