Link with another ngIRCd server
Before you begin
In this guide, we assume ngircd has been installed and configured to support SSL.
Updating the Configuration
Suppose you have two servers that you want to link together: irc.example.com
with IP address 192.0.2.1 and irc.network.org
with IP address 198.51.100.1.
NOTE: In your own configuration, you must replace these values with real hostnames and IP addresses.
Edit the [Server]
block in /etc/ngircd/ngircd.conf
in irc.example.com
:
[Server] Name = irc.network.org Host = irc.network.org Bind = 192.0.2.1 Port = 16697 MyPassword = IRCEXAMPLECOMPASSWORD PeerPassword = IRCNETWORKORGPASSWORD Group = 123 Passive = yes SSLConnect = yes ;ServiceMask = *Serv,Global
Make sure the [Server] block is not commented.
Notice that for irc.example.com
, the other hostname, Host = irc.network.org
(the other server) is used. If possible, we recommend using a symbolic hostname for Host rather than an IP address. That way, if the IP address changes in the future, the conf file does not need to be updated. So, we use Host = irc.network.org
and not an IP address like 192.0.2.1
.
Bind should be set to the public IP address for irc.example.com
. If you have a DDoS-filtered IP, you should use it. We recommend using an IPv4 address because IPv6 can be less reliable.
MyPassword for irc.example.com
(this server) must match the PeerPassword for irc.network.org
(the other server), and PeerPassword for irc.example.com
must match MyPassword for irc.network.org
.
You must replace IRCEXAMPLECOMPASSWORD
and IRCNETWORKORGPASSWORD
with strong passwords.
These passwords are stored in cleartext (not hashed) so we recommend you generate a new password.
Port 16697 with SSL is recommended to keep the connection secure and to avoid having traffic on port 6697, which is normally used by users to connect to the IRCd. Set SSLConnect to yes.
ngIRCd allows server groups. Only one direct link will be formed with servers with the same group ID.
One server should have Passive = yes
, and the other should have Passive = no
. If using a hub and spoke model, a useful convention is for hubs to have Passive = yes
, and leaf nodes Passive = no
.
SSL should be used to prevent sensitive information being sent in plaintext.
Next, edit /etc/ngircd/ngircd.conf
in irc.network.org
. If you do not control this server, you will need to ask the other admin to edit it.
[Server]
Name = irc.example.com Host = irc.example.com Bind = 198.51.100.1 Port = 16697 MyPassword = IRCNETWORKORGPASSWORD PeerPassword = IRCEXAMPLECOMPASSWORD Group = 123 Passive = yes SSLConnect = yes ;ServiceMask = *Serv,Global
Autostart
To automatically restart ngIRCd if it was terminated unexpectedly, create a script in /usr/local/libexec/project/ngircd.sh:
doas touch /usr/local/libexec/project/ngircd.sh doas chmod +x /usr/local/libexec/project/ngircd.sh
Inside /usr/local/libexec/project/ngircd.sh:
#!/bin/sh SERVICE_NAME="ngircd" SERVICE_USER="_ngircd" SERVICE_PID="/var/ngircd/var/run/ngircd/ngircd.pid" if ! pgrep -u $SERVICE_USER -x "$SERVICE_NAME" > /dev/null then if [ -f $SERVICE_PID ]; then rm -f $SERVICE_PID rcctl -d start $SERVICE_NAME fi fi
Add this as a cronjob:
$ doas crontab -e * * * * * /usr/local/libexec/project/ngircd.sh > /dev/null 2>&1
For the solution to work, you need to enable the use of pid files in /etc/ngircd/ngircd.conf:
PidFile = /var/run/ngircd/ngircd.pid
Make sure to configure hopm.