FAQ

= Releases =

What is the current version and when will next version be released?
The latest Stable version is 4.2.4.1, released on July 7, 2019. Next version, 4.2.5, is scheduled for September 2019.

For UnrealIRCd 5, which is under development, the latest is 5.0.0-alpha1, released on August 20, 2019. See also What about UnrealIRCd 5?.

In general, with UnrealIRCd 4.x we push out a release about every 3 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.

What about UnrealIRCd 5?
At the end of April 2019 development of UnrealIRCd 5 was started behind closed doors.

On August 20, 2019, the first alpha version was released, see https://forums.unrealircd.org/viewtopic.php?f=1&t=8914

An UnrealIRCd 5 stable release is planned somewhere in Q4 2019.

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.

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 you have already done that, and - after a few days - you want to pull in the latest changes then run the following in your unrealircd directory:

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'.

= Resources =

Where is the documentation
The UnrealIRCd 4 documentation is located here.

Where can I get online support?

 * On the forums at https://forums.unrealircd.org/
 * On IRC at irc.unrealircd.org in #unreal-support - be sure to check the rules.
 * For bugs, feature suggestions, etc, see next

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 and feature requests. PLEASE report it there and don't report issues 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' Stop.

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.

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: admin { "Blah"; "Blahblah"; }; If you forget a ; or a }; it won't work!
 * 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:

See Configuration 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 Fix MAXCONNECTIONS 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: listen        1.2.3.4:6667;

Where 1.2.3.4 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, look at the error, and proceed from there.

UnrealIRCd starts fine but I get Connection refused
See

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 ./Config make 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: ).

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: )

The problem
If you see the following error or warning: [warning] *** IMPORTANT *** [warning] You have old examples in your spamfilter.conf. We suggest you to edit this file and replace the examples. Then this means that the example spamfilters in your conf\spamfilter.conf are outdated.

The solution
Please open the conf\spamfilter.conf file on your server and replace the contents (or at least the examples) with this: New spamfilter.conf

Or, if this is too much work for you, then you can also just remove all examples or not include spamfilter.conf from your unrealircd.conf. They are just (old) examples anyway.

More information
The information from above was about example spamfilters that shipped with UnrealIRCd. You may also have added custom spamfilters yourself. For those, if you use method posix then you need to change these to method regex. See the FAQ item POSIX spamfilters are deprecated for more information.

= Connecting = 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 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 to see if there are no errors.

Can you connect locally to your IRCd?
Try /server 127.0.0.1 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 1.2.3.4 6667 where 1.2.3.4 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.

Finally...
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 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 0.0.0.0:7000            0.0.0.0:*               LISTEN      7795/unrealircd tcp       0      0 0.0.0.0:6667            0.0.0.0:*               LISTEN      7795/unrealircd tcp       0      0 0.0.0.0:6668            0.0.0.0:*               LISTEN      7795/unrealircd tcp       0      0 0.0.0.0:6900            0.0.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 for errors.

Connect by IP
Try connecting to the IP of your IRC server first, rather than connect by hostname. So /server 1.2.3.4 6667 where 1.2.3.4 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 1.2.3.4), 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

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

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. Or: 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
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

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

*NIX
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 Or: 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; }; }; And /REHASH.

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

ERROR: Server is using an outdated SSL/TLS protocol or cipher
You may see the following error while linking servers: Server is using an outdated SSL/TLS protocol or cipher (set::outdated-tls-policy::server is 'deny')

What it means
This means the server is linking with an outdated SSL/TLS protocol or cipher. This is usually caused by using old server software, such as UnrealIRCd 3.2.x or some really really old OpenSSL (0.9.x).

Option 1: Upgrade your server software
Upgrade the server software of the server linking in, eg: upgrade UnrealIRCd from 3.2.x to 4.x, upgrade anope to 2.x, etc. As said, this should only be needed if you are running really old software that has not been upgraded for many years. It should never happen if you are linking two UnrealIRCd 4.x servers.

Option 2: Change the error into a warning
Alter the set::outdated-tls-policy, by putting this in your configuration file: set { outdated-tls-policy { server warn; }; }; And /REHASH.

How to use Let's Encrypt with UnrealIRCd?
See the dedicated article: Using Let's Encrypt with UnrealIRCd

WARNING: Bad ulines
If you get something like this: *** WARNING: Bad ulines! It seems your server is misconfigured: your ulines { } block is matching an UnrealIRCd server (maintest.test.net). This is not correct and will cause security issues. ULines should only be added for services! See https://www.unrealircd.org/docs/FAQ#bad-ulines

