From UnrealIRCd documentation wiki
Jump to: navigation, search
This page contains changes which are not marked for translation.

Other languages:



What is the current version and when will next version be released?

The latest Stable version is 4.0.16, released on November 12, 2017.

Next stable version is scheduled to be released end of December 2017, or sooner in case of urgent issues. With UnrealIRCd 4.0.x we push out a release about every 2 months, even if there are only minor changes. This makes sure that at least new installations benefit from recent fixes and enhancements. We always try to make clear what changed in each version so you can decide yourself if you want to upgrade or not.

Note that the old series, UnrealIRCd 3.2.x, are End of Life and no longer maintained. You should no longer run 3.2.x.

What is new in the latest version?

Please check out the releases announcements on the forums.

How do I get the latest source code? (CVS/HG/Mercurial/Git)

How is this different than a regular download?

Below we describe how to get the very latest code from our git repository. This contains code changes committed only minutes or days ago and is considered 'bleeding edge'. Possibly nobody has tested this code, or just one person. It may not even compile. Most people use the Downloads instead as they would have received some testing.


Previously we used a different source control system. Now we have moved to git and we have our own page at GitHub. You can also easily see the most recent activity there, just like before.

Option #1: I'm lazy, I just want a .tar.gz or zip!

Go to our GitHub page. Click on the green button Clone or download and select Download ZIP.

Option #2: The 'real way' to get the latest source...

This describes how to 'checkout' the repository on your machine, which allows you to easily pull in updates (which happen every day/week). First, run:

git clone https://github.com/unrealircd/unrealircd.git

This will create a directory 'unrealircd' with all the source code (UnrealIRCd 4 by default, see later). If, after a few days, you want to pull in the latest changes then run the following in your unrealircd directory:

git pull -u

Or if that doesn't work, try without the -u:

git pull

git: command not found

If you get something like git: command not found then you need to install git, the package is usually also called 'git'.


Where is the documentation

The UnrealIRCd 4 documentation is located here.

Where can I get online support?

I found a bug or have a feature suggestion

If you have a feature suggestion or found a bug (or even crashed) then please report it on https://bugs.unrealircd.org/. This process only takes a couple of minutes!

We use bug tracker software so we don't loose track of bugs. PLEASE report it there and don't report bugs to us via IRC, email, forums, or any other way... all that will happen is we will forget about it and then your bug will not be fixed.

The bug tracker aids us with coordinating what bugs should be fixed in next version, what has priority, which bugs are similar (or duplicates) and thus may help us spot patterns, who should fix what bugs, etc.

Getting started

How to install UnrealIRCd

Check out the Installing from source or Installing (Windows) articles.

Compile/build problems

I ran ./configure and got tons of problems

Do NOT use ./configure! Use ./Config instead.

make: *** No targets specified and no makefile found. Stop.

First of all, did you run ./Config? (You sould not use ./configure)

The error means no makefile was produced, this means something went wrong when running ./Config, take a look at the output (last 20-30 lines). Maybe you don't have a C compiler, are missing some library, or (less likely) you are compiling on an unsupported OS.

(v)fork: Resource temporarily unavailable

You are trying to compile you ircd on a nice shell and your sysadmin has set your process limit too low.

Explain the problem to your system administrator: say you are unable to compile because of the process limit, and paste the error to him/her.

make: don't know how to make w. Stop

Do not use 'gmake', use 'make' instead (as ./Config said when it finished).

Windows: unresolved external symbol ..

NOTE: We highly suggest you to simply download the Windows precompiled version from unrealircd.org instead of compiling your own (unless you need to).

This error can mean a number of things, but if you see unresolved symbols in non-windows functions, such as:

  Creating library L_COMMANDS.lib and object L_COMMANDS.exp
M_OPER.obj : error LNK2019: unresolved external symbol _sendto_snomask_global re
ferenced in function _m_oper
M_INVITE.obj : error LNK2001: unresolved external symbol _sendto_snomask_global
src/modules/commands.dll : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: 'cl' : return code '0x2'

Then this is because the wircd.def file is not up to date with your compile settings. Fixing this is simple, you need to download dlltool.exe and place it in your path (eg: c:\windows\system32). Then, for compiling you use something like this:

nmake -f makefile.win32 [your other options here]
nmake -f makefile.win32 SYMBOLFILE
nmake -f makefile.win32 [your other options here]

So basically you just run nmake -f makefile.win32 SYMBOLFILE and then restart compiling again.

If that didn't help, then this is a different problem (eg: old compiler, too new compiler, invalid compile environment, etc).

