Files
techircd/docs/LINKING.md

291 lines
7.7 KiB
Markdown

# TechIRCd Server Linking
TechIRCd now supports IRC server linking, allowing multiple IRC servers to form a network. This enables users on different servers to communicate with each other seamlessly.
## Features
- **Server-to-Server Communication**: Full IRC protocol compliance for server linking
- **Hub and Leaf Configuration**: Support for hub/leaf network topologies
- **Auto-Connect**: Automatic connection to configured servers on startup
- **Operator Commands**: Manual connection and disconnection controls
- **Security**: Password-based authentication for server connections
- **Network Transparency**: Users can see and communicate across the entire network
## Configuration
Server linking is configured in the `config.json` file under the `linking` section:
```json
{
"linking": {
"enable": true,
"server_port": 6697,
"password": "linkpassword123",
"hub": false,
"auto_connect": false,
"links": [
{
"name": "hub.technet.org",
"host": "127.0.0.1",
"port": 6697,
"password": "linkpassword123",
"auto_connect": false,
"hub": true,
"description": "TechNet Hub Server"
}
]
}
}
```
### Configuration Options
- **enable**: Enable or disable server linking functionality
- **server_port**: Port to listen on for incoming server connections
- **password**: Default password for server authentication
- **hub**: Whether this server acts as a hub (can connect to multiple servers)
- **auto_connect**: Automatically attempt to connect to configured links on startup
- **links**: Array of server configurations to link with
### Link Configuration
Each link in the `links` array supports:
- **name**: Unique server name (should match the remote server's configured name)
- **host**: Hostname or IP address of the remote server
- **port**: Port number the remote server is listening on for server connections
- **password**: Authentication password (must match on both servers)
- **auto_connect**: Whether to automatically connect to this server
- **hub**: Whether the remote server is a hub server
- **description**: Human-readable description of the server
## Operator Commands
Operators can manually control server links using these commands:
### CONNECT
Connect to a configured server:
```
/CONNECT <servername> <port> [host]
```
Examples:
```
/CONNECT hub.technet.org 6697
/CONNECT hub.technet.org 6697 192.168.1.100
```
### SQUIT
Disconnect from a linked server:
```
/SQUIT <servername> [reason]
```
Examples:
```
/SQUIT hub.technet.org
/SQUIT hub.technet.org :Maintenance required
```
### LINKS
Show all connected servers:
```
/LINKS
```
This displays the network topology showing all connected servers.
## Network Topology
TechIRCd supports both hub-and-leaf and mesh network topologies:
### Hub-and-Leaf
```
[Hub Server]
/ | \
[Leaf1] [Leaf2] [Leaf3]
```
In this configuration:
- The hub server (`hub: true`) connects to multiple leaf servers
- Leaf servers (`hub: false`) only connect to the hub
- All inter-server communication routes through the hub
### Mesh Network
```
[Server1] --- [Server2]
| \ / |
| \ / |
[Server3] --- [Server4]
```
In this configuration:
- All servers can connect to multiple other servers
- Provides redundancy and multiple communication paths
- More complex but more resilient
## Server-to-Server Protocol
TechIRCd implements standard IRC server-to-server protocol commands:
- **PASS**: Authentication password
- **SERVER**: Server introduction and information
- **PING/PONG**: Keep-alive and lag detection
- **SQUIT**: Server quit/disconnect
- **NICK**: User nickname propagation
- **USER**: User information propagation
- **JOIN/PART**: Channel membership changes
- **PRIVMSG/NOTICE**: Message routing between servers
- **QUIT**: User disconnection notifications
## Message Routing
When servers are linked, messages are automatically routed across the network:
1. **User Messages**: Private messages and notices are routed to the correct server
2. **Channel Messages**: Broadcast to all servers with users in the channel
3. **User Lists**: WHO, WHOIS, and NAMES commands work across the network
4. **Channel Lists**: LIST shows channels from all linked servers
## Security Considerations
- **Passwords**: Always use strong, unique passwords for server links
- **Network Access**: Restrict server linking ports to trusted networks
- **Operator Permissions**: Only trusted operators should have CONNECT/SQUIT privileges
- **Link Validation**: Server names and passwords are validated before connection
## Troubleshooting
### Connection Issues
1. **Check Configuration**: Ensure server names, hosts, ports, and passwords match
2. **Network Connectivity**: Verify network connectivity between servers
3. **Firewall**: Ensure server linking ports are open
4. **Logs**: Check server logs for connection errors and authentication failures
### Common Error Messages
- `No link configuration found`: Server not configured in links array
- `Server already connected`: Attempted to connect to already linked server
- `Authentication failed`: Password mismatch between servers
- `Connection refused`: Network connectivity or firewall issues
### Debugging
Enable debug logging to see detailed server linking information:
```json
{
"logging": {
"level": "debug"
}
}
```
## Example Network Setup
Here's an example of setting up a 3-server network:
### Hub Server (hub.technet.org)
```json
{
"server": {
"name": "hub.technet.org"
},
"linking": {
"enable": true,
"server_port": 6697,
"hub": true,
"links": [
{
"name": "leaf1.technet.org",
"host": "192.168.1.101",
"port": 6697,
"password": "linkpass123",
"auto_connect": true,
"hub": false
},
{
"name": "leaf2.technet.org",
"host": "192.168.1.102",
"port": 6697,
"password": "linkpass123",
"auto_connect": true,
"hub": false
}
]
}
}
```
### Leaf Server 1 (leaf1.technet.org)
```json
{
"server": {
"name": "leaf1.technet.org"
},
"linking": {
"enable": true,
"server_port": 6697,
"hub": false,
"links": [
{
"name": "hub.technet.org",
"host": "192.168.1.100",
"port": 6697,
"password": "linkpass123",
"auto_connect": true,
"hub": true
}
]
}
}
```
### Leaf Server 2 (leaf2.technet.org)
```json
{
"server": {
"name": "leaf2.technet.org"
},
"linking": {
"enable": true,
"server_port": 6697,
"hub": false,
"links": [
{
"name": "hub.technet.org",
"host": "192.168.1.100",
"port": 6697,
"password": "linkpass123",
"auto_connect": true,
"hub": true
}
]
}
}
```
This creates a hub-and-leaf network where:
- The hub automatically connects to both leaf servers
- Leaf servers connect only to the hub
- Users on any server can communicate with users on other servers
- Channels span across all servers in the network
## Performance Considerations
- **Network Latency**: High latency between servers may affect user experience
- **Bandwidth**: Server linking uses additional bandwidth for message propagation
- **CPU Usage**: Message routing and protocol handling requires CPU resources
- **Memory Usage**: Additional memory is needed to track remote users and channels
## Future Enhancements
Planned improvements for server linking include:
- **Services Integration**: Support for network services (NickServ, ChanServ, etc.)
- **Channel Bursting**: Optimized channel synchronization
- **Network Statistics**: Detailed network topology and performance metrics
- **Load Balancing**: Intelligent routing for optimal performance
- **Redundancy**: Automatic failover and connection recovery