Then this means your server is misconfigured, as your ulines { } block is matching an UnrealIRCd server.

The ulines block lets you define certain servers as having extra abilities. This should only be used for servers such as services and should never match a regular UnrealIRCd server, otherwise you'll create security issues.

Things that happen when you have ULines for normal UnrealIRCd servers:
 * You will not see "far connects" as an IRCOp, even if you have.
 * Servers will be missing from  (if this is what you want, then use the hideserver module instead).
 * Flood protection such as channel mode +f is not 100% effective, as remote messages/joins/etc from ULines are not counted as flooding.
 * Channel mode +Z can be set on a channel even if there are insecure users on it.
 * Likely several other things that are not intended..

You should ONLY add ULines for:
 * Services, such as anope/atheme/PyLink/.., eg services.example.org

You should NEVER add ULines for:
 * UnrealIRCd servers, eg irc1.example.org, hub.example.org, ..

Authentication failed due to different password types on both sides of the link
While linking you may see the following error: Link denied for 'irc2.test.net' (Authentication failed due to different password types on both sides of the link) irc2.test.net[@192.168.X.Y.0]

You are seeing this error because you have mixed different password types (authentication types) at both sides of the link. They should be of the same type.

The solution
The fix is to use the same type on both sides. So you must check the configuration file on both servers:
 * Either use a plaintext password on BOTH sides of the link, so: password "somepassword";
 * Or use an SSL/TLS authentication type, like spkifp on BOTH sides of the link, such as: password "AHMYBevUxXKU/S3pdBSjXP4zi4VOetYQQVJXoNYiBR0=" { spkifp; };

Again, you cannot use a plaintext password (the first example) on side A of the link and an spkifp password (the second example) on side B of the link. Mixing is not permitted, which is what this error is about.

Authentication types are explained in more detail in the Authentication types article. Also, the Tutorial: Linking servers article should also be of help to show you standard linking practices.

= Running = 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:
 * User modes
 * Channel modes
 * Extended bans
 * User & Oper commands

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 change channel modes, 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.? And you expect to be able to change channel modes through /MODE even though you are not a channel operator?

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

I have k/g-lined myself!!
-sigh-

See 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 1.2.3.4 with your own IP (your own ip, not your server ip): except tkl { mask *@1.2.3.4; type all; }; except ban { mask 1.2.3.4; }; 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"; ..etc.. 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

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.

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: 4.3.2.1.in-addr.arpa domain name pointer test.domain. test.domain has address 1.2.3.4 In this example the host is correct and the nameserver seems to work fine. The user should get the host test.domain on IRC.
 * 1) host 1.2.3.4
 * 1) host test.domain

Another example: 4.3.2.1.in-addr.arpa domain name pointer somehost.domain. somehost.domain has address 5.5.5.5 In this case your own name server is fine, it is sending replies. But the information does not match: reverse dns resolved 1.2.3.4 to somehost.domain, however, when double checking this by resolving somehost.domain we got 5.5.5.5 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.
 * 1) host 1.2.3.4
 * 1) host somehost.domain

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 [@1.2.3.4.1234]: SSL_write: Internal OpenSSL error or protocol error Exiting ssl client [@1.2.3.4.1234]: 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)

Why
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!

Solution
Place the ban on the IP of the user (eg: *@194.92.91.90), 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.

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"; };

Option 3: Don't load the cloaking module
In UnrealIRCd 4 you can simply decide not to load the cloak module. So remove the line with loadmodule "cloak"; If you edit this in modules.default.conf then remember to re-apply these settings after each UnrealIRCd upgrade.

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.

How to prevent private messages?
Some people would like to block private messaging (PM) / direct messaging (DM). This is possibly with the usermodes/privdeaf module which provides usermode +D (deaf).

Individual users can set +D. Then nobody (except IRCOps) can message them: /mode yournick +D

You can also set +D by default on users via the configuration file. To do so, simply add D to your modes-on-connect: set { modes-on-connect "+iD"; };

If you do the above then individual users can still unset the mode (-D). If you don't want this, then you can restrict the mode: set { modes-on-connect "+iD"; restrict-usermodes "D"; }; Now your users can never private message anyone.

NOTE: IRCOps can still message users, they are exempt from this restrictions.

ERROR: Spamfilter type 'posix' is DEPRECATED
The "posix" spamfilter type is being phased out. If you get this warning or error then simply replace the type posix with regex. In most cases this should work fine.

IMPORTANT: If you are using the example spamfilter.conf shipped with UnrealIRCd, then you should probably read the following article instead: old examples in your spamfilter.conf.

