Driver FixRecommendedSound, Wi-Fi or graphics acting up? Check drivers firstFind missing or outdated drivers fast.Check DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix Now×
Skip to content
VGSources
Blog

How to Install ZNC, an IRC Bouncer, on a Linux VPS (Debian and Ubuntu)

Install ZNC on a Debian or Ubuntu VPS, keep IRC sessions online between client connections, secure the listener with TLS, configure networks, and troubleshoot systemd and authentication problems.
Length11 min Posted Quest giverVGSources Team
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

ZNC keeps your IRC connection online after your desktop or mobile client disconnects. Install it on a Debian or Ubuntu VPS, run it as an unprivileged service account, enable a TLS listener, add your IRC networks, and then connect every client to the VPS instead of directly to IRC. Your upstream sessions remain connected while you are offline, so channel history and messages that ZNC buffers are available when you reconnect.

This guide covers the distribution-package installation first, a source-build alternative, systemd operation, TLS, firewall decisions, client authentication, and the failure modes that most often prevent a working bouncer.

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What ZNC does on a VPS

ZNC is an IRC proxy daemon. It maintains a connection from the server to one or more IRC networks and presents a single endpoint to your IRC clients. When your client closes, ZNC stays connected upstream; when the client returns, it reconnects to the bouncer and resumes the session. Debian describes it as an advanced IRC bouncer that can maintain permanent connections to several networks and channels while appearing as one user to other IRC participants.

The VPS is useful because it has a persistent network connection and can run continuously, independent of your home computer, laptop sleep state, or phone battery. ZNC does not replace an IRC network account: it stores the network connection details, user credentials, channel list, and any configured SASL or password settings, then relays traffic between the network and your clients.

Choose a deployment model before installing

Approach Best for Maintenance Service model Upgrade path
Debian or Ubuntu package Most VPS installations Use the distribution package manager and security updates Packaged systemd unit or a per-user daemon Upgrade through normal distribution updates
Source build A custom install prefix or features not exposed by the package You maintain the build and installed files You must design and maintain the service definition Repeat the source build and preserve your configuration

For Ubuntu 24.04 LTS, the Ubuntu package page lists ZNC version 1.9.0-2build3. Debian’s stable package page lists version 1.9.1-2, with updates shown on that page. Those values are distribution-specific and can change as repositories move; check the package page for the release installed on your VPS before pinning a version or writing automation.

Prepare the VPS safely

Use a supported operating system and an administrative account

Use a supported Debian or Ubuntu release and keep an administrative account with SSH access. Do not plan to administer the machine solely through a newly opened ZNC port. Keep an existing SSH session open while changing firewall rules so a mistaken rule cannot lock you out.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Plan the hostname and certificate

Choose a DNS name that resolves to the VPS if clients will connect over the public Internet. A stable hostname makes certificate replacement and client configuration straightforward. Decide which TCP port will be the ZNC listener and document it before creating firewall rules.

Protect secrets

ZNC configuration contains IRC usernames, passwords, network settings, and possibly SASL credentials. Its private key is stored in the ZNC PEM file. Restrict file ownership to the service account, keep backups access-controlled, and never paste these files into a public issue or chat log.

Install ZNC from Debian or Ubuntu packages

  1. Refresh the package index:
    sudo apt update
  2. Install ZNC:
    sudo apt install znc
  3. Confirm that the binary is available:
    znc --version

The package route is the simplest choice for a VPS because dependencies, system integration, and future security updates come from the operating system. It also supplies Debian’s systemd unit, which starts ZNC in the foreground with a defined data directory.

Create the first configuration without running as root

ZNC’s first-run wizard is launched with znc --makeconf. The wizard asks for the listener, an administrator account, and initial network details. Do not run the daemon as root. The manual exposes --allow-root only as an override; using that override gives a network-facing service unnecessary access to the rest of the VPS.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Per-user configuration

For a personal, per-user daemon, switch to a dedicated non-root account and run:

znc --makeconf

Keep the resulting data directory in that account’s home directory and start ZNC as the same account. This model is convenient when one person owns the installation, but you must arrange your own systemd unit or another reliable startup method.

Debian’s packaged daemon

For Debian’s packaged service, generate the configuration in the service data directory before enabling systemd. The Debian instructions use the service account and an explicit data directory:

sudo -u _znc znc --makeconf --datadir=/var/lib/znc

