Hack 98 Link Two IRC Servers Together
If your IRC server starts getting too busy, the
only real solution is to turn it into a network of IRC
servers.
Almost all large IRC networks are made up of
multiple servers linked together. In order for two servers to link,
both need to be configured correctly.
The first step to linking IRC servers into a network is to make sure
that both servers can communicate with each other. Different ircds
use different protocols. One of the more popular
protocols is
P10, developed by Undernet and used by
ircu, bircd, and several
other ircds. It doesn't really matter which protocol
you use, as long as both servers are capable of understanding it. If
you are unsure of which protocol your server uses, check the official
web site for your ircd. One way to be sure that the servers will be
able to communicate is by using the same server software for both of
the ircds, although this isn't always possible.
15.5.1 Configuring the Servers
In order for the network to run
smoothly after the servers have been linked, several settings need to
be the same for all servers. The settings vary from ircd to ircd, but
most will have the following options somewhere
(bircd uses bircd.ini, and
asuka uses F:lines in
ircd.conf).
The following settings must be identical:
- Topic length
-
The maximum length of the topic
- Nick length
-
The maximum length for a user's nickname
- Chan length
-
The maximum length for a channel name
If these settings are not identical on all servers, problems will
arise. For example, if the channel length is different, channels with
longer names would be truncated on some servers, but the truncated
channel may already exist.
In addition to these settings, any optional modes should be enabled
or disabled across all servers. That is, if the server software
supports optional modes, they should be disabled on
all servers or enabled on
all servers. If the valid modes differ between
servers, a mode change on one server may not be propagated to all
users or servers.
15.5.2 Numerics
Each IRC server on a network is assigned
a numeric that uniquely identifies it. No two servers can have the
same numeric. In ircu and
bircd, the numeric is set in the M:Line in the
ircd.conf file. The example given in
example.conf has a numeric of 1 (the last number
on the line):
M:London.UK.Eu.UnderNet.org:*:University of London, England:0:1
Servers that use the P10 protocol usually have a
two-digit numeric that can be made up of numbers, letters
(a-z, A-Z), and the
[ and ] characters. Other
networks use only pure numbers or other combinations. Before linking
servers, make sure that they all have a unique numeric. If there is a
collision, the servers will cancel the link attempt.
15.5.3 C:Lines
In
order for the servers to link, they
need to "know" about each other and
to have passwords to use during the link attempt. These are defined
in C:Lines in the ircd.conf file. The format for
these, as shown in example.conf, is:
C:remote hostname or IP:password:remote server name:port:class
The remote hostname or IP field can
contain wildcards; however, at least one server will need to know the
full hostname or IP of the other, so that it can initiate the link
attempt. The password field specifies the
password to be used during the link and should generally be the same
for both servers. The remote server name
field must exactly match that of the other server's
M:Line.
The port is the port number that the
server listens on for connections from other servers (usually set via
a P:Line with an S as the penultimate parameter).
The class field refers to one of the
classes defined with Y:Lines. 90 is the default for servers, which
gives the connection a low ping frequency and high SendQ and makes
automatic connection attempts every 300 seconds.
When you have added C:Lines for both servers and the servers are
currently running, you will need to make them reload the config file,
usually via the /rehash command or by executing an
external program.
15.5.4 Linking the Servers
Now that the servers are configured
properly, it's time to make them link. To do this,
make sure both servers are running. One of the servers should attempt
to automatically connect to the other within 5 minutes (300 seconds).
If this doesn't happen or you're
too impatient, you can use the /connect command to
force a connection attempt. The syntax for the connect command is:
/connect server name
The server name parameter must be the
server name as specified in the C:Line. When the servers link, you
should see some server notices (snotices) saying
that they have linked and when they have finished
bursting.
15.5.5 Bursting
When
two servers
connect, they have to tell each other everything about their users
and channels so that the two servers have the same information. For
larger networks, this can take several minutes and result in
decreased performance for the users. Normally, however, it takes only
a few seconds. Sometimes when the servers burst, there will be users
with the same nickname or channels with the same name and a different
set of channel operators. The servers have to decide what to do with
these "collisions."
If two users have the same nickname, the servers will generally
kill the person who connected to the network
last. For example, if Foo connected to server 1 at 2 p.m., and Foo
connected to server 2 at 5 p.m. on the same day, Foo on server 2
would be killed when the servers link.
Channel collisions are handled in a similar way. If a channel on
server 1 was created before that on server 2, then everyone in server
2 would be de-opped or devoiced, and any modes set on server 1 would
override those on server 2. Also, if server 1 had a mode such as
+i (invite only) or +k
(password required), then some users on server 2 may be kicked
because they were not invited or did not join with a password. The
particular behavior depends on the type of server you are running.
15.5.6 Commands
There
are several standard commands for
managing server links. The /connect command has
already been discussed, but it is worth noting that most ircds do not
feature a /disconnect command. Instead, the
/squit command is used (squit
is short for "server
quit"). This closes the connection with
the given server—for example, /squit
irc.foo.bar would close any connections to
irc.foo.bar. On some ircds, the
/squit command can be used to close links only
from the local server (i.e., you cannot tell another server to drop
one of its connections).
As with most server features, the commands and configuration options
vary between different ircds, so it is always a good idea to consult
the documentation for information specific to your
software.
—Chris Smith
|