Changes for page SIP
Last modified by Aaron Blackburn on 2026/09/01 19:00
From version 1.3
edited by Aaron Blackburn
on 2026/09/01 18:33
on 2026/09/01 18:33
Change comment:
There is no comment for this version
To version 1.2
edited by Aaron Blackburn
on 2026/09/01 18:31
on 2026/09/01 18:31
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -1,13 +1,12 @@ 1 1 {{html clean="false"}} 2 2 <!-- 3 - XWiki usage: Paste into an HTML macro on your page. 4 - Note: All FirstDigital IPs have been sanitized for public safety. 3 + XWiki usage: paste everything in this file into an HTML macro. 5 5 --> 6 6 <style> 7 7 @import url('https://fonts.googleapis.com/css2?family=Host+Grotesk:wght@300;400;500;600;700;800&display=swap'); 8 8 9 - .fd-sip-d oc, .fd-sip-doc* { box-sizing: border-box; }10 - .fd-sip-d oc{8 + .fd-sip-diag, .fd-sip-diag * { box-sizing: border-box; } 9 + .fd-sip-diag { 11 11 --fd-navy: #003366; 12 12 --fd-dark-navy: #001a33; 13 13 --fd-blue: #307ab2; ... ... @@ -28,8 +28,8 @@ 28 28 padding: 24px 16px; 29 29 } 30 30 31 - /* H eader*/32 - .fd-sip-d oc.doc-header {30 + /* ---------- HEADER BANNER ---------- */ 31 + .fd-sip-diag .diag-header { 33 33 background: radial-gradient(circle at 50% 35%, rgba(13, 71, 128, 0.78) 0%, rgba(0, 51, 102, 0.93) 60%, rgba(0, 26, 51, 0.98) 100%), 34 34 url('Fiber Optic Theme.JPG') center/cover no-repeat; 35 35 padding: 40px 32px; ... ... @@ -39,7 +39,7 @@ 39 39 box-shadow: inset 0 0 60px rgba(0, 26, 51, 0.6), 0 12px 32px rgba(0, 51, 102, 0.12); 40 40 margin-bottom: 32px; 41 41 } 42 - .fd-sip-d oc.doc-header p.kicker {41 + .fd-sip-diag .diag-header p.kicker { 43 43 color: var(--fd-bright-cyan); 44 44 font-weight: 800; 45 45 font-size: .8rem; ... ... @@ -48,7 +48,7 @@ 48 48 margin: 0 0 8px; 49 49 text-shadow: 0 2px 10px rgba(0, 26, 51, 0.8); 50 50 } 51 - .fd-sip-d oc.doc-header h1 {50 + .fd-sip-diag .diag-header h1 { 52 52 font-weight: 800; 53 53 font-size: 2.25rem; 54 54 margin: 0 0 10px; ... ... @@ -55,7 +55,7 @@ 55 55 letter-spacing: -0.02em; 56 56 text-shadow: 0 3px 12px rgba(0, 26, 51, 0.9); 57 57 } 58 - .fd-sip-d oc.doc-header p.sub {57 + .fd-sip-diag .diag-header p.sub { 59 59 color: #f8fafc; 60 60 font-weight: 400; 61 61 font-size: 1rem; ... ... @@ -65,219 +65,305 @@ 65 65 text-shadow: 0 2px 8px rgba(0, 26, 51, 0.95); 66 66 } 67 67 68 - /* Notice Banner */ 69 - .fd-sip-doc .disclaimer-box { 70 - background: #f0f7fc; 71 - border-left: 5px solid var(--fd-blue); 72 - padding: 16px 20px; 73 - border-radius: 8px; 74 - margin-bottom: 28px; 75 - font-size: 0.9rem; 76 - line-height: 1.5; 67 + /* ---------- DIAGRAM ARCHITECTURE GRID ---------- */ 68 + .fd-sip-diag .arch-grid { 69 + display: grid; 70 + grid-template-columns: 1fr 120px 1.2fr 120px 1fr; 71 + align-items: center; 72 + gap: 12px; 73 + margin-bottom: 36px; 77 77 } 78 78 79 - /* SpecificationsGrid*/80 - .fd-sip-doc.section-title{81 - color: var(--fd-navy);82 - font-size: 1.35rem;83 - font-weight:700;84 - margin:32px 0 16px;85 - bo rder-bottom: 2pxsolid var(--fd-lightgrey);86 - p adding-bottom:8px;76 + .fd-sip-diag .node-box { 77 + background: rgba(255, 255, 255, 0.95); 78 + border: 2px solid var(--fd-lightgrey); 79 + border-radius: 16px; 80 + padding: 24px 20px; 81 + text-align: center; 82 + box-shadow: 0 8px 24px rgba(0, 30, 60, 0.06); 83 + position: relative; 87 87 } 88 88 89 - .fd-sip-doc .specs-grid { 90 - display: grid; 91 - grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); 92 - gap: 16px; 93 - margin-bottom: 32px; 86 + .fd-sip-diag .node-box.fd-cloud { 87 + background: linear-gradient(180deg, #f0f7fc 0%, #ffffff 100%); 88 + border-color: var(--fd-blue); 94 94 } 95 - .fd-sip-doc .spec-card { 96 - background: var(--fd-offwhite); 97 - border: 1px solid var(--fd-lightgrey); 98 - border-radius: 12px; 99 - padding: 16px 20px; 90 + .fd-sip-diag .node-box.firewall { 91 + background: linear-gradient(180deg, #fff5f5 0%, #ffffff 100%); 92 + border-color: var(--fd-red); 100 100 } 101 - .fd-sip-doc .spec-card .label { 102 - font-size: 0.75rem; 94 + .fd-sip-diag .node-box.cust-pbx { 95 + background: linear-gradient(180deg, var(--fd-offwhite) 0%, #ffffff 100%); 96 + border-color: var(--fd-navy); 97 + } 98 + 99 + .fd-sip-diag .node-badge { 100 + display: inline-block; 101 + padding: 4px 10px; 102 + font-size: 0.72rem; 103 + font-weight: 700; 103 103 text-transform: uppercase; 105 + letter-spacing: 0.08em; 106 + border-radius: 20px; 107 + margin-bottom: 12px; 108 + } 109 + .fd-cloud .node-badge { background: var(--fd-blue); color: #ffffff; } 110 + .firewall .node-badge { background: var(--fd-red); color: #ffffff; } 111 + .cust-pbx .node-badge { background: var(--fd-navy); color: #ffffff; } 112 + 113 + .fd-sip-diag .node-box h3 { 114 + margin: 0 0 6px; 115 + font-size: 1.2rem; 116 + color: var(--fd-navy); 104 104 font-weight: 700; 105 - color: var(--fd-grey); 106 - letter-spacing: 0.05em; 107 - margin-bottom: 4px; 108 108 } 109 - .fd-sip-doc .spec-card .val { 110 - font-size: 1rem; 119 + .fd-sip-diag .node-box p.ip-addr { 120 + font-family: monospace; 121 + font-size: 0.85rem; 111 111 font-weight: 700; 112 - color: var(--fd-navy); 123 + color: var(--fd-slate); 124 + background: #eef4f8; 125 + padding: 4px 8px; 126 + border-radius: 6px; 127 + display: inline-block; 128 + margin: 4px 0 10px; 113 113 } 114 - .fd-sip-d oc.spec-card.subtext{115 - font-size: 0.8rem; 130 + .fd-sip-diag .node-box p.desc { 131 + font-size: 0.82rem; 116 116 color: var(--fd-slate); 117 - margin-top: 4px; 133 + margin: 0; 134 + line-height: 1.4; 118 118 } 119 119 120 - /* Rules & Requirements */ 121 - .fd-sip-doc .rules-grid { 137 + /* Connector Arrows */ 138 + .fd-sip-diag .flow-connector { 139 + text-align: center; 140 + position: relative; 141 + } 142 + .fd-sip-diag .arrow-line { 143 + height: 3px; 144 + background: var(--fd-blue); 145 + position: relative; 146 + margin: 12px 0; 147 + } 148 + .fd-sip-diag .arrow-line::before, .fd-sip-diag .arrow-line::after { 149 + content: ''; 150 + position: absolute; 151 + top: -4px; 152 + width: 0; height: 0; 153 + border-style: solid; 154 + } 155 + /* Left Arrowhead */ 156 + .fd-sip-diag .arrow-line::before { 157 + left: -2px; 158 + border-width: 5px 8px 5px 0; 159 + border-color: transparent var(--fd-blue) transparent transparent; 160 + } 161 + /* Right Arrowhead */ 162 + .fd-sip-diag .arrow-line::after { 163 + right: -2px; 164 + border-width: 5px 0 5px 8px; 165 + border-color: transparent transparent transparent var(--fd-blue); 166 + } 167 + .fd-sip-diag .flow-label { 168 + font-size: 0.72rem; 169 + font-weight: 700; 170 + color: var(--fd-navy); 171 + text-transform: uppercase; 172 + letter-spacing: 0.05em; 173 + background: var(--fd-offwhite); 174 + padding: 2px 6px; 175 + border-radius: 4px; 176 + border: 1px solid var(--fd-lightgrey); 177 + } 178 + 179 + /* ---------- RULES & SPECS CARDS ---------- */ 180 + .fd-sip-diag .rules-grid { 122 122 display: grid; 123 123 grid-template-columns: 1fr 1fr; 124 124 gap: 20px; 125 125 margin-bottom: 32px; 126 126 } 127 - .fd-sip-doc .rule-box { 186 + .fd-sip-diag .rule-card { 187 + background: rgba(255, 255, 255, 0.95); 128 128 border: 1px solid var(--fd-lightgrey); 189 + border-left: 5px solid var(--fd-sky); 129 129 border-radius: 12px; 130 - padding: 20px; 131 - background: #ffffff; 132 - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.03); 191 + padding: 20px 24px; 192 + box-shadow: 0 4px 16px rgba(0, 30, 60, 0.04); 133 133 } 134 - .fd-sip-doc .rule-box h4 { 135 - margin: 0 0 12px; 136 - color: var(--fd-navy); 194 + .fd-sip-diag .rule-card.outbound { 195 + border-left-color: var(--fd-blue); 196 + } 197 + .fd-sip-diag .rule-card h4 { 198 + margin: 0 0 10px; 137 137 font-size: 1.05rem; 200 + color: var(--fd-navy); 201 + display: flex; 202 + align-items: center; 203 + gap: 8px; 138 138 } 139 - .fd-sip-d oc.rule-boxul {205 + .fd-sip-diag .rule-card ul { 140 140 margin: 0; 141 - padding-left: 20px;142 - font-size: 0. 88rem;143 - line-height: 1. 6;207 + padding-left: 18px; 208 + font-size: 0.9rem; 209 + line-height: 1.5; 144 144 } 211 + .fd-sip-diag .rule-card li { margin-bottom: 6px; } 145 145 146 - /* Troubleshooting Table */ 147 - .fd-sip-doc .tb-table { 148 - width: 100%; 149 - border-collapse: collapse; 150 - margin-bottom: 32px; 151 - font-size: 0.9rem; 213 + /* ---------- TROUBLESHOOTING / PITFALLS SECTION ---------- */ 214 + .fd-sip-diag .pitfalls-container { 215 + background: #fff8f8; 216 + border: 1px solid #fecaca; 217 + border-radius: 16px; 218 + padding: 28px; 219 + box-shadow: 0 8px 24px rgba(207, 51, 61, 0.05); 152 152 } 153 - .fd-sip-doc .tb-table th { 154 - background: var(--fd-navy); 155 - color: #ffffff; 156 - text-align: left; 157 - padding: 12px 16px; 221 + .fd-sip-diag .pitfalls-header { 222 + display: flex; 223 + align-items: center; 224 + gap: 12px; 225 + margin-bottom: 16px; 226 + } 227 + .fd-sip-diag .pitfalls-header h3 { 228 + margin: 0; 229 + color: var(--fd-red); 230 + font-size: 1.2rem; 231 + font-weight: 800; 232 + } 233 + .fd-sip-diag .pitfalls-grid { 234 + display: grid; 235 + grid-template-columns: 1fr 1fr; 236 + gap: 20px; 237 + } 238 + .fd-sip-diag .pitfall-item { 239 + background: #ffffff; 240 + border: 1px solid #fca5a5; 241 + border-radius: 10px; 242 + padding: 16px 20px; 243 + } 244 + .fd-sip-diag .pitfall-item h5 { 245 + margin: 0 0 6px; 246 + color: var(--fd-navy); 247 + font-size: 0.95rem; 158 158 font-weight: 700; 159 159 } 160 - .fd-sip-doc .tb-table th:first-child { border-top-left-radius: 8px; } 161 - .fd-sip-doc .tb-table th:last-child { border-top-right-radius: 8px; } 162 - .fd-sip-doc .tb-table td { 163 - padding: 14px 16px; 164 - border-bottom: 1px solid var(--fd-lightgrey); 165 - line-height: 1.5; 250 + .fd-sip-diag .pitfall-item p { 251 + margin: 0; 252 + font-size: 0.88rem; 253 + color: var(--fd-slate); 254 + line-height: 1.45; 166 166 } 167 - .fd-sip-doc .tb-table tr:nth-child(even) { background: var(--fd-offwhite); } 168 - .fd-sip-doc .symptom { font-weight: 700; color: var(--fd-red); width: 28%; } 169 169 170 - @media (max-width: 768px) { 171 - .fd-sip-doc .rules-grid { grid-template-columns: 1fr; } 257 + @media (max-width: 900px) { 258 + .fd-sip-diag .arch-grid { grid-template-columns: 1fr; gap: 20px; } 259 + .fd-sip-diag .flow-connector { display: none; } 260 + .fd-sip-diag .rules-grid, .fd-sip-diag .pitfalls-grid { grid-template-columns: 1fr; } 172 172 } 173 173 </style> 174 174 175 -<div class="fd-sip-d oc">264 +<div class="fd-sip-diag"> 176 176 177 - <!-- Header --> 178 - <div class="d oc-header">179 - <p class="kicker">FirstDigital VoiceOperations</p>180 - <h1>SIP Trunking Technical Specifications</h1>181 - <p class="sub"> Configurationstandards,firewallpolicies, andtroubleshooting proceduresforenterpriseSIP trunks.</p>266 + <!-- Header Banner --> 267 + <div class="diag-header"> 268 + <p class="kicker">FirstDigital Technical Architecture</p> 269 + <h1>SIP Trunking Architecture & Traffic Flow</h1> 270 + <p class="sub">Reference guide for signaling (UDP 5060), media routing (RTP), and required customer firewall policies.</p> 182 182 </div> 183 183 184 - <!-- Disclaimer --> 185 - <div class="disclaimer-box"> 186 - <strong>Customer Responsibility Notice:</strong> Customers are responsible for the configuration and fine-tuning of their own edge routers, firewalls, and PBX equipment. 187 - </div> 273 + <!-- Architecture Flow Diagram --> 274 + <div class="arch-grid"> 275 + 276 + <!-- FirstDigital SBC --> 277 + <div class="node-box fd-cloud"> 278 + <span class="node-badge">FirstDigital Cloud</span> 279 + <h3>Cloud SBC</h3> 280 + <span class="ip-addr">FirstDigital SBC IP</span> 281 + <p class="desc">Central Session Border Controller managing inbound/outbound signaling & media.</p> 282 + </div> 188 188 189 - <!-- Standard Specifications Grid --> 190 - <div class="section-title">Standard Trunk Specifications</div> 191 - <div class="specs-grid"> 192 - <div class="spec-card"> 193 - <div class="label">Signaling Protocol</div> 194 - <div class="val">UDP 5060</div> 195 - <div class="subtext">Standard SIP port</div> 284 + <!-- Flow Connector 1 --> 285 + <div class="flow-connector"> 286 + <span class="flow-label">WAN SIP / RTP</span> 287 + <div class="arrow-line"></div> 288 + <span class="flow-label">UDP 5060</span> 196 196 </div> 197 - <div class="spec-card"> 198 - <div class="label">Primary Codec</div> 199 - <div class="val">G.711u</div> 200 - <div class="subtext">20ms packetization</div> 290 + 291 + <!-- Customer Firewall --> 292 + <div class="node-box firewall"> 293 + <span class="node-badge">Boundary</span> 294 + <h3>Customer Firewall</h3> 295 + <span class="ip-addr">Public IP (Provided)</span> 296 + <p class="desc">Network perimeter executing NAT and inspecting incoming/outgoing UDP 5060 & RTP streams.</p> 201 201 </div> 202 - <div class="spec-card"> 203 - <div class="label">DTMF Mode</div> 204 - <div class="val">RFC 2833</div> 205 - <div class="subtext">Out-of-band touch tones</div> 298 + 299 + <!-- Flow Connector 2 --> 300 + <div class="flow-connector"> 301 + <span class="flow-label">LAN Routing</span> 302 + <div class="arrow-line"></div> 303 + <span class="flow-label">Private Net</span> 206 206 </div> 207 - <div class="spec-card"> 208 - <div class="label">DNIS Digits</div> 209 - <div class="val">10 Digits</div> 210 - <div class="subtext">+1 stripped; Intl disabled by default</div> 305 + 306 + <!-- Customer PBX --> 307 + <div class="node-box cust-pbx"> 308 + <span class="node-badge">Customer Premises</span> 309 + <h3>Customer PBX</h3> 310 + <span class="ip-addr">192.168.x.x (Private)</span> 311 + <p class="desc">Internal phone system handling extensions, call logic, and audio endpoints.</p> 211 211 </div> 212 - <div class="spec-card"> 213 - <div class="label">Authentication</div> 214 - <div class="val">IP Registration-less</div> 215 - <div class="subtext">No user/password required</div> 216 - </div> 217 - <div class="spec-card"> 218 - <div class="label">SIP Advanced</div> 219 - <div class="val">Peer Path / Re-invite</div> 220 - <div class="subtext">Disabled / No re-invites permitted</div> 221 - </div> 313 + 222 222 </div> 223 223 224 - <!-- Rules & Firewall --> 225 - <div class="section-title">Network & Firewall Rules</div> 316 + <!-- Inbound & Outbound Traffic Rules --> 226 226 <div class="rules-grid"> 227 - <div class="rule-box"> 228 - <h4>Outbound Signaling & Caller ID</h4> 318 + 319 + <div class="rule-card"> 320 + <h4> 321 + <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#38b2e3" stroke-width="2.5"><path d="M12 5v14M5 12l7 7 7-7"/></svg> 322 + Inbound Call Rules (FirstDigital → Customer) 323 + </h4> 229 229 <ul> 230 - <li> Outbound requests toFirstDigitalmustsourcedirectlyfromtheCustomerPublic IP providedduringturn-up.</li>231 - <li> Outboundcallsmustpresenta CallerIDnumberassigned tothe specifictrunkinstance.</li>232 - <li> EnsureoutboundNAT egressmatchesthe registered public IP address.</li>325 + <li>FirstDigital SBC directs calls toward the <strong>Public IP</strong> provided by the customer.</li> 326 + <li>The customer's firewall must <strong>permit inbound UDP 5060</strong> sourced strictly from FirstDigital's SBC IP.</li> 327 + <li>Dynamic RTP audio port ranges must be allowed through the firewall once the SIP handshake completes.</li> 233 233 </ul> 234 234 </div> 235 - <div class="rule-box"> 236 - <h4>Firewall & Perimeter Setup</h4> 330 + 331 + <div class="rule-card outbound"> 332 + <h4> 333 + <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#307ab2" stroke-width="2.5"><path d="M12 19V5M5 12l7-7 7 7"/></svg> 334 + Outbound Call Rules (Customer → FirstDigital) 335 + </h4> 237 237 <ul> 238 - <li> <strong>SIPALG:</strong>Mustbe<u>DISABLED</u>globally oncustomer routers/firewalls.</li>239 - <li> <strong>InboundRules:</strong>Allowtrafficfrom FirstDigital'sSBCsubnetacross<code>UDP5000 - 65000</code>.</li>240 - <li> <strong>EgressRouting:</strong>VerifyNATroutingforFirstDigital's subnetexitsoutofthe designated public IP.</li>337 + <li>All signaling and audio streams <strong>must source from the registered Public IP</strong> provided to FirstDigital.</li> 338 + <li>FirstDigital enforces strict security and will <strong>automatically reject calls</strong> sourcing from unknown or unverified IPs.</li> 339 + <li>Firewall must perform proper Source NAT (SNAT) to map outgoing PBX packets to the designated public IP.</li> 241 241 </ul> 242 242 </div> 342 + 243 243 </div> 244 244 245 - <!-- Troubleshooting Matrix --> 246 - <div class="section-title">SIP Trunk Troubleshooting Matrix</div> 247 - <table class="tb-table"> 248 - <thead> 249 - <tr> 250 - <th>Symptom</th> 251 - <th>Root Cause & Resolution Step</th> 252 - </tr> 253 - </thead> 254 - <tbody> 255 - <tr> 256 - <td class="symptom">No Inbound Calls</td> 257 - <td>Verify firewall permits <code>UDP 5060</code> from FirstDigital's subnet. Confirm <strong>SIP ALG is disabled</strong> on edge devices.</td> 258 - </tr> 259 - <tr> 260 - <td class="symptom">No Outbound Calls</td> 261 - <td>Confirm destination SIP target and port (<code>UDP 5060</code>). Verify outbound traffic sources from your designated public IP. Ensure Caller ID matches an active number on the trunk.</td> 262 - </tr> 263 - <tr> 264 - <td class="symptom">One-Way or No Audio</td> 265 - <td><strong>Common Issue:</strong> PBX is sending private IP addresses (e.g., <code>10.x.x.x</code> or <code>192.168.x.x</code>) inside the SIP SDP header. Check PBX NAT settings, SBC Media Address Override, or STUN. Disable SIP ALG.</td> 266 - </tr> 267 - <tr> 268 - <td class="symptom">DTMF Tones Not Recognized</td> 269 - <td>Configure PBX and endpoints to send DTMF out-of-band using <strong>RFC 2833</strong> (telephony-event).</td> 270 - </tr> 271 - <tr> 272 - <td class="symptom">Calls Not Ringing Correct Extension</td> 273 - <td>Inspect sent/received <strong>DNIS digit delivery</strong>. FirstDigital defaults to sending 10 digits. Adjust PBX inbound routing rules to match.</td> 274 - </tr> 275 - <tr> 276 - <td class="symptom">Forwarded Calls Have One-Way Audio</td> 277 - <td>Typically caused when FirstDigital enables "NAT Media" as a temporary workaround for private IP leaks. Resolving the PBX private IP header leak allows FirstDigital to remove NAT Media settings, restoring call transfer audio.</td> 278 - </tr> 279 - </tbody> 280 - </table> 345 + <!-- Common Troubleshooting Pitfalls --> 346 + <div class="pitfalls-container"> 347 + <div class="pitfalls-header"> 348 + <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#cf333d" stroke-width="2.5"><path d="M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0zM12 9v4M12 17h.01"/></svg> 349 + <h3>Most Common SIP & Audio Issues</h3> 350 + </div> 281 281 352 + <div class="pitfalls-grid"> 353 + 354 + <div class="pitfall-item"> 355 + <h5>1. One-Way or No Audio (Dropped RTP Packets)</h5> 356 + <p>Occurs when the customer firewall allows SIP signaling (UDP 5060) to connect the call, but blocks or drops the dynamic RTP audio stream ports. Ensure RTP port ranges are open between the SBC and PBX.</p> 357 + </div> 358 + 359 + <div class="pitfall-item"> 360 + <h5>2. Private IP Leakage in SIP SDP Headers</h5> 361 + <p>The firewall fails to rewrite the SDP payload, causing the audio stream to request packet delivery to the PBX's <em>private IP</em> (e.g. <code>10.x.x.x</code> or <code>192.168.x.x</code>) rather than its external public IP address.</p> 362 + </div> 363 + 364 + </div> 365 + </div> 366 + 282 282 </div> 283 283 {{/html}}