Windows: I'm unable to compile UnrealIRCd on windows

NOTE: We highly suggest you to simply download the Windows precompiled version from unrealircd.org instead of compiling your own (unless you need to).

If you really want to compile UnrealIRCd on Windows yourself, then read the instructions on Compiling UnrealIRCd on Windows.

Getting UnrealIRCd up and running

The questions below answer problems with getting UnrealIRCd booted.

Windows: It doesn't start?? nothing happens!

If you start UnrealIRCd and nothing happens, you see nothing, then you are probably running UnrealIRCd as a service. This means you checked 'install as a service' during the installer. When UnrealIRCd is running as a service you won't see a graphical interface (GUI). The GUI can be quite useful, especially when you're setting up UnrealIRCd for the first time. That's why we don't recommend installing as a service and the option is called "install as a service (not for beginners!)".

Switch from service mode to GUI mode

Go to the "C:\Program Files (x86)\UnrealIRCd 4" directory and run the command "unrealsvc uninstall". This won't uninstall UnrealIRCd itself, but will uninstall the service.

Then next time you try to start UnrealIRCd (run UnrealIRCd.exe) you will see the GUI, which is much more helpful.

If you want to run in services mode again, then run "unrealsvc install".

I still want to run as a service

If you run UnrealIRCd as a service then errors are logged to 'service.log', which may or may not be in the 'logs' subdirectory.

Where are errors logged?

Errors are normally logged to the file ircd.log in the logs subdirectory.

If you run UnrealIRCd "as a service" on Windows rather than in GUI mode then the errors are logged to service.log instead. Note that you may want to (temporarily) switch from service to GUI mode, see #Switch from service mode to GUI mode.

set:: missing

You didn't set a required variable in your set block. See the Set block for documentation on the specific variable.

{ } block missing

Your configfile doesn't contain a required block, please check the documentation on the block. Each block is documented in detail.

Unknown directive

Several possibilities:

  • you have a unknown/misspelled variable name.
  • you forgot to load a module
  • you are using an older UnrealIRCd version (note that the documentation in this wiki is about the UnrealIRCd development version so it may contain features not yet available in the current release).
  • you have put the setting in the wrong place, for example set::options::dont-resolve means set { options { dont-resolve; }; };.
  • you have a parse error in your config file. For example, the admin block should be something like:
admin {
If you forget a ; or a }; it won't work!

See Configuration#Configuration_file_syntax for an explanation on the syntax and to learn what is valid and what isn't. It's just one page.

illegal something::class / unknown class 'something'

You are referring to a class which you didn't declare.

You refer from allow/oper/server blocks to class blocks so the class blocks should be defined before you refer to them. So the order is important.

The OS enforces a limit on max open files

If you get:

The OS enforces a limit on max open files
Hard Limit: 512 MAXCONNECTIONS: 1024

or something similar, then your OS is limiting your maximum number of open files/sockets... You need to rerun ./Config and answer the number showed in "Hard Limit" (512 in this example) to the question "How many file descriptors (or sockets) can the IRCd use?", and after that recompile: make clean; make; make install

Error binding stream socket to .. Address already in use

This means the IRCd cannot listen on the port(s) you specified. Here are the two (most common) possibilities:

Another process is using the port

An IRCd process is already running on the same port(s).

Solution: simply kill the old IRCd before you try to launch UnrealIRCd (or make one of them use a different port)

You are on a shell box

When you use a shell provider you normally need to 'bind' to a a specific IP which the shell provider assigned to you. So if you have:

listen         *:6667;

Then change that to:


Where is the IP you received from your shell provider. You will have to do this for ALL your listen blocks.

See also the documentation of the Listen block.

UnrealIRCd seems to start but the screen goes away

Check #Where are errors logged?, look at the error, and proceed from there.

UnrealIRCd starts fine but I get Connection refused

See #Connecting

loadmodule ....: undefined symbol ....

If you get undefined symbol errors such as:

* unrealircd.conf:52: loadmodule src/modules/commands.so: failed to load: tmp/F73A8A80.commands.so: Undefined symbol "ssl_get_cipher"

Then most likely you did not upgrade or (re)compile UnrealIRCd properly. Do the following:

make clean
make install

And try booting UnrealIRcd again.

Reasons why it might not have worked:

  • Perhaps you forgot 1 of the steps of above
  • Make sure your irc is installed in the path you think it is. Double check the paths you see / entered.
  • Possibly you have some old .so files from previous versions that you are trying to load. Check the file date/time to ensure they are really just compiled a few minutes ago.

