{"id":4580,"date":"2017-05-04T13:56:34","date_gmt":"2017-05-04T13:56:34","guid":{"rendered":"http:\/\/www.skyswitch.com\/?p=4580"},"modified":"2021-09-08T21:51:19","modified_gmt":"2021-09-08T21:51:19","slug":"t-mobile-breaks-sip-ipv6-updates","status":"publish","type":"post","link":"https:\/\/skyswitch.com\/blog\/t-mobile-breaks-sip-ipv6-updates\/","title":{"rendered":"T-Mobile Broke SIP on my iPhone with IPv6 Update"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A funny thing happened after&nbsp;my T-Mobile iPhone recently upgraded to iOS 10.3.1 &#8230; my SIP client stopped working!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It seems that the OS update&nbsp;came along with new carrier settings that assigned my device an IPv6 address. &nbsp;In my case, the carrier setting version is now T Mobile 28.3.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After analyzing network captures from the switch side, we found that SIP UDP messages are no longer routed to the SkySwitch&nbsp;SIP proxy which has an IPv4 address. &nbsp;But&nbsp;noticing that API calls made over HTTP from the same app were reaching the IPv4&nbsp;web service, we concluded that TCP packets were being translated and routed correctly. &nbsp; So we switched the SIP signaling to TCP and the IPv6 device was able to register with the IPv4 server. &nbsp; Unfortunately, this allowed only basic two-way communication between the SIP client&nbsp;and the proxy. &nbsp;SIP calling was&nbsp;still broken because the audio IP addresses and ports still referenced IPv6. &nbsp;Specifically, the CONTACT&nbsp;header and RTP IP addresses in the SDP contain the IPv6 address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A little research uncovered that T-Mobile&nbsp;has been rolling IPv6 to Android devices for a few years now . &nbsp; According to this <a href=\"https:\/\/nanog.org\/sites\/default\/files\/wednesday_general_byrne_breakingfree_11.pdf\" target=\"_blank\" rel=\"noopener\">T-Mobile slide deck from 2014<\/a>, they use an IPv6 transition mechanism called <a href=\"https:\/\/en.wikipedia.org\/wiki\/IPv6_transition_mechanism\" target=\"_blank\" rel=\"noopener\">464XLAT<\/a> to allow communication between IPv6 devices and servers on the Internet that do not support IPv6. &nbsp;But making the conversion work seamlessly for applications that reference IP address information in the payload (such as SIP) requires&nbsp;a client&nbsp;side translator called CLAT (this <a href=\"https:\/\/www.juniper.net\/documentation\/en_US\/junos\/topics\/concept\/nat-security-source-pool-persistent-address-understanding.html\" target=\"_blank\" rel=\"noopener\">document<\/a> from Juniper explains it). &nbsp; To make a long story short, Android version 4.3 embedded a CLAT client into the operating system in 2013, but Apple never did. &nbsp;As a result, T-Mobile has continued to serve IPv4 &nbsp;addresses to iPhone users &#8230; until last week.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I suppose we may never know why Apple has not employed CLAT in the operating system (thereby forcing SIP application developers to embed this functionality in the app), or why T-Mobile decided to force IPv6 on iPhone owners despite this limitation. &nbsp;But the bottom line is that more than a few SIP applications have stopped working as a result (eg. <a href=\"https:\/\/support.t-mobile.com\/message\/588787#588787\" target=\"_blank\" rel=\"noopener\">here<\/a>). &nbsp; &nbsp;I hope that this blog will save other SIP users some time in &nbsp;figuring out why.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the meantime, we are working with our vendors to support IPv6 in this use case.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A funny thing happened after&nbsp;my T-Mobile iPhone recently upgraded to iOS 10.3.1 &#8230; my SIP client stopped working! It seems that the OS update&nbsp;came along with new carrier settings that assigned my device an IPv6 address. &nbsp;In my case, the carrier setting version is now T Mobile 28.3. After analyzing network captures from the switch&hellip;<\/p>\n","protected":false},"author":7,"featured_media":4585,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[7],"tags":[],"class_list":["post-4580","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/skyswitch.com\/wp-json\/wp\/v2\/posts\/4580","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/skyswitch.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/skyswitch.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/skyswitch.com\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/skyswitch.com\/wp-json\/wp\/v2\/comments?post=4580"}],"version-history":[{"count":0,"href":"https:\/\/skyswitch.com\/wp-json\/wp\/v2\/posts\/4580\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/skyswitch.com\/wp-json\/wp\/v2\/media\/4585"}],"wp:attachment":[{"href":"https:\/\/skyswitch.com\/wp-json\/wp\/v2\/media?parent=4580"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/skyswitch.com\/wp-json\/wp\/v2\/categories?post=4580"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/skyswitch.com\/wp-json\/wp\/v2\/tags?post=4580"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}