---
title: Setting up a IRC Bouncer with ZNC
tags: ZNC, Weechat, IRC
---

It's been a while since I've used IRC, but I needed to connect to it today to discuss around [Peewee](https://docs.peewee-orm.com).

The main issue with IRC is that you need to be connected to see the answer, and to get the context of the conversation. Unless... you set up a bouncer.

The bouncer is named [ZNC](https://znc.in), and the IRC client I use is [Weechat](https://weechat.org).

So, that's what I did:

## Installation of ZNC

```bash
apt install znc
sudo -u _znc /usr/bin/znc --datadir=/var/lib/znc --makeconf
sudo systemctl enable znc
```

You can answer the questions asked by `--makeconf`, it will generate you a configuration file like this (stored in `/var/lib/znc/configurations/znc.conf`):

```conf
AnonIPLimit = 10
AuthOnlyViaModule = false
ConfigWriteDelay = 0
ConnectDelay = 5
HideVersion = false
LoadModule = webadmin
MaxBufferSize = 500
ProtectWebSessions = true
SSLCertFile = /var/lib/znc/znc.pem
SSLDHParamFile = /var/lib/znc/znc.pem
SSLKeyFile = /var/lib/znc/znc.pem
ServerThrottle = 30
Version = 1.8.2

<Listener listener0>
	AllowIRC = true
	AllowWeb = true
	IPv4 = true
	IPv6 = true
	Port = 6697
	SSL = true
	URIPrefix = /
</Listener>

<User alexis>
	Admin = true
	Allow = *
	AltNick = alexis_
	AppendTimestamp = false
	AuthOnlyViaModule = false
	AutoClearChanBuffer = true
	AutoClearQueryBuffer = true
	BindHost = skate.notmyidea.org
	ChanBufferSize = 50
	DenyLoadMod = false
	DenySetBindHost = false
	Ident = alexis
	JoinTries = 10
	LoadModule = chansaver
	LoadModule = controlpanel
	MaxJoins = 0
	MaxNetworks = 1
	MaxQueryBuffers = 50
	MultiClients = true
	Nick = alexis
	NoTrafficTimeout = 180
	PrependTimestamp = true
	QueryBufferSize = 50
	QuitMsg = See you :)
	RealName = N/A
	StatusPrefix = *
	TimestampFormat = [%H:%M:%S]

	<Network liberachat>
		FloodBurst = 9
		FloodRate = 2.00
		IRCConnectEnabled = true
		JoinDelay = 0
		LoadModule = simple_away
		RealName = N/A
		Server = irc.libera.chat +6697
		TrustAllCerts = false
		TrustPKI = true

		<Chan #peewee>
		</Chan>
	</Network>

	<Pass password>
		Hash = REDACTED
		Method = SHA256
		Salt = REDACTED
	</Pass>
</User>
```

You can access a web interface on the exposed port. I had to make a change in my Firefox configuration, in `about:config`, set `network.security.ports.banned.override` to `6697`, otherwise, Firefox prevents you from connecting to these ports (which might actually be a good idea).

## Weechat configuration

Now, to use this in weechat, here are some useful commands. First, get the fingerprint of the SSL certificate generated on your server:

```bash
cat /var/log/znc/znc.pem | openssl x509 -sha512 -fingerprint -noout | tr -d ':' | tr 'A-Z' 'a-z' | cut -d = -f 2
```

Then, in weechat :

```weechat
/server add znc host/6697 -tls -username=<username> -password=<yourpass> -autoconnect
/set irc.server.znc.tls_fingerprint <fingerprint-goes-here>
/connect znc
```

And you should be all set!

Resources : [The ZNC Wiki on Weechat](https://wiki.znc.in/Weechat) and the [Debian page on ZNC](https://wiki.debian.org/ZNC)
