blog.notmyidea.org/content/code/2023-09-27-2.md
2023-09-27 14:51:28 +02:00

3 KiB

title tag
Setting up a IRC Bouncer with ZNC 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.

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, and the IRC client I use is Weechat.

So, that's what I did:

Installation of ZNC

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

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:

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 :

/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 and the Debian page on ZNC