Files
node-sbc/README.md
2025-10-09 16:37:27 +02:00

5.7 KiB

NexusVoice SBC - Drachtio Migration

This directory contains the Drachtio-based implementation of the NexusVoice SIP Border Controller, migrated from the original Kamailio configuration.

Overview

The Drachtio implementation provides equivalent functionality to the Kamailio SBC configuration:

  • SIP Proxy and Registrar: User registration and location management
  • Security Features: User-Agent filtering, SIP validation, request sanitization
  • Call Routing: Local user lookup, special number routing, external trunk integration
  • Media Handling: RTP proxy integration for media relay
  • Logging: Comprehensive SIP traffic logging

Directory Structure

drachtio-migration/
├── config/
│   └── default.json              # Main configuration file
├── middleware/
│   ├── validation.js            # Request validation middleware
│   ├── userAgentFilter.js       # User-Agent filtering middleware
│   └── requestProcessor.js      # Main request processing pipeline
├── routes/
│   ├── registration.js          # SIP REGISTER handling
│   ├── invite.js               # SIP INVITE handling
│   └── indialog.js             # In-dialog request handling
├── utils/
│   └── logger.js               # Logging utility
├── server.js                   # Main server application
├── package.json               # Node.js dependencies
└── README.md                  # This file

Installation and Setup

Prerequisites

  • Node.js 14.0 or higher
  • Drachtio server installed and running
  • RTP proxy server (optional, for media handling)

Installation

  1. Navigate to the migration directory:
cd drachtio-migration
  1. Install dependencies:
npm install
  1. Configure your settings in config/default.json:
    • SIP listening parameters
    • RTP proxy configuration
    • Asterisk server addresses
    • Security settings

Configuration

Key configuration sections:

{
  "sip": {
    "host": "0.0.0.0",
    "port": 5060,
    "transport": "udp"
  },
  "rtpProxy": {
    "enabled": true,
    "host": "rtpproxy",
    "port": 7722
  },
  "security": {
    "enableUAFilter": true,
    "blockedUserAgents": [...],
    "allowedUserAgents": [...]
  }
}

Running the Server

Development mode:

npm run dev

Production mode:

npm start

Migration Mapping

Kamailio to Drachtio Equivalents

Kamailio Component Drachtio Implementation
request_route RequestProcessor.middleware()
route[REQINIT] RequestValidator.middleware()
route[UA_FILTER] UserAgentFilter.middleware()
route[REGISTRAR] RegistrationHandler.handleRegister()
route[INCOMING_INVITE] InviteHandler.handleInvite()
route[WITHINDLG] InDialogHandler.handleInDialog()
usrloc module RegistrationHandler.registry (in-memory Map)
rtpproxy module RTP proxy integration (placeholder)
dispatcher module Round-robin Asterisk server selection

Key Differences

  1. Configuration: JSON-based instead of Kamailio script syntax
  2. Language: JavaScript/Node.js instead of Kamailio configuration language
  3. Architecture: Middleware pattern instead of procedural routes
  4. Persistence: In-memory registry instead of database-backed usrloc
  5. Logging: Winston-based logging instead of xlog

Features Implemented

Request Processing Pipeline

  • Max-Forwards validation
  • SIP message sanity checks
  • Method-specific routing
  • Enhanced logging
  • Retransmission handling

Security Features

  • User-Agent filtering with allow/block lists
  • Empty User-Agent blocking
  • Attack tool pattern detection
  • Request validation and sanitization

Registration System

  • SIP REGISTER handling
  • In-memory user registry
  • Registration expiry management
  • Automatic cleanup of expired registrations

Call Routing

  • Local user lookup
  • Special number routing (3179, 8000, *600, 888)
  • Asterisk server integration
  • Round-robin load balancing

In-Dialog Handling

  • BYE request processing
  • ACK handling
  • Route header processing
  • Media teardown handling

Testing

The migration is ready for functional testing. Key test scenarios:

  1. Registration Tests

    • User registration and authentication
    • Registration expiry and cleanup
    • Unregistration handling
  2. Call Routing Tests

    • Local user calls
    • Special number calls
    • External trunk routing
  3. Security Tests

    • User-Agent filtering
    • Request validation
    • Attack prevention
  4. Media Tests

    • RTP proxy integration
    • SDP processing

Next Steps

🔄 In Progress

  • RTP proxy integration for media handling
  • SDP processing and modification
  • Media relay configuration

Planned Features

  • Redis integration for multi-instance support
  • Enhanced logging and monitoring
  • API endpoints for management
  • Performance optimization
  • Load testing and validation

Troubleshooting

Common Issues

  1. Port already in use: Ensure no other SIP server is running on port 5060
  2. Drachtio connection failed: Verify drachtio server is running and accessible
  3. Registration fails: Check From header format and contact headers
  4. Call routing fails: Verify user registration and Asterisk server connectivity

Logs

Check the logs directory for detailed information:

tail -f logs/sbc.log

Contributing

This migration maintains the same functionality as the original Kamailio configuration while leveraging Drachtio's modern JavaScript-based architecture. All existing features should work equivalently.