Below are some examples:

Update your /SPAMFILTER command
If you were using this: /spamfilter add -posix cN gzline 1d No_advertising_please /come to irc\..+\..+/ Then you should now use this instead: /spamfilter add -regex cN gzline 1d No_advertising_please /come to irc\..+\..+/

Update your configuration file
If you have something like this in your configuration file: spamfilter { match-type posix; match "come to irc\\..+\\..+"; [..] Then this should be changed to: spamfilter { match-type regex; match "come to irc\\..+\\..+"; [..]

If you are really interested in reading more about this, there are some subtle differences between "posix" and "regex", which this page outlines (external link to PHP.net).

Background
In UnrealIRCd 4.x there are 3 spamfilter types:
 * The simple spamfilter type supports only * and ?, allowing very fast matching.
 * The posix type uses regular expressions through the TRE regex engine. TRE has not been maintained for many years now, the last release is from 2009 and it is now a defunct product. It contains various bugs that will never be fixed, including bugs that may freeze the IRCd completely. The only reason it still exists in 4.x is that it can run the spamfilters that were used in UnrealIRCd 3.2.x.
 * The regex type uses regular expressions using the PCRE2 engine. This regex engine is used by various big projects, including PHP, and is a fully supported product.

We are phasing out the TRE regex library from UnrealIRCd for the reasons mentioned above.

2019: Warn and error
Starting with UnrealIRCd 4.2.3:
 * You can no longer add new posix spamfilters via /SPAMFILTER. Existing ones will still work and run.
 * Spamfilters with match-type posix in the configuration file will raise a warning, but will still run.

In a later version:
 * Spamfilters with match-type posix in the configuration file will cause an error

2020: Complete removal of the "posix" spamfilter type
In 2020 the TRE regex library will be removed completely and all posix spamfilters will cease functioning. This will also mean that if you mix 3.2.x and 4.x networks at that time, then the 3.2.x spamfilters will no longer work on 4.x servers. This should not be a problem as all support for 3.2.x has been dropped on Januari 1, 2017.

Again, just to reiterate, you should simply use the "regex" spamfilter type instead. That one uses PCRE2 and will be fully supported.

Why do users on WEBIRC gateways not get user mode +z?
UnrealIRCd 4.0.17 and higher will no longer give user mode +z to users on WEBIRC gateways using SSL/TLS IRC, unless the WEBIRC gateway gives us some assurance that the client---webirc gateway connection is also secure (eg: using HTTPS). This fixes a security issue if the client--webirc connection is unencrypted and such (actually unencrypted) users are able to join +z channels, which should be for encrypted connections only.

Technically, this is the regular WEBIRC format: WEBIRC password gateway hostname ip This indicates a secure client connection (NEW): WEBIRC password gateway hostname ip :secure Naturally, WEBIRC gateways MUST NOT send the "secure" option if the client is using http or some other insecure protocol.

You should check with your WEBIRC vendor if they have an update available to fix this issue.

Why is sending many messages slow?
When you send a message to someone, or execute any other command, the first one(s) will be delivered instantly. However, once you start sending multiple messages in a short time interval, the messages will be slowed down.. with 1 message being delivered per 1 second, or even slower. This is by design. UnrealIRCd, like all IRC servers, employs a method called "fake lag" which is an important protection mechanism against flooding. UnrealIRCd can easily deliver tens of thousands of messages per second. So, without this protection, anyone would be able to flood at full speed, flooding the internet connection and CPU of both the server and all the recipients (eg: channel members).

IRCOps bypass this fake lag automatically, meaning they can - for example - write 200 messages in 1 second to a channel. Normal users can't do this, again, because this would be considered flooding.

Sometimes people need fake lag exemption to non-ircops. While we feel this is a bad idea, since it deactivates the most important safety/anti-flooding countermeasure in UnrealIRCd, we do offer an obscure option do this. If you are on *NIX you need to open include/config.h in the source directory (eg: ~/unrealircd-X.Y.Z) and search for FAKELAG_CONFIGURABLE. Change that //#undef to an #define and then recompile entire UnrealIRCd ('make clean; make; make install'). After this you have a new option in the class block, called class::options::nofakelag. By putting users in such a Class block you can exempt them from fakelag.

Again, we don't feel it's a good idea to disable fake lag. Most people who do this are either on a closed network with only a few friends (flooding ASCII art) or are using IRC behind the scenes as a communication mechanism for something other than chatting.

Fakelag exemption is not working
Often people think fakelag exemption is not working. Even if they are IRCOp their messages are still being throttled / slowed down. If you are an IRCOp and you are seeing your messages being throttled then this is NOT done by UnrealIRCd. It is your client. Yes, really it is your client. Almost every IRC client throttles sending of messages and commands on their side, including but not limited to mIRC, irssi, KVIRC, eggdrop, etc. They do this as a protection mechanism. How to disable this throttling depends on your client and in quite some cases it is even quite difficult to do so.

= Services =

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)

= Server upgrade issues =

Nesting comments
Previously in UnrealIRCd you could do something like this:: /* This is a comment * Lalala /* and this is a comment within a comment */ */ ... this was because each  required a   to terminate the comment. In other words 'comment nesting', if you had two  then you needed two. Starting with UnrealIRCd 4.2.1 we no longer do this and the rule is simply:  to start a comment and the first   ends the comment immediately: /* This is a comment * Lalala * you can type more but you can only close it once: */ Any attempt to use the old way will result in a Ignoring extra end comment warning. Why? The old style 'comment nesting' was non-standard, and confusing if you for example wrote

New operclass permissions
UnrealIRCd 4.2.1 and higher have a new operclass permission systems. When upgrading you may encounter the message: UnrealIRCd 4.2.1 and higher have a new operclass permissions system. and be referred to this FAQ item.

Default operclasses
About 99% of our users use the default operclasses and in such a case you should never see this error. Your operclass.default.conf should have been upgraded when installing UnrealIRCd 4.2.1 or higher. So if you are seeing an error in conf/operclass.default.conf then something went wrong with that.

However, if you are seeing an error related to a file that is NOT operclass.default.conf then see next section:

Modified operclasses
This is for the 1% of the users that like to customize their operclasses. The bad news is: we renamed about 50 of the permissions out of the 100+ so you will have to redo your changes. The good news is that the grouping and naming of permissions is now a lot better and more logical and we did this all for you! The new permissions are extensively documented at the Operclass permissions page.

Note that operclass::privileges is now called operclass::permissions. But you CANNOT just rename your block and be done with it!! For example all the override privilege is now called channel, and thus if you grant channel to low-privileged IRCOp's then they end up having a lot of privileges. Yes, really, you either need to use the default operclasses or have a serious look at the operclass permissions and not try to cut any corners!

= Other = 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.

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 the Modules forum.

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. On the left navigation plane of this wiki there is a section UnrealIRCd development, where you can find developer documentation (C API).

How to install 3rd party modules?
''Below are the general instructions on how to install 3rd party modules. If your 3rd party module already comes with it's own documentation then you should probably read that instead, especially if you encounter a problem.''

Acquiring modules
First you should get the module file. For Windows this will be a .dll file. For *NIX this will be a .c file.

If you don't know where to find 3rd party modules, see previous FAQ item: What are 3rd party modules and how do I get them?

Installation (Windows)
For Windows, you simply drop the .dll file in the directory called C:\Program Files (x86)\UnrealIRCd 4\modules\third and the installation is done. Note that you still need to load the module as well.

Note that the .dll file of the module you download must match your UnrealIRCd version. So after every UnrealIRCd version upgrade you will have to download a new .dll file from your 3rd party module supplier.

Installation (*NIX)
For Linux, FreeBSD, OS X, etc. you have put the .c module 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 make install

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

The benefit of this system (compared to old make custommodule) is 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 current UnrealIRCd installation to your new UnrealIRCd installation (based on your input of the first question in ./Config)

Loading
Now that your module is compiled you probably need to load it from your unrealircd.conf. This step is the same for all Operating Systems: loadmodule "third/nameofmodule";

Some modules may require you to do more than just that. For example, they may require you to set certain settings. It would be best to consult the documentation of the module for details.

How many servers do I need?
UnrealIRCd can cope fine with 5000-10000 users on a single server. Still, we recommend multiple servers and linking them together to form a single network. Here's why:
 * The server could be down due to a hardware problem or other problem at the data center (eg: power outage)
 * The server could be up but unavailable due to a network problem
 * Your server may need (security) upgrades that require a restart
 * Your server may be attacked

In short: having a single point of failure is never a good idea. The beauty of IRC is that you can link multiple servers, forming an IRC network that is resilient against attacks/outages.

If you have a small network you may get away with running just 1 server in the startup phase. After that we recommend running 2 or 3 servers.

The most common scenario is: The leafs connect to the hub, with a fallback option to connect to each other in case the hub is down.
 * 2 leafs: for your clients
 * 1 hub: with no users, no DNS record published (if nobody knows the IP it cannot be attacked)
 * Services linked to the hub (running on the same machine as the hub)