After the wizard finishes, verify ownership of /var/lib/znc and its files. The packaged unit shown by Debian runs ZNC as user znc, while the configuration procedure uses _znc on Debian documentation. Account names and package revisions can differ, so inspect the installed unit and make the data directory readable and writable by the account named in that unit before starting the service.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Important wizard choices

  • Listen port: select an unused TCP port that you will permit through the VPS firewall.
  • SSL/TLS: enable it for Internet-facing clients unless a separate, deliberately configured TLS proxy terminates encryption.
  • Administrator username and password: use a long, unique password; this account can change networks, users, modules, and listeners.
  • Initial IRC network: enter the network hostname and port supplied by that network. Add a network password or SASL settings when the network requires them.
  • Channels: list channels ZNC should join automatically. Confirm the network’s channel names and registration requirements.

Enable and inspect the systemd service

Debian’s unit starts ZNC with --datadir=/var/lib/znc, runs it in the foreground, uses a dedicated service user, and orders startup after network.target. Enable it at boot and start it now:

sudo systemctl enable --now znc

Inspect the result immediately:

sudo systemctl status znc --no-pager
sudo journalctl -u znc -b --no-pager

A healthy status shows an active service. The journal is the authoritative place to find a malformed configuration, an unavailable port, an unreadable PEM file, or a permission failure. If the service exits, fix the first configuration error reported in the journal before repeatedly restarting it.

Configure TLS before exposing the listener

Understand the default certificate

ZNC supports SSL/TLS and can generate its certificate with:

znc --makepem

Debian’s default setup uses a self-signed certificate. A self-signed certificate encrypts traffic but does not provide a trusted identity: clients normally display a warning or require you to approve a fingerprint manually. For a public VPS hostname, replace it with a certificate issued by a publicly trusted certificate authority and keep the private key readable only by the ZNC service account.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Match the certificate to the listener

During --makeconf, enable SSL for the listener and select the certificate file used by that installation. If you replace the certificate later, preserve the expected filename and permissions or update the listener configuration to the new path. Restart ZNC after changing certificate files, then confirm the service journal contains no key or certificate parsing error.

Limit network exposure

Allow only the selected ZNC listener port through the VPS firewall, and allow SSH on its existing port. Do not expose an unencrypted listener merely because it is easier to test. If you temporarily open an additional diagnostic port, close it as soon as testing ends.

Add IRC networks and channels

You can configure ZNC through WebAdmin or through IRC commands. WebAdmin is useful for the initial setup; IRC commands are practical once a client is connected. Add each network separately and provide:

  • The upstream IRC hostname and port.
  • TLS for the upstream connection when the network supports or requires it.
  • The network password, NickServ password, or SASL mechanism required by that network.
  • Channels that ZNC should join automatically.
  • Any global or per-network modules you need, such as logging or playback behavior.

Keep upstream TLS and client-to-ZNC TLS conceptually separate. Encrypting the client connection does not automatically encrypt the connection from ZNC to the IRC network; configure the upstream network’s TLS options as well.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Adamanta 128GB (8x16GB) Server RAM Upgrade for IBM BladeCenter HS23 7875 DDR3 1600Mhz PC3-12800 ECC Registered VLP 2Rx4 CL11 1.5v
  • 128GB ( 16GBx8 ) 1600 MHz ECC Reg 240pin Standard Voltage Dual Rank VLP Memory Module.
  • Every module is backed by a lifetime limited warranty from the manufacturer. We always have hundreds in stock!
  • Free technical support from our experienced technicians.
  • Every single module is fully tested by the manufacturer and certified. These parts are not compatible with non-server computers.
  • Compatible with most major brand servers. Not sure if your server is compatible? Feel free to contact us. Our experienced technicians can verify if these parts will work for you.

Connect an IRC client to ZNC

  1. Set the IRC server address to the VPS hostname.
  2. Set the port to the ZNC listener port chosen during configuration.
  3. Enable TLS in the client when the listener is configured for SSL.
  4. Authenticate with the ZNC username and password. The official ZNC documentation shows the server-password form as username:password.
  5. After authentication, select or confirm the configured network. The client then reaches the upstream IRC network through ZNC.

Some clients provide separate username and password fields; others require the combined username:password value in the server-password field. Use the format your client expects, and do not confuse the ZNC password with the password for NickServ or the upstream network.

Verify persistence and playback

  1. Connect one client and join a test channel through ZNC.
  2. Disconnect the client without stopping the VPS service.
  3. Wait for another IRC user or a second client to send a test message.
  4. Reconnect to the same ZNC listener and network.
  5. Confirm that ZNC remains connected upstream and that its configured playback or buffer behavior presents the missed conversation according to your module settings.

