Wiki source code of SIP
Version 1.3 by Aaron Blackburn on 2026/09/01 18:33
Hide last authors
| author | version | line-number | content |
|---|---|---|---|
| |
1.2 | 1 | {{html clean="false"}} |
| 2 | <!-- | ||
| |
1.3 | 3 | XWiki usage: Paste into an HTML macro on your page. |
| 4 | Note: All FirstDigital IPs have been sanitized for public safety. | ||
| |
1.2 | 5 | --> |
| 6 | <style> | ||
| 7 | @import url('https://fonts.googleapis.com/css2?family=Host+Grotesk:wght@300;400;500;600;700;800&display=swap'); | ||
| 8 | |||
| |
1.3 | 9 | .fd-sip-doc, .fd-sip-doc * { box-sizing: border-box; } |
| 10 | .fd-sip-doc { | ||
| |
1.2 | 11 | --fd-navy: #003366; |
| 12 | --fd-dark-navy: #001a33; | ||
| 13 | --fd-blue: #307ab2; | ||
| 14 | --fd-sky: #38b2e3; | ||
| 15 | --fd-bright-cyan: #5ed2ff; | ||
| 16 | --fd-red: #cf333d; | ||
| 17 | --fd-slate: #2e404d; | ||
| 18 | --fd-grey: #8f9499; | ||
| 19 | --fd-lightgrey: #e2e8f0; | ||
| 20 | --fd-offwhite: #f8fafc; | ||
| 21 | --fd-max-w: 1140px; | ||
| 22 | |||
| 23 | font-family: 'Host Grotesk', system-ui, -apple-system, sans-serif; | ||
| 24 | color: var(--fd-slate); | ||
| 25 | background: #ffffff; | ||
| 26 | max-width: var(--fd-max-w); | ||
| 27 | margin: 0 auto; | ||
| 28 | padding: 24px 16px; | ||
| 29 | } | ||
| 30 | |||
| |
1.3 | 31 | /* Header */ |
| 32 | .fd-sip-doc .doc-header { | ||
| |
1.2 | 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 | url('Fiber Optic Theme.JPG') center/cover no-repeat; | ||
| 35 | padding: 40px 32px; | ||
| 36 | border-radius: 20px; | ||
| 37 | text-align: center; | ||
| 38 | color: #ffffff; | ||
| 39 | box-shadow: inset 0 0 60px rgba(0, 26, 51, 0.6), 0 12px 32px rgba(0, 51, 102, 0.12); | ||
| 40 | margin-bottom: 32px; | ||
| 41 | } | ||
| |
1.3 | 42 | .fd-sip-doc .doc-header p.kicker { |
| |
1.2 | 43 | color: var(--fd-bright-cyan); |
| 44 | font-weight: 800; | ||
| 45 | font-size: .8rem; | ||
| 46 | text-transform: uppercase; | ||
| 47 | letter-spacing: .18em; | ||
| 48 | margin: 0 0 8px; | ||
| 49 | text-shadow: 0 2px 10px rgba(0, 26, 51, 0.8); | ||
| 50 | } | ||
| |
1.3 | 51 | .fd-sip-doc .doc-header h1 { |
| |
1.2 | 52 | font-weight: 800; |
| 53 | font-size: 2.25rem; | ||
| 54 | margin: 0 0 10px; | ||
| 55 | letter-spacing: -0.02em; | ||
| 56 | text-shadow: 0 3px 12px rgba(0, 26, 51, 0.9); | ||
| 57 | } | ||
| |
1.3 | 58 | .fd-sip-doc .doc-header p.sub { |
| |
1.2 | 59 | color: #f8fafc; |
| 60 | font-weight: 400; | ||
| 61 | font-size: 1rem; | ||
| 62 | max-width: 680px; | ||
| 63 | margin: 0 auto; | ||
| 64 | line-height: 1.5; | ||
| 65 | text-shadow: 0 2px 8px rgba(0, 26, 51, 0.95); | ||
| 66 | } | ||
| 67 | |||
| |
1.3 | 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; | ||
| |
1.2 | 77 | } |
| 78 | |||
| |
1.3 | 79 | /* Specifications Grid */ |
| 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 | border-bottom: 2px solid var(--fd-lightgrey); | ||
| 86 | padding-bottom: 8px; | ||
| |
1.2 | 87 | } |
| 88 | |||
| |
1.3 | 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; | ||
| |
1.2 | 94 | } |
| |
1.3 | 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; | ||
| |
1.2 | 100 | } |
| |
1.3 | 101 | .fd-sip-doc .spec-card .label { |
| 102 | font-size: 0.75rem; | ||
| |
1.2 | 103 | text-transform: uppercase; |
| 104 | font-weight: 700; | ||
| |
1.3 | 105 | color: var(--fd-grey); |
| 106 | letter-spacing: 0.05em; | ||
| 107 | margin-bottom: 4px; | ||
| |
1.2 | 108 | } |
| |
1.3 | 109 | .fd-sip-doc .spec-card .val { |
| 110 | font-size: 1rem; | ||
| |
1.2 | 111 | font-weight: 700; |
| |
1.3 | 112 | color: var(--fd-navy); |
| |
1.2 | 113 | } |
| |
1.3 | 114 | .fd-sip-doc .spec-card .subtext { |
| 115 | font-size: 0.8rem; | ||
| |
1.2 | 116 | color: var(--fd-slate); |
| |
1.3 | 117 | margin-top: 4px; |
| |
1.2 | 118 | } |
| 119 | |||
| |
1.3 | 120 | /* Rules & Requirements */ |
| 121 | .fd-sip-doc .rules-grid { | ||
| |
1.2 | 122 | display: grid; |
| 123 | grid-template-columns: 1fr 1fr; | ||
| 124 | gap: 20px; | ||
| 125 | margin-bottom: 32px; | ||
| 126 | } | ||
| |
1.3 | 127 | .fd-sip-doc .rule-box { |
| |
1.2 | 128 | border: 1px solid var(--fd-lightgrey); |
| 129 | border-radius: 12px; | ||
| |
1.3 | 130 | padding: 20px; |
| 131 | background: #ffffff; | ||
| 132 | box-shadow: 0 4px 12px rgba(0, 0, 0, 0.03); | ||
| |
1.2 | 133 | } |
| |
1.3 | 134 | .fd-sip-doc .rule-box h4 { |
| 135 | margin: 0 0 12px; | ||
| 136 | color: var(--fd-navy); | ||
| |
1.2 | 137 | font-size: 1.05rem; |
| 138 | } | ||
| |
1.3 | 139 | .fd-sip-doc .rule-box ul { |
| |
1.2 | 140 | margin: 0; |
| |
1.3 | 141 | padding-left: 20px; |
| 142 | font-size: 0.88rem; | ||
| 143 | line-height: 1.6; | ||
| |
1.2 | 144 | } |
| 145 | |||
| |
1.3 | 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; | ||
| |
1.2 | 152 | } |
| |
1.3 | 153 | .fd-sip-doc .tb-table th { |
| 154 | background: var(--fd-navy); | ||
| 155 | color: #ffffff; | ||
| 156 | text-align: left; | ||
| 157 | padding: 12px 16px; | ||
| |
1.2 | 158 | font-weight: 700; |
| 159 | } | ||
| |
1.3 | 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; | ||
| |
1.2 | 166 | } |
| |
1.3 | 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%; } | ||
| |
1.2 | 169 | |
| |
1.3 | 170 | @media (max-width: 768px) { |
| 171 | .fd-sip-doc .rules-grid { grid-template-columns: 1fr; } | ||
| |
1.2 | 172 | } |
| 173 | </style> | ||
| 174 | |||
| |
1.3 | 175 | <div class="fd-sip-doc"> |
| |
1.2 | 176 | |
| |
1.3 | 177 | <!-- Header --> |
| 178 | <div class="doc-header"> | ||
| 179 | <p class="kicker">FirstDigital Voice Operations</p> | ||
| 180 | <h1>SIP Trunking Technical Specifications</h1> | ||
| 181 | <p class="sub">Configuration standards, firewall policies, and troubleshooting procedures for enterprise SIP trunks.</p> | ||
| |
1.2 | 182 | </div> |
| 183 | |||
| |
1.3 | 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> | ||
| |
1.2 | 188 | |
| |
1.3 | 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> | ||
| |
1.2 | 196 | </div> |
| |
1.3 | 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> | ||
| |
1.2 | 201 | </div> |
| |
1.3 | 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> | ||
| |
1.2 | 206 | </div> |
| |
1.3 | 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> | ||
| |
1.2 | 211 | </div> |
| |
1.3 | 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> | ||
| |
1.2 | 222 | </div> |
| 223 | |||
| |
1.3 | 224 | <!-- Rules & Firewall --> |
| 225 | <div class="section-title">Network & Firewall Rules</div> | ||
| |
1.2 | 226 | <div class="rules-grid"> |
| |
1.3 | 227 | <div class="rule-box"> |
| 228 | <h4>Outbound Signaling & Caller ID</h4> | ||
| |
1.2 | 229 | <ul> |
| |
1.3 | 230 | <li>Outbound requests to FirstDigital must source directly from the Customer Public IP provided during turn-up.</li> |
| 231 | <li>Outbound calls must present a Caller ID number assigned to the specific trunk instance.</li> | ||
| 232 | <li>Ensure outbound NAT egress matches the registered public IP address.</li> | ||
| |
1.2 | 233 | </ul> |
| 234 | </div> | ||
| |
1.3 | 235 | <div class="rule-box"> |
| 236 | <h4>Firewall & Perimeter Setup</h4> | ||
| |
1.2 | 237 | <ul> |
| |
1.3 | 238 | <li><strong>SIP ALG:</strong> Must be <u>DISABLED</u> globally on customer routers/firewalls.</li> |
| 239 | <li><strong>Inbound Rules:</strong> Allow traffic from FirstDigital's SBC subnet across <code>UDP 5000 - 65000</code>.</li> | ||
| 240 | <li><strong>Egress Routing:</strong> Verify NAT routing for FirstDigital's subnet exits out of the designated public IP.</li> | ||
| |
1.2 | 241 | </ul> |
| 242 | </div> | ||
| 243 | </div> | ||
| 244 | |||
| |
1.3 | 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> | ||
| |
1.2 | 281 | |
| 282 | </div> | ||
| 283 | {{/html}} |