5aae456ab360c64432cb5575630b7dd0f9151557
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
- Navigate to the migration directory:
cd drachtio-migration
- Install dependencies:
npm install
- 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
- Configuration: JSON-based instead of Kamailio script syntax
- Language: JavaScript/Node.js instead of Kamailio configuration language
- Architecture: Middleware pattern instead of procedural routes
- Persistence: In-memory registry instead of database-backed usrloc
- 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:
-
Registration Tests
- User registration and authentication
- Registration expiry and cleanup
- Unregistration handling
-
Call Routing Tests
- Local user calls
- Special number calls
- External trunk routing
-
Security Tests
- User-Agent filtering
- Request validation
- Attack prevention
-
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
- Port already in use: Ensure no other SIP server is running on port 5060
- Drachtio connection failed: Verify drachtio server is running and accessible
- Registration fails: Check From header format and contact headers
- 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.
Languages
JavaScript
100%