Wiki source code of SIP
Last modified by Aaron Blackburn on 2026/09/01 19:00
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. |
| |
1.4 | 4 | Note: All FirstDigital public IPs have been sanitized for public wiki security. |
| |
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; | ||
| |
1.4 | 17 | --fd-green: #2e7d32; |
| |
1.2 | 18 | --fd-slate: #2e404d; |
| 19 | --fd-grey: #8f9499; | ||
| 20 | --fd-lightgrey: #e2e8f0; | ||
| 21 | --fd-offwhite: #f8fafc; | ||
| 22 | --fd-max-w: 1140px; | ||
| 23 | |||
| 24 | font-family: 'Host Grotesk', system-ui, -apple-system, sans-serif; | ||
| 25 | color: var(--fd-slate); | ||
| 26 | background: #ffffff; | ||
| 27 | max-width: var(--fd-max-w); | ||
| 28 | margin: 0 auto; | ||
| 29 | padding: 24px 16px; | ||
| 30 | } | ||
| 31 | |||
| |
1.3 | 32 | /* Header */ |
| 33 | .fd-sip-doc .doc-header { | ||
| |
1.2 | 34 | 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%), |
| 35 | url('Fiber Optic Theme.JPG') center/cover no-repeat; | ||
| 36 | padding: 40px 32px; | ||
| 37 | border-radius: 20px; | ||
| 38 | text-align: center; | ||
| 39 | color: #ffffff; | ||
| 40 | box-shadow: inset 0 0 60px rgba(0, 26, 51, 0.6), 0 12px 32px rgba(0, 51, 102, 0.12); | ||
| 41 | margin-bottom: 32px; | ||
| 42 | } | ||
| |
1.3 | 43 | .fd-sip-doc .doc-header p.kicker { |
| |
1.2 | 44 | color: var(--fd-bright-cyan); |
| 45 | font-weight: 800; | ||
| 46 | font-size: .8rem; | ||
| 47 | text-transform: uppercase; | ||
| 48 | letter-spacing: .18em; | ||
| 49 | margin: 0 0 8px; | ||
| 50 | text-shadow: 0 2px 10px rgba(0, 26, 51, 0.8); | ||
| 51 | } | ||
| |
1.3 | 52 | .fd-sip-doc .doc-header h1 { |
| |
1.2 | 53 | font-weight: 800; |
| 54 | font-size: 2.25rem; | ||
| 55 | margin: 0 0 10px; | ||
| 56 | letter-spacing: -0.02em; | ||
| 57 | text-shadow: 0 3px 12px rgba(0, 26, 51, 0.9); | ||
| 58 | } | ||
| |
1.3 | 59 | .fd-sip-doc .doc-header p.sub { |
| |
1.2 | 60 | color: #f8fafc; |
| 61 | font-weight: 400; | ||
| 62 | font-size: 1rem; | ||
| 63 | max-width: 680px; | ||
| 64 | margin: 0 auto; | ||
| 65 | line-height: 1.5; | ||
| 66 | text-shadow: 0 2px 8px rgba(0, 26, 51, 0.95); | ||
| 67 | } | ||
| 68 | |||
| |
1.4 | 69 | /* Disclaimer Banner */ |
| |
1.3 | 70 | .fd-sip-doc .disclaimer-box { |
| 71 | background: #f0f7fc; | ||
| 72 | border-left: 5px solid var(--fd-blue); | ||
| 73 | padding: 16px 20px; | ||
| 74 | border-radius: 8px; | ||
| 75 | margin-bottom: 28px; | ||
| 76 | font-size: 0.9rem; | ||
| 77 | line-height: 1.5; | ||
| |
1.2 | 78 | } |
| 79 | |||
| |
1.4 | 80 | /* Section Titles */ |
| |
1.3 | 81 | .fd-sip-doc .section-title { |
| 82 | color: var(--fd-navy); | ||
| 83 | font-size: 1.35rem; | ||
| 84 | font-weight: 700; | ||
| |
1.4 | 85 | margin: 36px 0 16px; |
| |
1.3 | 86 | border-bottom: 2px solid var(--fd-lightgrey); |
| 87 | padding-bottom: 8px; | ||
| |
1.2 | 88 | } |
| 89 | |||
| |
1.4 | 90 | /* Embedded Diagram Containers */ |
| 91 | .fd-sip-doc .diagram-card { | ||
| 92 | background: #ffffff; | ||
| 93 | border: 1px solid var(--fd-lightgrey); | ||
| 94 | border-radius: 16px; | ||
| 95 | padding: 24px; | ||
| 96 | margin-bottom: 28px; | ||
| 97 | box-shadow: 0 6px 20px rgba(0, 30, 60, 0.05); | ||
| 98 | text-align: center; | ||
| 99 | } | ||
| 100 | .fd-sip-doc .diagram-card svg { | ||
| 101 | max-width: 100%; | ||
| 102 | height: auto; | ||
| 103 | } | ||
| 104 | .fd-sip-doc .diagram-caption { | ||
| 105 | font-size: 0.85rem; | ||
| 106 | color: var(--fd-slate); | ||
| 107 | margin-top: 12px; | ||
| 108 | font-weight: 500; | ||
| 109 | } | ||
| 110 | |||
| 111 | /* Specifications Grid */ | ||
| |
1.3 | 112 | .fd-sip-doc .specs-grid { |
| 113 | display: grid; | ||
| 114 | grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); | ||
| 115 | gap: 16px; | ||
| 116 | margin-bottom: 32px; | ||
| |
1.2 | 117 | } |
| |
1.3 | 118 | .fd-sip-doc .spec-card { |
| 119 | background: var(--fd-offwhite); | ||
| 120 | border: 1px solid var(--fd-lightgrey); | ||
| 121 | border-radius: 12px; | ||
| 122 | padding: 16px 20px; | ||
| |
1.2 | 123 | } |
| |
1.3 | 124 | .fd-sip-doc .spec-card .label { |
| 125 | font-size: 0.75rem; | ||
| |
1.2 | 126 | text-transform: uppercase; |
| 127 | font-weight: 700; | ||
| |
1.3 | 128 | color: var(--fd-grey); |
| 129 | letter-spacing: 0.05em; | ||
| 130 | margin-bottom: 4px; | ||
| |
1.2 | 131 | } |
| |
1.3 | 132 | .fd-sip-doc .spec-card .val { |
| 133 | font-size: 1rem; | ||
| |
1.2 | 134 | font-weight: 700; |
| |
1.3 | 135 | color: var(--fd-navy); |
| |
1.2 | 136 | } |
| |
1.3 | 137 | .fd-sip-doc .spec-card .subtext { |
| 138 | font-size: 0.8rem; | ||
| |
1.2 | 139 | color: var(--fd-slate); |
| |
1.3 | 140 | margin-top: 4px; |
| |
1.2 | 141 | } |
| 142 | |||
| |
1.4 | 143 | /* Rules Grid */ |
| |
1.3 | 144 | .fd-sip-doc .rules-grid { |
| |
1.2 | 145 | display: grid; |
| 146 | grid-template-columns: 1fr 1fr; | ||
| 147 | gap: 20px; | ||
| 148 | margin-bottom: 32px; | ||
| 149 | } | ||
| |
1.3 | 150 | .fd-sip-doc .rule-box { |
| |
1.2 | 151 | border: 1px solid var(--fd-lightgrey); |
| 152 | border-radius: 12px; | ||
| |
1.3 | 153 | padding: 20px; |
| 154 | background: #ffffff; | ||
| 155 | box-shadow: 0 4px 12px rgba(0, 0, 0, 0.03); | ||
| |
1.2 | 156 | } |
| |
1.3 | 157 | .fd-sip-doc .rule-box h4 { |
| 158 | margin: 0 0 12px; | ||
| 159 | color: var(--fd-navy); | ||
| |
1.2 | 160 | font-size: 1.05rem; |
| 161 | } | ||
| |
1.3 | 162 | .fd-sip-doc .rule-box ul { |
| |
1.2 | 163 | margin: 0; |
| |
1.3 | 164 | padding-left: 20px; |
| 165 | font-size: 0.88rem; | ||
| 166 | line-height: 1.6; | ||
| |
1.2 | 167 | } |
| 168 | |||
| |
1.3 | 169 | /* Troubleshooting Table */ |
| 170 | .fd-sip-doc .tb-table { | ||
| 171 | width: 100%; | ||
| 172 | border-collapse: collapse; | ||
| 173 | margin-bottom: 32px; | ||
| 174 | font-size: 0.9rem; | ||
| |
1.2 | 175 | } |
| |
1.3 | 176 | .fd-sip-doc .tb-table th { |
| 177 | background: var(--fd-navy); | ||
| 178 | color: #ffffff; | ||
| 179 | text-align: left; | ||
| 180 | padding: 12px 16px; | ||
| |
1.2 | 181 | font-weight: 700; |
| 182 | } | ||
| |
1.3 | 183 | .fd-sip-doc .tb-table th:first-child { border-top-left-radius: 8px; } |
| 184 | .fd-sip-doc .tb-table th:last-child { border-top-right-radius: 8px; } | ||
| 185 | .fd-sip-doc .tb-table td { | ||
| 186 | padding: 14px 16px; | ||
| 187 | border-bottom: 1px solid var(--fd-lightgrey); | ||
| 188 | line-height: 1.5; | ||
| |
1.2 | 189 | } |
| |
1.3 | 190 | .fd-sip-doc .tb-table tr:nth-child(even) { background: var(--fd-offwhite); } |
| 191 | .fd-sip-doc .symptom { font-weight: 700; color: var(--fd-red); width: 28%; } | ||
| |
1.2 | 192 | |
| |
1.3 | 193 | @media (max-width: 768px) { |
| 194 | .fd-sip-doc .rules-grid { grid-template-columns: 1fr; } | ||
| |
1.2 | 195 | } |
| 196 | </style> | ||
| 197 | |||
| |
1.3 | 198 | <div class="fd-sip-doc"> |
| |
1.2 | 199 | |
| |
1.4 | 200 | <!-- Header Banner --> |
| |
1.3 | 201 | <div class="doc-header"> |
| 202 | <p class="kicker">FirstDigital Voice Operations</p> | ||
| |
1.4 | 203 | <h1>SIP Trunking Technical Reference</h1> |
| 204 | <p class="sub">Network architecture, firewall requirements, and troubleshooting standards for customer SIP trunks.</p> | ||
| |
1.2 | 205 | </div> |
| 206 | |||
| |
1.4 | 207 | <!-- Disclaimer Notice --> |
| |
1.3 | 208 | <div class="disclaimer-box"> |
| |
1.4 | 209 | <strong>Customer Responsibility Notice:</strong> Customers are responsible for the configuration and maintenance of their own routers, firewalls, and PBX equipment. FirstDigital provides these specifications to assist engineers during trunk integration. |
| |
1.3 | 210 | </div> |
| |
1.2 | 211 | |
| |
1.4 | 212 | <!-- DIAGRAM 1: Network Topology --> |
| 213 | <div class="section-title">1. SIP Trunk Topology & Traffic Routing</div> | ||
| 214 | <div class="diagram-card"> | ||
| 215 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 300" style="font-family:'Host Grotesk', system-ui, sans-serif;"> | ||
| 216 | <!-- Cloud Node --> | ||
| 217 | <rect x="30" y="50" width="200" height="200" rx="12" fill="#f0f7fc" stroke="#307ab2" stroke-width="2"/> | ||
| 218 | <rect x="45" y="35" width="170" height="26" rx="13" fill="#003366"/> | ||
| 219 | <text x="130" y="52" fill="#ffffff" font-size="11" font-weight="bold" text-anchor="middle">FIRSTDIGITAL CLOUD</text> | ||
| 220 | <text x="130" y="115" fill="#003366" font-size="14" font-weight="bold" text-anchor="middle">FirstDigital SBC</text> | ||
| 221 | <rect x="55" y="130" width="150" height="24" rx="4" fill="#e2e8f0"/> | ||
| 222 | <text x="130" y="146" fill="#2e404d" font-size="11" font-family="monospace" text-anchor="middle">[FirstDigital_SBC_IP]</text> | ||
| 223 | <text x="130" y="180" fill="#2e404d" font-size="10" text-anchor="middle">Signaling & Audio Target</text> | ||
| 224 | |||
| 225 | <!-- Flow Connectors --> | ||
| 226 | <path d="M 230 110 L 370 110" stroke="#307ab2" stroke-width="3" stroke-dasharray="6,4"/> | ||
| 227 | <path d="M 370 160 L 230 160" stroke="#38b2e3" stroke-width="3"/> | ||
| 228 | <polygon points="230,160 238,155 238,165" fill="#38b2e3"/> | ||
| 229 | <polygon points="370,110 362,105 362,115" fill="#307ab2"/> | ||
| 230 | <text x="300" y="100" fill="#003366" font-size="10" font-weight="bold" text-anchor="middle">UDP 5060 (SIP)</text> | ||
| 231 | <text x="300" y="180" fill="#003366" font-size="10" font-weight="bold" text-anchor="middle">UDP 5k-65k (RTP)</text> | ||
| 232 | |||
| 233 | <!-- Firewall Node --> | ||
| 234 | <rect x="370" y="50" width="180" height="200" rx="12" fill="#fff5f5" stroke="#cf333d" stroke-width="2"/> | ||
| 235 | <rect x="385" y="35" width="150" height="26" rx="13" fill="#cf333d"/> | ||
| 236 | <text x="460" y="52" fill="#ffffff" font-size="11" font-weight="bold" text-anchor="middle">CUSTOMER FIREWALL</text> | ||
| 237 | <text x="460" y="105" fill="#003366" font-size="13" font-weight="bold" text-anchor="middle">Public Edge Router</text> | ||
| 238 | <rect x="385" y="120" width="150" height="24" rx="4" fill="#e2e8f0"/> | ||
| 239 | <text x="460" y="136" fill="#2e404d" font-size="11" font-family="monospace" text-anchor="middle">[Customer_Public_IP]</text> | ||
| 240 | <text x="460" y="175" fill="#cf333d" font-size="10" font-weight="bold" text-anchor="middle">SIP ALG: DISABLED</text> | ||
| 241 | <text x="460" y="195" fill="#2e404d" font-size="10" text-anchor="middle">Source NAT Active</text> | ||
| 242 | |||
| 243 | <!-- Internal LAN Path --> | ||
| 244 | <path d="M 550 135 L 610 135" stroke="#2e404d" stroke-width="2"/> | ||
| 245 | |||
| 246 | <!-- PBX Node --> | ||
| 247 | <rect x="610" y="50" width="160" height="200" rx="12" fill="#f8fafc" stroke="#003366" stroke-width="2"/> | ||
| 248 | <rect x="625" y="35" width="130" height="26" rx="13" fill="#003366"/> | ||
| 249 | <text x="690" y="52" fill="#ffffff" font-size="11" font-weight="bold" text-anchor="middle">CUSTOMER PBX</text> | ||
| 250 | <text x="690" y="115" fill="#003366" font-size="13" font-weight="bold" text-anchor="middle">Internal PBX / SBC</text> | ||
| 251 | <rect x="625" y="130" width="130" height="24" rx="4" fill="#e2e8f0"/> | ||
| 252 | <text x="690" y="146" fill="#2e404d" font-size="11" font-family="monospace" text-anchor="middle">192.168.x.x (LAN)</text> | ||
| 253 | </svg> | ||
| 254 | <div class="diagram-caption">Figure 1: Standard end-to-end SIP signaling and RTP media pathing via customer firewall.</div> | ||
| 255 | </div> | ||
| 256 | |||
| 257 | <!-- Specifications Grid --> | ||
| 258 | <div class="section-title">2. Core Trunk Parameters</div> | ||
| |
1.3 | 259 | <div class="specs-grid"> |
| 260 | <div class="spec-card"> | ||
| 261 | <div class="label">Signaling Protocol</div> | ||
| 262 | <div class="val">UDP 5060</div> | ||
| 263 | <div class="subtext">Standard SIP port</div> | ||
| |
1.2 | 264 | </div> |
| |
1.3 | 265 | <div class="spec-card"> |
| 266 | <div class="label">Primary Codec</div> | ||
| 267 | <div class="val">G.711u</div> | ||
| 268 | <div class="subtext">20ms packetization</div> | ||
| |
1.2 | 269 | </div> |
| |
1.3 | 270 | <div class="spec-card"> |
| 271 | <div class="label">DTMF Mode</div> | ||
| 272 | <div class="val">RFC 2833</div> | ||
| 273 | <div class="subtext">Out-of-band touch tones</div> | ||
| |
1.2 | 274 | </div> |
| |
1.3 | 275 | <div class="spec-card"> |
| |
1.4 | 276 | <div class="label">DNIS Delivery</div> |
| |
1.3 | 277 | <div class="val">10 Digits</div> |
| 278 | <div class="subtext">+1 stripped; Intl disabled by default</div> | ||
| |
1.2 | 279 | </div> |
| |
1.3 | 280 | <div class="spec-card"> |
| 281 | <div class="label">Authentication</div> | ||
| 282 | <div class="val">IP Registration-less</div> | ||
| 283 | <div class="subtext">No user/password required</div> | ||
| 284 | </div> | ||
| 285 | <div class="spec-card"> | ||
| 286 | <div class="label">SIP Advanced</div> | ||
| 287 | <div class="val">Peer Path / Re-invite</div> | ||
| 288 | <div class="subtext">Disabled / No re-invites permitted</div> | ||
| 289 | </div> | ||
| |
1.2 | 290 | </div> |
| 291 | |||
| |
1.4 | 292 | <!-- DIAGRAM 2: REWORKED FIREWALL PACKET FILTER & PORT MAP ILLUSTRATION --> |
| 293 | <div class="section-title">3. Firewall Policy Rules & Packet Filter Action</div> | ||
| 294 | <div class="diagram-card"> | ||
| 295 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 290" style="font-family:'Host Grotesk', system-ui, sans-serif;"> | ||
| 296 | <!-- Outer Frame --> | ||
| 297 | <rect x="10" y="10" width="780" height="270" rx="12" fill="#f8fafc" stroke="#e2e8f0" stroke-width="2"/> | ||
| 298 | |||
| 299 | <!-- FirstDigital WAN Side --> | ||
| 300 | <text x="110" y="40" fill="#003366" font-size="12" font-weight="bold" text-anchor="middle">WAN SOURCE</text> | ||
| 301 | <text x="110" y="58" fill="#2e404d" font-size="11" font-family="monospace" text-anchor="middle">[FirstDigital_Subnet]</text> | ||
| 302 | |||
| 303 | <!-- Firewall Barrier (Middle) --> | ||
| 304 | <rect x="360" y="30" width="80" height="230" rx="8" fill="#fff5f5" stroke="#cf333d" stroke-width="2"/> | ||
| 305 | <text x="400" y="135" fill="#cf333d" font-size="12" font-weight="bold" text-anchor="middle" transform="rotate(-90,400,135)">FIREWALL BOUNDARY</text> | ||
| 306 | |||
| 307 | <!-- Customer LAN Side --> | ||
| 308 | <text x="690" y="40" fill="#003366" font-size="12" font-weight="bold" text-anchor="middle">LAN DESTINATION</text> | ||
| 309 | <text x="690" y="58" fill="#2e404d" font-size="11" font-family="monospace" text-anchor="middle">[Customer_PBX_IP]</text> | ||
| 310 | |||
| 311 | <!-- ROW 1: SIP SIGNALING (PASS) --> | ||
| 312 | <path d="M 200 90 L 360 90" stroke="#2e7d32" stroke-width="2.5"/> | ||
| 313 | <circle cx="380" cy="90" r="10" fill="#2e7d32"/> | ||
| 314 | <text x="380" y="94" fill="#ffffff" font-size="11" font-weight="bold" text-anchor="middle">✓</text> | ||
| 315 | <path d="M 400 90 L 580 90" stroke="#2e7d32" stroke-width="2.5"/> | ||
| 316 | <polygon points="580,90 572,85 572,95" fill="#2e7d32"/> | ||
| 317 | |||
| 318 | <rect x="220" y="72" width="120" height="22" rx="4" fill="#e8f5e9" stroke="#2e7d32"/> | ||
| 319 | <text x="280" y="87" fill="#2e7d32" font-size="10" font-weight="bold" text-anchor="middle">SIP: UDP 5060</text> | ||
| 320 | <text x="480" y="82" fill="#2e7d32" font-size="10" font-weight="bold" text-anchor="middle">FORWARD TO PBX</text> | ||
| 321 | |||
| 322 | <!-- ROW 2: RTP AUDIO STREAM (PASS) --> | ||
| 323 | <path d="M 200 150 L 360 150" stroke="#307ab2" stroke-width="2.5"/> | ||
| 324 | <circle cx="380" cy="150" r="10" fill="#2e7d32"/> | ||
| 325 | <text x="380" y="154" fill="#ffffff" font-size="11" font-weight="bold" text-anchor="middle">✓</text> | ||
| 326 | <path d="M 400 150 L 580 150" stroke="#307ab2" stroke-width="2.5"/> | ||
| 327 | <polygon points="580,150 572,145 572,155" fill="#307ab2"/> | ||
| 328 | |||
| 329 | <rect x="210" y="132" width="140" height="22" rx="4" fill="#f0f7fc" stroke="#307ab2"/> | ||
| 330 | <text x="280" y="147" fill="#003366" font-size="10" font-weight="bold" text-anchor="middle">RTP: UDP 5k - 65k</text> | ||
| 331 | <text x="480" y="142" fill="#003366" font-size="10" font-weight="bold" text-anchor="middle">ALLOW MEDIA STREAM</text> | ||
| 332 | |||
| 333 | <!-- ROW 3: SIP ALG / INSPECTION (BLOCKED) --> | ||
| 334 | <path d="M 200 215 L 360 215" stroke="#cf333d" stroke-width="2.5" stroke-dasharray="4,4"/> | ||
| 335 | <circle cx="380" cy="215" r="10" fill="#cf333d"/> | ||
| 336 | <text x="380" y="219" fill="#ffffff" font-size="11" font-weight="bold" text-anchor="middle">✕</text> | ||
| 337 | |||
| 338 | <rect x="220" y="197" width="120" height="22" rx="4" fill="#fff5f5" stroke="#cf333d"/> | ||
| 339 | <text x="280" y="212" fill="#cf333d" font-size="10" font-weight="bold" text-anchor="middle">SIP ALG / STUN</text> | ||
| 340 | <text x="485" y="212" fill="#cf333d" font-size="11" font-weight="bold">DISABLED (Prevents Header Modification)</text> | ||
| 341 | |||
| 342 | <!-- Bottom Note --> | ||
| 343 | <rect x="180" y="250" width="440" height="20" rx="4" fill="#e2e8f0"/> | ||
| 344 | <text x="400" y="264" fill="#2e404d" font-size="10" font-weight="bold" text-anchor="middle">OUTBOUND EGRESS NAT: All traffic MUST egress sourcing from [Customer_Public_IP]</text> | ||
| 345 | </svg> | ||
| 346 | <div class="diagram-caption">Figure 2: Firewall packet-filtering policy—explicitly allowing signaling/media while disabling SIP ALG.</div> | ||
| 347 | </div> | ||
| 348 | |||
| 349 | <!-- Rules Text --> | ||
| |
1.2 | 350 | <div class="rules-grid"> |
| |
1.3 | 351 | <div class="rule-box"> |
| |
1.4 | 352 | <h4>Outbound Traffic Requirements</h4> |
| |
1.2 | 353 | <ul> |
| |
1.4 | 354 | <li>Outbound calls to FirstDigital must source directly from the registered Customer Public IP.</li> |
| 355 | <li>Outbound calls must send Caller ID matching a phone number assigned to the trunk instance.</li> | ||
| 356 | <li>FirstDigital will automatically reject calls sourcing from unknown or unauthorized IPs.</li> | ||
| |
1.2 | 357 | </ul> |
| 358 | </div> | ||
| |
1.3 | 359 | <div class="rule-box"> |
| |
1.4 | 360 | <h4>Firewall & NAT Settings</h4> |
| |
1.2 | 361 | <ul> |
| |
1.4 | 362 | <li><strong>SIP ALG:</strong> Must be completely <u>DISABLED</u> on customer edge firewalls and routers.</li> |
| 363 | <li><strong>RTP Media:</strong> Ensure UDP ports 5000-65000 are permitted for full audio stream delivery.</li> | ||
| 364 | <li><strong>NAT Routing:</strong> Confirm outbound NAT egress explicitly maps internal PBX traffic to the registered public IP.</li> | ||
| |
1.2 | 365 | </ul> |
| 366 | </div> | ||
| 367 | </div> | ||
| 368 | |||
| |
1.4 | 369 | <!-- DIAGRAM 3: One-Way Audio Problem --> |
| 370 | <div class="section-title">4. Common Audio Defect: Private IP Header Leakage</div> | ||
| 371 | <div class="diagram-card"> | ||
| 372 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 240" style="font-family:'Host Grotesk', system-ui, sans-serif;"> | ||
| 373 | <!-- SBC Box --> | ||
| 374 | <rect x="40" y="40" width="180" height="160" rx="10" fill="#f0f7fc" stroke="#307ab2" stroke-width="2"/> | ||
| 375 | <text x="130" y="80" fill="#003366" font-size="13" font-weight="bold" text-anchor="middle">FirstDigital SBC</text> | ||
| 376 | <text x="130" y="100" fill="#2e404d" font-size="10" text-anchor="middle">Public Media Gateway</text> | ||
| 377 | |||
| 378 | <!-- Broken Return Audio Path --> | ||
| 379 | <path d="M 220 160 L 410 160" stroke="#cf333d" stroke-width="3" stroke-dasharray="4,4"/> | ||
| 380 | <circle cx="420" cy="160" r="12" fill="#cf333d"/> | ||
| 381 | <text x="420" y="165" fill="#ffffff" font-size="13" font-weight="bold" text-anchor="middle">X</text> | ||
| 382 | <text x="315" y="150" fill="#cf333d" font-size="10" font-weight="bold" text-anchor="middle">Audio Fails: 192.168.x.x Unreachable</text> | ||
| 383 | |||
| 384 | <!-- Firewall Box --> | ||
| 385 | <rect x="450" y="40" width="120" height="160" rx="10" fill="#fff5f5" stroke="#cf333d" stroke-width="2"/> | ||
| 386 | <text x="510" y="120" fill="#cf333d" font-size="12" font-weight="bold" text-anchor="middle">Firewall</text> | ||
| 387 | |||
| 388 | <!-- PBX Box --> | ||
| 389 | <rect x="620" y="40" width="140" height="160" rx="10" fill="#f8fafc" stroke="#003366" stroke-width="2"/> | ||
| 390 | <text x="690" y="75" fill="#003366" font-size="13" font-weight="bold" text-anchor="middle">Customer PBX</text> | ||
| 391 | |||
| 392 | <!-- Problem Header Packet --> | ||
| 393 | <path d="M 620 85 L 230 85" stroke="#307ab2" stroke-width="2"/> | ||
| 394 | <rect x="310" y="60" width="240" height="24" rx="4" fill="#fffbe0" stroke="#d97706"/> | ||
| 395 | <text x="430" y="76" fill="#b45309" font-size="10" font-weight="bold" text-anchor="middle">SDP Header: Audio IP = 192.168.1.50 (Private IP Leak!)</text> | ||
| 396 | </svg> | ||
| 397 | <div class="diagram-caption">Figure 3: Why one-way audio occurs—the PBX requests return audio to an unreachable internal private IP address.</div> | ||
| 398 | </div> | ||
| 399 | |||
| |
1.3 | 400 | <!-- Troubleshooting Matrix --> |
| |
1.4 | 401 | <div class="section-title">5. Troubleshooting Matrix</div> |
| |
1.3 | 402 | <table class="tb-table"> |
| 403 | <thead> | ||
| 404 | <tr> | ||
| 405 | <th>Symptom</th> | ||
| 406 | <th>Root Cause & Resolution Step</th> | ||
| 407 | </tr> | ||
| 408 | </thead> | ||
| 409 | <tbody> | ||
| 410 | <tr> | ||
| 411 | <td class="symptom">No Inbound Calls</td> | ||
| |
1.4 | 412 | <td>Verify firewall allows <code>UDP 5060</code> from FirstDigital's subnet. Confirm <strong>SIP ALG is disabled</strong> on edge devices.</td> |
| |
1.3 | 413 | </tr> |
| 414 | <tr> | ||
| 415 | <td class="symptom">No Outbound Calls</td> | ||
| |
1.4 | 416 | <td>Confirm outbound SIP traffic is directed to FirstDigital's SBC IP on <code>UDP 5060</code>. Verify traffic sources from your registered Public IP and uses an assigned Caller ID.</td> |
| |
1.3 | 417 | </tr> |
| 418 | <tr> | ||
| 419 | <td class="symptom">One-Way or No Audio</td> | ||
| |
1.4 | 420 | <td><strong>Common Issue:</strong> PBX is leaking private IP addresses (e.g., <code>10.x.x.x</code> or <code>192.168.x.x</code>) in the SIP SDP header. Fix PBX NAT settings, SBC Media Address Override, or STUN configuration. Disable SIP ALG.</td> |
| |
1.3 | 421 | </tr> |
| 422 | <tr> | ||
| |
1.4 | 423 | <td class="symptom">Touch Tones Not Working</td> |
| |
1.3 | 424 | <td>Configure PBX and endpoints to send DTMF out-of-band using <strong>RFC 2833</strong> (telephony-event).</td> |
| 425 | </tr> | ||
| 426 | <tr> | ||
| |
1.4 | 427 | <td class="symptom">Calls Routing Incorrectly</td> |
| 428 | <td>Inspect received <strong>DNIS digit delivery</strong>. FirstDigital defaults to 10-digit delivery. Update PBX inbound routing rules to match.</td> | ||
| |
1.3 | 429 | </tr> |
| 430 | <tr> | ||
| 431 | <td class="symptom">Forwarded Calls Have One-Way Audio</td> | ||
| |
1.4 | 432 | <td>Occurs if FirstDigital enabled "NAT Media" as a temporary workaround for private IP header leaks. Resolving the PBX private IP leak allows FirstDigital to disable NAT Media settings, resolving transfer audio.</td> |
| |
1.3 | 433 | </tr> |
| 434 | </tbody> | ||
| 435 | </table> | ||
| |
1.2 | 436 | |
| 437 | </div> | ||
| 438 | {{/html}} |