7.7 KiB
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:
{
"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:
- User Messages: Private messages and notices are routed to the correct server
- Channel Messages: Broadcast to all servers with users in the channel
- User Lists: WHO, WHOIS, and NAMES commands work across the network
- 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
- Check Configuration: Ensure server names, hosts, ports, and passwords match
- Network Connectivity: Verify network connectivity between servers
- Firewall: Ensure server linking ports are open
- Logs: Check server logs for connection errors and authentication failures
Common Error Messages
No link configuration found: Server not configured in links arrayServer already connected: Attempted to connect to already linked serverAuthentication failed: Password mismatch between serversConnection refused: Network connectivity or firewall issues
Debugging
Enable debug logging to see detailed server linking information:
{
"logging": {
"level": "debug"
}
}
Example Network Setup
Here's an example of setting up a 3-server network:
Hub Server (hub.technet.org)
{
"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)
{
"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)
{
"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