If the upstream session disappears when your client disconnects, the client is probably connecting directly to IRC, the network was not added to ZNC, or the ZNC service itself stopped. Check the service status and network settings before changing client passwords.

Operate and troubleshoot ZNC

The service will not start

  • Read sudo journalctl -u znc -b --no-pager and correct the first reported error.
  • Check that the configured listener port is not already used by another process.
  • Check ownership and permissions for the data directory, configuration, and PEM file.
  • Confirm that the systemd unit’s service account matches the account that owns the files.
  • Validate the configuration with a foreground diagnostic rather than guessing.

Run a foreground diagnostic

The ZNC manual documents -f and -D for foreground and debug operation. Stop the systemd service first, then run the diagnostic as the service account with the same data directory used by systemd. This keeps error output in your terminal and avoids two ZNC processes competing for the listener port. Start systemd again after correcting the problem.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The client cannot connect

  • Confirm DNS resolves to the VPS address.
  • Confirm the client uses the ZNC listener port, not the upstream IRC port.
  • Confirm the VPS firewall and any provider-level firewall allow that port.
  • Check whether TLS is enabled on both sides and whether the client trusts the certificate.
  • Verify the ZNC username and password syntax, including the colon in username:password when the client uses a single server-password field.

ZNC connects but the IRC network rejects it

  • Recheck the upstream hostname and port.
  • Enable upstream TLS when required.
  • Re-enter the network password or SASL settings and verify the selected SASL mechanism.
  • Check whether the IRC account must be registered, identified, or allowlisted before joining channels.
  • Review ZNC’s network-specific status messages and the IRC network’s own connection policy.

Reload or rewrite configuration

The ZNC manual documents SIGUSR1 to rewrite the configuration and SIGHUP to reload it. Use signals only when you understand which file and service account are involved. For ordinary package-managed changes, a controlled service restart is easier to audit:

sudo systemctl restart znc
sudo systemctl status znc --no-pager
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Backups, updates, and routine maintenance

Back up the complete data directory

Back up the ZNC configuration, user data, network definitions, and znc.pem together. A configuration backup without the private key may require certificate replacement; a key backup without the configuration does not restore networks and users. Store backups encrypted and test that you can restore them to a private, non-public location.

Apply distribution updates

For package installations, use the normal Debian or Ubuntu update process and review changes to the ZNC package and service unit. Package versions and dependencies change over time; the Ubuntu 24.04 and Debian stable versions cited above are snapshots, not a promise that a future update will retain those exact revisions.

Best Value
Adamanta 32GB (2x16GB) Server RAM Upgrade for IBM BladeCenter HS23 7875 DDR3 1866Mhz PC3-14900 ECC Registered VLP 2Rx4 CL13 1.5v
  • 32GB ( 16GBx2 ) 1866 MHz ECC Reg 240pin Standard Voltage Dual Rank VLP Memory Module.
  • Every module is backed by a lifetime limited warranty from the manufacturer. We always have hundreds in stock!
  • Free technical support from our experienced technicians.
  • Every single module is fully tested by the manufacturer and certified. These parts are not compatible with non-server computers.
  • Compatible with most major brand servers. Not sure if your server is compatible? Feel free to contact us. Our experienced technicians can verify if these parts will work for you.

Review the listener and accounts

Remove unused ZNC users, networks, and modules. Rotate passwords after administrative access changes. Confirm that only the intended listener port is reachable from the Internet and that SSH remains restricted according to your VPS policy.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Build ZNC from source when the package is insufficient

A source build is appropriate when you need a custom installation prefix or a feature unavailable in your distribution package. It trades package-manager simplicity for responsibility: you must provide build dependencies, choose where files are installed, create a service definition, and rebuild when security or compatibility fixes are released.

Use the official CMake workflow

  1. Obtain the ZNC source tree for the version you intend to run.
  2. Create a separate build directory and enter it.
  3. Configure the build with CMake, selecting a prefix if required:
    cmake ..
  4. Compile it:
    make
  5. Install it into the chosen prefix:
    sudo make install

The exact CMake options and dependencies depend on the source version and enabled features. Keep the source tree, CMake configuration, compiler output, and install prefix recorded so the build can be reproduced. Do not overwrite a package-managed installation with an ad-hoc source install unless you have a rollback plan.

Run the source build as a dedicated account

