211 lines
5.7 KiB
Markdown
211 lines
5.7 KiB
Markdown
# 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:
|
|
```bash
|
|
cd drachtio-migration
|
|
```
|
|
|
|
2. Install dependencies:
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
3. Configure your settings in `config/default.json`:
|
|
- SIP listening parameters
|
|
- RTP proxy configuration
|
|
- Asterisk server addresses
|
|
- Security settings
|
|
|
|
### Configuration
|
|
|
|
Key configuration sections:
|
|
|
|
```json
|
|
{
|
|
"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:**
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
**Production mode:**
|
|
```bash
|
|
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
|
|
- [x] Max-Forwards validation
|
|
- [x] SIP message sanity checks
|
|
- [x] Method-specific routing
|
|
- [x] Enhanced logging
|
|
- [x] Retransmission handling
|
|
|
|
### ✅ Security Features
|
|
- [x] User-Agent filtering with allow/block lists
|
|
- [x] Empty User-Agent blocking
|
|
- [x] Attack tool pattern detection
|
|
- [x] Request validation and sanitization
|
|
|
|
### ✅ Registration System
|
|
- [x] SIP REGISTER handling
|
|
- [x] In-memory user registry
|
|
- [x] Registration expiry management
|
|
- [x] Automatic cleanup of expired registrations
|
|
|
|
### ✅ Call Routing
|
|
- [x] Local user lookup
|
|
- [x] Special number routing (3179, 8000, *600, 888)
|
|
- [x] Asterisk server integration
|
|
- [x] Round-robin load balancing
|
|
|
|
### ✅ In-Dialog Handling
|
|
- [x] BYE request processing
|
|
- [x] ACK handling
|
|
- [x] Route header processing
|
|
- [x] 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:
|
|
```bash
|
|
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.
|