If all of the above didn't work then you could just as easily try a clean UnrealIRCd installation. rm -rf or rename your current one, extract a fresh .tar.gz and configure&compile it.

link::ciphers no longer works

Problem: you upgraded UnrealIRCd and now you get the error message: link::ciphers has been moved to link::outgoing::ssl-options::ciphers

This is because all SSL options within the link block have been moved to link::outgoing::ssl-options.

Old style:

link xyz {
    outgoing {
    ciphers "AES256";

New style:

link xyz {
    outgoing {
        ssl-options {
            ciphers "AES256";

Note that cipher selection is (and always has been) only enforced for outgoing connections. If you want to ensure specific ciphers for incoming connections then you should use set::ssl::options::ciphers (or if you prefer per-port settings then via listen::ssl-options::ciphers).

Your server is not listening on any SSL ports

From 4.0.11 onwards you may see something like this:

[warning] Your server is not listening on any SSL ports.
[warning] Add this to your unrealircd.conf: listen { ip *; port 6697; options { ssl; }; };

This is because you do not have any listen { } blocks with SSL enabled.

Why is this important? Using SSL/TLS prevents people from eavesdropping, much like HTTPS is better than HTTP. For more information see our SSL/TLS article.

To fix this, follow the instructions as outputed on your screen. In the example of above the fix is to add this to your unrealircd.conf:

listen { ip *; port 6697; options { ssl; }; };

Or a nicer version (but the same result):

listen {
        ip *;
        port 6697;
        options { ssl; };

We highly recommend adding an SSL listener on port 6697. Use this port number because it is the standard port for secure IRC (Source: [1]).

Most people should not see this warning/error, since UnrealIRCd has been shipping and advocating this SSL port in the default example.conf since 2004 (Source: [2])


The FAQ items below assume your UnrealIRCd is running but you can't connect to it with an IRC client.

We split the connection problems in two sub-sections:

Please be sure to read the correction secton :)

Unable to connect to IRC server (server at home)

This FAQ item assumes you are running UnrealIRCd on a server at home. If this isn't the case then see #Unable to connect to IRC server (VPS/shell) instead!

Really running?

First of all, is UnrealIRCd really running? Do you see a GUI on Windows? And see an 'unrealircd' process on *NIX ? (ps x|grep ircd)

Check also #Where are errors logged? to see if there are no errors.

Can you connect locally to your IRCd?

Try /server 6667. If even yourself can't connect to your own IRCd by this then verify if the IRCd is running at all! Or maybe you bounded to a specific IP or using a different port. You should fix this, there's no point in continuing with the steps below.

Have outside users connect to your IP

Try using the IP name of your IRC server first, rather than a hostname. So /server 6667 where is your internet IP. You can find out your internet IP by going to whatsmyip.org or similar sites. (Also note that outside users cannot connect to your ircd with ips like 192.168.x.x or 10.x.x.x, those are LAN ip's, not internet routable IP's!)

You probably need some port forwarding

If outside users can't connect to your Internet IP, but you can connect locally, then most likely a router or firewall in-between is blocking their access. This is common. You need to "forward" your IRCd port (usually 6667 and 6697) on your router. Please consult your routers documentation. This article may also be of help.

Don't forget Windows firewall!

You may need to allow the Windows Firewall to allow incoming connections to your IRCd. It should have asked this when you fired up the IRCd. Alternatively, you can disable Windows firewall if you trust the people on the same LAN and are connected to the internet via a router.


When the port has been forwarded on your router and windows firewall is turned off (or on but incoming IRCd connections are allowed) then it should be no problem to get outside users on your IRCd. Have fun!

Unable to connect to IRC server (VPS/shell)

Below assumes you are running UnrealIRCd on a VPS, shell provider or a dedicated server. If instead, you are running a server at your own home then see #Unable to connect to IRC server (server at home) instead!

Really running and listening?

First of all, is UnrealIRCd really running? On *NIX run ps x|grep ircd, it should output something like this:

syzop@vulnscan:~$ ps x|grep unrealircd
 7795 ?        S      0:00 /home/syzop/unrealircd/bin/unrealircd

This means UnrealIRCd is running.

Listening on the right ports?

On *NIX (but not easily on Windows) you can double check if UnrealIRCd is actually listening on the port. You do this via netstat -anp|grep ircd:

syzop@vulnscan:~$ netstat -anp|grep unrealircd
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0  *               LISTEN      7795/unrealircd
tcp        0      0  *               LISTEN      7795/unrealircd
tcp        0      0  *               LISTEN      7795/unrealircd
tcp        0      0  *               LISTEN      7795/unrealircd
unix  2      [ ]         DGRAM                    212392255 7795/unrealircd

In the example of above the IRCd is running on the ports 7000, 6667, 6668 and 6900.

If it's not listening on the correct ports then stop here. Check #Where are errors logged? for errors.

Connect by IP

Try connecting to the IP of your IRC server first, rather than connect by hostname. So /server 6667 where is the internet IP of the machine.

Check the firewall

If you cannot connect by IP then you need to check the firewall of the server. Consult the documentation for your Linux distribution or your non-Linux OS.

On some VPS providers like Amazon, you need to configure the firewall in your admin panel as well (these are called Security groups on Amazon EC2).

Can connect by IP but not by hostname

If connecting by IP works perfectly fine (/server, but you cannot connect to it by hostname (/server some.nice.hostna.me) then you need to understand that the hostname you are connecting with needs to be 'registered' at your DNS provider. You must own the domain name, and add something called an 'A record' to point to your IRC server. Explaining how to do this is outside the scope of this FAQ.

Linking servers

How do I link two (or more) IRC servers

Have a look at our Tutorial: Linking servers.

Trouble with linking two IRC servers

Have a look at our dedicated Troubleshooting: linking servers article.

(sync) Possible negative TS split at link server.blah.net (1078875430 - 1078875478 = -48)

If you get an error like:

(sync) Possible negative TS split at link server.blah.net (1078875430 - 1078875478 = -48)

then this -48 means one of the clock is 48 seconds behind the other. This is bad.

See #Why correct time is important and how to fix your clock

Your clock is .. seconds behind my clock. Please verify both your clock and mine, fix it and try linking again.

See #Why correct time is important and how to fix your clock

Your clock is .. seconds ahead of my clock. Please verify both your clock and mine, fix it, and try linking again.

If you get something like:

Your clock is -1337 seconds ahead of my clock. Please verify both your clock and mine, fix it and try linking again.


Rejecting link xx.xx.xx[@X.X.X.X.59383]: our clock is 575 seconds ahead.
Correct time is very important in IRC. Please verify the clock on both services.test.net (them) and
maintest.test.net (us), fix it and then try linking again

Then see #Why correct time is important and how to fix your clock

Why correct time is important and how to fix your clock

It is very important on IRC to have a perfectly synchronized clock. Below we explain why, and present a few solutions on how to ensure your clock is always correct.

Why correct time is important

As said, correct time is important. This is even more important when you link servers. If the clocks of your servers are off by more than a 5 seconds then you may experience problems already. If they are off for more than 30 seconds then you have a serious problem. In fact, we don't allow linking two servers when their clocks are more than 30 seconds off.

We really use timestamps in IRC everywhere. So incorrect time will cause quite a number of issues:

  • Temporary KLINES/GLINES/SHUNS/etc will not expire correctly. They might expire like an hour earlier, or even directly when they are added, or later.
  • Sudden (wrong) nick collision kills. Incorrect time can be exploited by someone to kill other users (thus incorrect time is a security problem as well!)
  • Channels might not show up in /LIST (especially if time is more than a day off)
  • Services might be unable to set a user +r (+r = register user)
  • In /WHOIS it may look like someone 'signed on' at the wrong time, even in the future

Solution 1: Synchronize the server clock


Windows 7 and up should automatically synchronize the clock. If it isn't working, then just search the web on how to do this.


On Linux/*BSD/etc you can get your clock perfectly synchronized by running ntpd. To install this you need root access on the machine.

On Linux distro's you simply run:

apt-get install ntp


yum install ntp

If you don't have root access on the machine, then ask your system administrator to install ntpd. Incorrect time on a server in general is considered bad practice, so the sysadmin should be made aware of this and resolve the situation.

Solution 2: built-in time synchronization in UnrealIRCd

UnrealIRCd has build-in NTP support and will try to synchronize the clock when it boots and then maintain an internal offset. This will make time appear correct (for the IRCd). Unfortunately this does not help against 'clock drift' where the time offset will change, for example if your clock is too slow it may be off by 2 seconds on the first day.. 4 seconds on the 2nd day.. and so on. The solution from previous section is therefore better.

A word on when your servers are in (different) time zones and daylight saving

It is absolutely no problem for your servers to be in different time zones. In fact, this is a common situation. Similarly, there's no problem with daylight saving and switching back and forth.

Why is this no problem? Well, on IRC we always use GMT/UTC time for all timestamps. So we don't actually use "local time".

What is important is that both your time AND YOUR TIME ZONE are set correctly. You can see which timezone your server is using by running the date command. It shows something like: Sun Jun 28 14:36:21 CEST 2015, in this example CEST is the time zone.

Example of incorrect clock caused by a bad time zone: Say, you are sitting next to your server and you are (both) in the Eastern Time zone. The wall clock says it's 11:00am and your server also shows 11:00am. Good, right? However, by mistake, your server is actually configured to use Central Time (oops!). This means the clock is actually incorrect, the UTC clock will be 1 hour off!

ERROR: Servers need to use SSL/TLS

You may see the following error during linking:

Servers need to use SSL/TLS (set::plaintext-policy::server is 'deny')

What it means

It means that a server is linking in without SSL/TLS. This could be services (eg: anope) or some other software.

NOTE: services on 'localhost' will never see this error.

Why SSL/TLS is important

SSL/TLS encrypts all data sent over the Internet (or any other network). Without SSL/TLS, data travels in cleartext and can be intercepted by 3rd parties. Everyone should use SSL/TLS and this is especially true for server connections. A single server connection may carry "interesting data" about hundreds of users, including but not limited to: names, e-mail addresses, passwords, IP addresses and even complete conversations.

Option 1: Connect using SSL/TLS

Make your services connect to UnrealIRCd using SSL/TLS. This is the only real and recommended fix.

Option 2: Change the error into a warning

Alter the plaintext policy, by setting:
set { plaintext-policy { server warn; }; };


NOTE: This basically ignores the serious security issue of your server(s) sending data insecurely over the internet (or local network).


This section assumes your server is up and running and you can connect to it, but you are having some sort of problem or question.

Where do I get a list of commands, user modes, channel modes, etc.

Check out the documentation:

Where's channel mode +j (jointhrottle)?

Jointhrottle is a useful anti flood feature which limits (throttles) the number of joins a user can do (to the same channel) to X per Y seconds. In UnrealIRCd 3.2.x you would enable this via channel mode +j.

In UnrealIRCd 4 this has been moved to the set::anti-flood::join-flood configuration setting and the channel mode +j has been removed. Why? There's rarely any need to configure this on a per-channel basis, and this way it's enabled by default in UnrealIRCd on all servers for all channels.

Where did user mode ... go in UnrealIRCd 4?

The following user modes were removed in UnrealIRCd 4:

  • Netadmin, services-admin, admin, co-admin: due to the new IRCOp access control.
  • User mode 'g' (failops): we already have 'o' and snomasks for this
  • User mode 'v' (receive infected DCC send rejection notices): moved to new snomask 'D'
  • User mode 'h' (helpop): all this did was display "is available for help" in /WHOIS. For IRCOps you can use oper::swhois for that. If you want non-ircops to have this too, then add a Vhost block with vhost::swhois.

This command is no longer working in UnrealIRCd 4

The following commands were removed in UnrealIRCd 4:

  • /ADDLINE: dangerous command. With this command you can (too) easily break your configuration file, in which case your server can't /REHASH anymore and won't get back after a restart. Only people with access to the configuration files (eg: shell access) should modify the configuration file.
  • /ADCHAT & /NACHAT: because of the new IRCOp access controls this no longer makes sense.
  • /CHATOPS: use /GLOBOPS which does the same

For people using /GLOBOPS and /LOCOPS or the other /..CHAT commands: We have something wonderful on IRC called "channels". It allows you to talk to multiple people at the same time. You should really have an #opers and/or similar channel(s). This being said, we kept the /GLOBOPS and /LOCOPS command in anyway.

Helpop doesn't work

If the /HELPOP command does not output anything, then try /QUOTE HELPOP just to be sure.

Still nothing? You need to include help.conf from your unrealircd.conf like this:

include "help/help.conf";

So better double check you have it. After having added it, rehash.

I can't kick people, join invite only channels, etc even though I am IRCOp!!

So, you are an IRCOp and you expect to be able to join all channels, regardless of whether they are invite only, have a channel key, if you are banned, etc. etc.?

Have a look at the OperOverride. And you should read the IRCOp guide as well.

I have k/g-lined myself!!


See #How to prevent myself from getting banned on how to get on IRC anyway to resolve the situation.

NOTE: There's no way to remove any *LINES from the shell. Well, if you restart the IRCd the KLINEs will be cleared, of course. And if you have no other IRC servers linked then all other ban types (GLINE's) will be cleared as well.

How to prevent myself from getting banned

If you want to be sure that you can never get KLINE'd / GLINE'd / etc... then see below. Note that this has nothing to with channel bans (+b)!

Open your unrealircd.conf and add the following lines, naturally replace with your own IP (your own ip, not your server ip):

except tkl { mask *@; type all; };
except ban { mask; };

Then rehash the ircd.

Your IP is now immune from KLINE/GLINE/etc.

How to become IRCOp / administrator

You define IRC Operators in the Oper block and then use the /OPER command on IRC to become an IRCOp.

For example, if your oper block is called 'TestOper' like this (first few lines):

oper TestOper {
        mask *;
        password "test";

Then you would use the following command to become IRCOp:

/oper TestOper test

NOTE: both the name and the password are case sensitive!

Still have trouble becoming IRCOp?

  • Try with an oper::mask * like in the example of above. Only after it works you limit it down to an IP range, or you just keep it at *
  • Make sure you rehashed after making any changes to your unrealircd.conf

Once you are IRCOp, we recommend reading the IRCOp guide!

How to broadcast a message to all users

As an administrator you may want to broadcast a message to all users, either on one particular server or to everyone on all servers. Naturally only IRCOp's may do this, regular users can't.

Network-wide broadcasting

You normally use Services for this, the command is usually called GLOBAL and goes via OperServ:

/OS GLOBAL Hi this is a message to everyone!

You can also use this UnrealIRCd command. It also works without services but rquires you to have all your server names end in the same domain name:

/NOTICE $*.yournet.org Hi this is a message

Server-specific message

To send a message to everyone connected to irc1.yournet.org:

/NOTICE $irc1.yournet.org Hi this is a message

I am IRCOp but /LIST still hides certain channels

hidden on the client-side

Clients will often 'filter' channels for you.

  • For example you can set it to only show channels with more than 2 people, so you won't get to see the ones with just 1 person in it.
  • mIRC has an option called 'Hide non-alphanumeric channels' under 'list options' which is enabled by default. It means that channels like #.blah are thus hidden by default. Other clients might have similar "features".

permitted to see?

You need the override::see::list operclass privilege in order to see secret channels in /LIST. The operclasses shipped with UnrealIRCd in operclass.default.conf include this capability, so if you use the 'netadmin' or other default operclasses then this is already OK.

incorrect time

Unusual, but possible: if your clock is off by 24 hours (or more) then some channels will be hidden as well.

Warning! Possible desynch: SJOIN for channel .. has a fishy timestamp (XX)

This is a serious condition, and is actually some sort of bug.

In technical terms, it means a MODE command (to be exact: the last parameter mode) was misinterpreted to be timestamp of the channel. For example UnrealIRCd 3.2.2 had a problem with SAMODE and certain parameters.

This is a serious condition and unfortunately the only way to fix it is to have all users leave the channel so it can be re-created.

I (suddenly) got clients quiting with Max SendQ exceeded!

short answer

Increase your class::sendq

long answer

This happens when a client issues a request that will return A LOT of data, usually '/who' (eg /who #channel). If you for example have large channels like 300+, 500+ etc... then /who #chan will return A LOT of data, therefore the max sendq (sendq == send queue) is reached and the client is disconnected... Some clients or scripts do a '/who #chan' on join. This explains why certain people will be killed directly on join, while others will not.

The solution is to simply increase the sendq. To what value? Something like 250000 is reasonably high (250k). If that doesn't work, try 500000 (500k).

hostnames are not resolving

You get *** Couldn't resolve your hostname; using your IP address instead?

The best way to test is to let someone from a remote location (not your LAN) connect to you where you can be sure of his host resolves (for example it works at ircnet/efnet/undernet/..). If the host resolves fine on one of those other networks but not on your UnrealIRCd server then you know there is a possibly problem on your end (your UnrealIRCd or your server).

DNS information is acquired from /etc/resolv.conf (*NIX) or the registry (Windows). Type '/quote dns i' (as an oper) to see the current nameserver in use by UnrealIRCd. If you changed your nameserver settings in resolv.conf or in Windows then you will have to run /REHASH -dns or restart UnrealIRCd.

Example of how to test your nameserver at *NIX:

# host domain name pointer test.domain.
# host test.domain
test.domain has address

In this example the host is correct and the nameserver seems to work fine. The user should get the host test.domain on IRC.

Another example:

# host domain name pointer somehost.domain.
# host somehost.domain
somehost.domain has address

In this case your own name server is fine, it is sending replies. But the information does not match: reverse dns resolved to somehost.domain, however, when double checking this by resolving somehost.domain we got back. Since forward DNS and reverse DNS don't match the user will not have a hostname on IRC. That's how it works, otherwise everyone could spoof their own hosts... In this case the owner of the domain and/or the IP could (or should) fix their DNS entries to make them match.

How to combat spam, advertising, worms, virusses, drones

We have an effective tool called Spamfilter for this! It allows you to kill / block people based on 'patterns' in messages or elsewhere.

Exiting ssl client [..] Internal OpenSSL error or protocol error

If you get messages like:

Exiting ssl client [@]: SSL_write(): Internal OpenSSL error or protocol error
Exiting ssl client [@]: SSL_write(): OpenSSL functions requested a read()

Or anything else like that then it's nothing to worry about, these are sent to the JUNK snomask.. which is.. guess what? for junk...

What this error message means is that someone (or something) tried to connect to the SSL port but something went wrong.. in almost all cases it is a non-SSL client connecting to a SSL port, things like a bot, another server (w/autoconnect) or services trying to connect every X minutes...

To summarize: it's usually nothing to worry about and not an attack, unless you get like X msgs of these per second the whole time ;).

If you don't like it, remove the junk snomask (/MODE nick +s -j)!

How do I get an oper/admin/.. host after I oper up

You set vhost in the Oper block.

In previous UnrealIRCd versions this was done via set::hosts, but not anymore.

How do I get a title in /WHOIS

If you want /WHOIS to show something like "UserX is a Network Administrator" or "UserX is your friendly administator" then you can use swhois in the Oper block for that.

To grant such a title to non-IRCOps you can use swhois in the Vhost block.

I changed my oper block but the changes are not effective

Did you rehash your server?

You also need to de-oper before /OPER'ing up again to have all settings effective. To do this you simply do:

/MODE yournick -o

and then use /OPER... again.

WARNING: (g)zlines should be placed on user@IPMASK not user@hostmask

If you execute the command /GZLINE *@blablabla.dialin.bla.com you will get something like:

WARNING: (g)zlines should be placed on user@IPMASK, not user@hostmask (this is because (g)zlines are processed BEFORE a dns lookup is done)


This is because ZLINE's (and global zlines, GZLINE's) need to be placed on an ipmask and not a hostmask. The reason for this is that zlines are processed right after accepting the connection, before any data is received and before any DNS lookups (hostname lookups) are done. So a (g)zline disconnects the user IMMEDIATELY. In fact, that is the main difference between (g)zlines and klines/glines!


Place the ban on the IP of the user (eg: *@, you can get this by /WHOIS'ing the user (the 'connecting from' line). If the user already left then you could use your '/dns [host]' client command, although that's a tad less safe[1].

[1] If the bad guy owns the domain, then he might have updated his name to point to another ip.

I want to disable host cloaking (hosts like: Gll-20409F99.arcor-ip.net)

What is cloaking

Cloaking is a means to hide the real host from other users, for resolvable hostnames it looks a like Gll-20409F99.arcor-ip.net, and IP's will look like 9DD2051.356EF559.713C47B6.IP. You get a cloaked host by the usermode +x (this can be manually set, or automatically by the server). For more general information on cloaking, see the section on cloaking in the docs.

Cloaking is a security feature (for your users), so think twice before disabling it!

How to disable it

You have several options:

Option 1: make cloaking not the default

Just remove the 'x' in set::modes-on-connect, then users will not be set +x automatically and thus will not be cloaked. Users can still set themselves usermode +x if they want to.

set {
        modes-on-connect "+i";

Option 2: fully deny users to be cloaked

If you never ever want people to use cloaking then remove 'x' from set::modes-on-connect (if it is present), AND set set::restrict-usermodes to 'x':

set {
        modes-on-connect "+i";
        restrict-usermodes "x";

Why is UnrealIRCd responding slowly (laggy). It's only processing 1 line per second??

It is NOT because UnrealIRCd is slow. It's called fake lag and it's an anti-flood countermeasure. Yes, it's a feature, not a bug.

The algorithm is as follows:

  • For each command (raw IRC protocol line) the user is lagged up according to this formula: seconds = 1 + floor(length_of_command / 90)
  • As long as the user is lagged up UNDER 10 seconds we still process the commands. This allows for quick bursts of commands.
  • If a user is lagged up 10 seconds or more then we don't process the client commands. The IRCd will wait until the user is <10 seconds again.

IRC Operators are exempt from fake lag and can send as fast as they want. You can see IRCOps can flood hundreds or thousands of commands per second. Note: they could still go Excess flood due to sendq/recvq restrictions you have imposed in the Class block.

You can also enable an option called FAKELAG_CONFIGURABLE in include/config.h. After doing so you have to recompile UnrealIRCd. Then you can use class::options::nofakelag to enable it for regular users.

Note that the fake lag is there for a reason! It is very dangerous to allow users to flood at full speed. Users can generate vast amounts of bandwidth (really a lot!) and can easily use the lack of flood controls to cause a Denial of Service attack.


Where is NickServ? ChanServ?

NickServ, ChanServ, .. are supplied by a services package. UnrealIRCd (like most ircds) doesn't come with services. You have to choose, download and install your services separately. See our Services article.

Why doesn't UnrealIRCd come with services included?

We don't integrate services in UnrealIRCd itself because we feel you should be able to choose a package that you like yourself. People tend to disagree on which services are the best, it's better to keep this separate from the ircd or else we get "religious wars". See our Services article for available services packages.

How do I get Services?

See the Services article.

/CS or /CHANSERV says: Services are currently down. Please try again later.

You execute the /CS or /CHANSERV or any other such command and it says Services are currently down. Please try again later.

Did you install services?

You need to install services, see Services and the questions above.

Are you services really online?

Are your services really online and linked? Check with /MAP. Send a message manually to NickServ like /MSG NickServ HELP. You see output? Then see next. If you don't, then first make sure your services are installed and linked correctly.

Configure set::services-server

set::services-server must point to your services server like this:

set {
        services-server "services.mynet.net";

After changing this, don't forget to rehash.

/NS or /CS say: Unknown command

Commands like /NS or /CS are called aliases. You need to enable these (they are enabled in the example configuration, though), see Commonly included files under the Include directive. If you made any changes then don't t forget to rehash.

NickServ/ChanServ don't op me or say I'm not a registered nick all the time

Make sure your services are U-lined. You configure this via the ULines block. While you are at it, make sure your set::services-server is set correctly too!

IMPORTANT : After changing your ULines you must:

  • Rehash the server
  • Disconnect services (/SQUIT services.*)
  • Re-link services (start them again, although some services auto-connect automatically)


These are questions which simply don't fit well in the other sections.

My server crashed!!

Please report on https://bugs.unrealircd.org/

Note that if the server crashed because of your own source modifications or 3rd party modules not coded by us then we won't help. If you don't know what this is, then you probably don't fit into this no-help category ;)

My server crashed when sending an incorrect raw command from another server (eg: services)

Please report on https://bugs.unrealircd.org/. We will try to fix the issue but note that issues in this category (input from trusted servers) may not receive the highest priority.

Historical POV

Previously our position was that such ""bugs"" never would be fixed. Nowadays we might if we come across them, but we don't actively find & fix them since we should do far more useful things with our scarce developer resources!

What are 3rd party modules and how do I get them?

You can use modules to add functionality to UnrealIRCd. Modules can add new user modes, channel modes, extended bans, snomasks, commands and other functionality.

We use the term third party modules to refer to modules that were not included in UnrealIRCd but written by someone else.

You can find a list of 3rd party modules at modules.unrealircd.org. You can possibly also find ones via a google search and on random sites on the internet. Note that not all modules may be compatible with latest UnrealIRCd version.

Please be careful with installing and using 3rd party modules:

  • Like any module and any C program, a fault in such a module can cause the IRCd to crash or misbehave
  • 3rd party modules could contain malicious code, only use ones from people you trust!
  • Any crashes or other issues should be reported to the author of the module and not to the UnrealIRCd team. We cannot help you with crashes in someone else his code.

If you are a C coder then you can write an UnrealIRCd module, see the Main Page under Development documentation for information on our C API.

How to install 3rd party modules?

In UnrealIRCd 4 you should place the .c file in your src/modules/third/ directory of the UnrealIRCd source directory.

cp somemodule.c /home/irc/unrealircd-4.0.0/src/modules/third

Then from your UnrealIRCd source directory you just run make and make install:

cd /home/irc/unrealircd-4.0.0
make install

UnrealIRCd will automatically detect any .c files in the src/modules/third directory and compile them.

You should no longer use make custommodule, use the method described above instead!

The method from above ensures that when you reconfigure or recompile UnrealIRCd the third party modules will be recompiled as well. Also when you upgrade to a new version, UnrealIRCd 4 will automatically copy the 3rd party modules from your previous UnrealIRCd installation (based on your input of the 1st ./Config question)