Create or choose a non-root service account, place its data directory outside the source tree, and run znc --makeconf as that account. If you write a custom systemd unit, run ZNC in the foreground, set the same data directory explicitly, declare the service user, and order startup after networking. Test the unit with systemctl status and journalctl before enabling it at boot.

Package or source build: a practical decision

Question Choose the distribution package when… Choose a source build when…
Do you need the quickest reliable install? You want apt to install dependencies and integrate systemd. You can maintain build dependencies and service files yourself.
How will you receive updates? Through Debian or Ubuntu package updates. By tracking ZNC source releases and rebuilding the custom prefix.
How much control do you need? The packaged version and enabled modules meet your needs. You require a custom prefix, compile-time option, or newer source than the distribution offers.
Who owns the service? The distribution unit defines the service account and data directory. You define and document the account, paths, permissions, and unit.

Security checklist before handing the VPS to users

  • Run ZNC as a dedicated non-root account; never use --allow-root for routine operation.
  • Use TLS for client connections and replace the Debian self-signed certificate on a public hostname.
  • Permit only SSH and the required ZNC listener through the firewall.
  • Use unique ZNC administrator and user passwords.
  • Protect the configuration directory and znc.pem from other local users.
  • Configure upstream IRC TLS and authentication independently of client-to-ZNC TLS.
  • Back up configuration and key material securely, then test restoration.
  • Inspect systemd status and the journal after installation, upgrades, and certificate changes.
  • Apply operating-system and ZNC package updates promptly.

Version and documentation notes

ZNC documentation pages identify generated API documentation for version 1.9.8. That metadata describes the documentation build; it is not evidence that 1.9.8 is the newest release or the version installed by Debian or Ubuntu. Use the package metadata for your operating-system release and the ZNC documentation that matches the binary you actually deploy.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Frequently Asked Questions

Can I run ZNC as root on my VPS?

You should not. Create the configuration and run the daemon as a dedicated non-root account. ZNC exposes --allow-root only as an override, and a network-facing IRC proxy should not have root privileges.

Do I need a public DNS name for ZNC?

No, a client can connect to the VPS address, but a stable hostname is strongly preferable when you use a trusted TLS certificate. The certificate name should match the hostname clients use.

Why does my IRC client show a certificate warning?

Debian’s default ZNC certificate is self-signed. Replace it with a certificate from a publicly trusted authority for an Internet-facing hostname, or deliberately pin and verify the self-signed certificate on every client.

What is the difference between the ZNC password and the IRC network password?

The ZNC password authenticates your client to the bouncer, commonly as username:password in a server-password field. The network password or SASL credentials are separate settings that ZNC uses when it connects upstream.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Quick Recap

SaleBestseller No. 1
Bestseller No. 3
Bestseller No. 4
Adamanta 128GB (8x16GB) Server RAM Upgrade for IBM BladeCenter HS23 7875 DDR3 1600Mhz PC3-12800 ECC Registered VLP 2Rx4 CL11 1.5v
Adamanta 128GB (8x16GB) Server RAM Upgrade for IBM BladeCenter HS23 7875 DDR3 1600Mhz PC3-12800 ECC Registered VLP 2Rx4 CL11 1.5v
128GB ( 16GBx8 ) 1600 MHz ECC Reg 240pin Standard Voltage Dual Rank VLP Memory Module.; Free technical support from our experienced technicians.
$1,759.99
Bestseller No. 5
Adamanta 32GB (2x16GB) Server RAM Upgrade for IBM BladeCenter HS23 7875 DDR3 1866Mhz PC3-14900 ECC Registered VLP 2Rx4 CL13 1.5v
Adamanta 32GB (2x16GB) Server RAM Upgrade for IBM BladeCenter HS23 7875 DDR3 1866Mhz PC3-14900 ECC Registered VLP 2Rx4 CL13 1.5v
32GB ( 16GBx2 ) 1866 MHz ECC Reg 240pin Standard Voltage Dual Rank VLP Memory Module.; Free technical support from our experienced technicians.
$579.99

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More quests from Patch Notes

  1. How to Set Up a RedM (RDR2) Server in 2026: License Key, txAdmin and server.cfg, Step by StepBlog11min
  2. Best RedM (RDR2) Server Hosting in 2026: Comparing Four Hosts on Slots, Memory and PriceBlog10min
  3. How to Host a Mindustry Server in 2026: server-release.jar, Port 6567 and the Commands That MatterBlog7min
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.