Networking

Best Console Servers for a Homelab Rack: Opengear, Lantronix and a DIY Pi + ser2net Build

This post contains affiliate links. If you buy through them, we may earn a small commission at no extra cost to you. Learn more.

A rack that only has a network path into it is one bad config push away from a drive across town. A console server closes that gap: every switch, router and firewall console cable lands on one box, and that box stays reachable over SSH, a VPN or a cellular link when the data network is down. For a homelab, the best console server is usually smaller and cheaper than the enterprise catalogues suggest, and sometimes it is a Raspberry Pi running ser2net.

Original content from computingforgeeks.com - post 178516

We compared the Opengear CM8000 and CM8148-10G against the Lantronix SLC 8000, which leaves the price list on 31 December 2026. A used Cisco ISR with an HWIC-16A async card and a DIY Raspberry Pi 5 build with ser2net and conserver complete it. You’ll get the pinout trap that catches most first buyers, a cost per console port for each option and the exact ser2net YAML we ran. Everything in the DIY section was built in October 2026 on Debian 13 with ser2net 4.6.4, the same trixie base Raspberry Pi OS ships, so every config and error message below is real.

Our picks at a glance

Pick by how many consoles you have and whether the box has to survive the network it manages. The appliances win on cellular failover and support. The DIY build wins on cost, and you already know how to fix it:

  • Best appliance for a homelab rack, Opengear CM8000: 4 or 8 Cisco-straight RJ45 ports, half-rack width, under 24 W and an optional 5G modem. Sold through resellers on quote, not on Amazon (see the CM8000 range).
  • Best for a full rack of gear, Opengear CM8148-10G: 48 software-selectable RJ45 ports, 10G SFP+ uplinks and dual AC power, about $4,900 (check the live price).
  • Best renewed bargain, Lantronix SLC 8000: a modular 1U appliance at a fraction of its list price, about $535 renewed, with software updates promised to 2031 (check the live price).
  • Best DIY build, Raspberry Pi 5 with ser2net: a Pi 5 4GB, the official 27W supply and FTDI console cables, about $220 for four ports (check the Pi 5 price).
  • Cheapest per port, a used Cisco 2901 with an HWIC-16A: 16 async lines for about $320 in parts, the classic CCNA lab terminal server (check the HWIC-16A price).

If you have fewer than eight consoles and no cellular requirement, we’d build the Pi. The Opengear CM8000 earns its price only when the box must stay reachable through an outage of your own internet link. Its 5G model gives you a second path in, and a Pi on the same switch never has one.

How we picked and what we tested

We had none of the appliances on the bench. This guide keeps document facts and lab facts apart. Port counts, pinouts, power and lifecycle dates come from Opengear and Lantronix datasheets, the Opengear serial connection manual and the Lantronix product discontinuation notice. Cisco module support comes from Cisco’s own HWIC Q&A. Prices and stock come from Amazon’s catalog API on 27 October 2026, and every one of them moves, so treat them as a band.

The DIY tier is the part we built. A Debian 13 container stood in for the Pi’s operating system. Raspberry Pi OS is built on the same trixie release and installs the same ser2net 4.6.4 and conserver 8.2.7 packages. With no USB serial hardware attached, we used socat to create two pseudo-terminals named like USB console devices. A small login script answered on the far end of each, so ser2net and conserver saw a serial line with a device behind it. That is enough to prove the YAML, the port sharing behaviour, the error messages and the memory footprint. It cannot prove FTDI enumeration or udev naming on a real Pi, and we say so where it matters.

The console servers side by side

Read the pinout column before the price column. It decides whether the patch cables already in your drawer work or every port needs a rollover adapter.

OptionSerial portsPinoutUplinksOut-of-band pathStatusApprox. price
Opengear CM80004 or 8 RJ45Cisco straight (X2)2 combo RJ45/SFP5G on -C modelsCurrentReseller quote
Opengear CM8148-10G48 RJ45Software-selectable2 x 10G SFP+, 2 x 1GbE5G on -C modelsCurrentAbout $4,900
Lantronix SLC 80008 to 48 RJ45 (modules)Reversed, switchable per port2 GbE, 2 SFPModem module optionLast orders 2026-12-31About $535 renewed
Raspberry Pi 5 + ser2netOne per USB cableSet by the cable (rollover)1 GbEWhatever you addPi 5 built to 2036About $220 for 4
Cisco 2901 + HWIC-16A16 async linesOctal cable (rolled)2 GbE on the routerNone built inMostly usedAbout $320

Two rows look cheap for different reasons. The Lantronix is cheap because its maker has stopped selling it new, and the Cisco is cheap because a 2901 is a decade-old branch router that thousands of offices have retired. Neither is a bad buy, but both carry an end date that the Opengear units do not.

Opengear CM8000, the right-sized appliance

The CM8000 is the first Opengear we would call homelab-sized. It is half a rack unit wide, passively cooled and rated under 24 W, so it can live on a shelf in a 10-inch rack without a fan adding to the noise.

Opengear CM8004 compact console manager with RJ45 serial ports for a homelab rack
Opengear CM8000 series (CM8004 pictured): 4 or 8 Cisco-straight RJ45 serial ports in a half-width 1U case. Image: Opengear.

Its serial ports use Opengear’s X2 pinout, which the datasheet calls Cisco straight. A normal straight-through Ethernet patch cable runs from the CM8000 port to the RJ45 console port on a Cisco switch or any device with a Cisco-style console, with no rollover adapter in the path. The CM8004 has four of those ports and the CM8008 eight, both at 50 to 115,200 bps, and the two USB 3.0 ports can manage devices whose only console is USB.

The rest of the datasheet reads like a small Linux server, which is the point.

  • Compute: a 1.6 GHz quad-core Cortex-A53 with 4 GB of RAM and 32 GB of eMMC, enough for the Docker, Python and Ansible support Opengear advertises.
  • Network: two combo ports, each usable as RJ45 or SFP, so the management LAN and a separate uplink never share a cable.
  • Cellular: the CM8004-C and CM8008-C carry a 5G modem with two SIM trays, the only option in this guide with its own way in when your ISP is down.
  • Power: an external 12 V adapter plus a second DC input for redundancy, under 24 W standard and under 30 W with cellular.

Buy it when the rack runs something other people depend on, such as a home business or a family network you administer remotely, and you want a supported appliance with a five-year hardware warranty. Pass on it when your budget is a few hundred dollars: Opengear requires at least one year of Foundation Support bought with the unit, and pricing goes through resellers on quote. We found no Amazon listing for any CM8000 model on 27 October 2026.

Opengear CM8148-10G for a full rack

The CM8148-10G is what the CM8000 grows into once the console count passes eight. It is the 48-port member of the CM8100-10G family, and it is the one Opengear we could buy new from Amazon on the day we checked.

Opengear CM8148-10G 48-port console server front and rear
Opengear CM8148-10G: 48 RJ45 serial ports, 2 x 10G SFP+ and dual AC inputs. Image: Opengear.

Its serial ports are software-selectable between straight and rollover pinouts, which removes the adapter problem entirely when a rack mixes Cisco gear with older DB9-era equipment. Line rates go up to 230,400 bps, uplinks are two 10G SFP+ plus two 1GbE ports, and the unit takes dual AC power, so it can sit on both feeds of a dual-PDU rack. Compute is lighter than the CM8000 (a dual-core ARM with 2 GB of RAM and 32 GB of flash, plus TPM 2.0), but a console server spends its life moving characters, not crunching them.

This is the right buy for a lab that models a real data centre, say a CCNP or JNCIE study rack with a dozen switches and routers, or a homelab that doubles as a staging rack for client work. For anything under 16 consoles it is the wrong buy: at about $4,900 (check the live price) you pay roughly $100 per port and leave most of them empty. The 16-port CM8116-10G is the sensible middle, but on 27 October 2026 the only Amazon listing for it was the DC-powered DDC variant on lead time.

Lantronix SLC 8000, the renewed bargain with an end date

Lantronix announced the end of the SLC 8000 in its product change notice PCN 1045 of 1 October 2025, and that notice is the reason this pick exists. Renewed units now sell for about $535 against a list price in the thousands, and the support dates in the notice are long enough for a homelab to get years out of one.

Lantronix SLC 8000 modular console server front and rear
Lantronix SLC 8000: a modular 1U console manager with RJ45 and USB port modules. Image: Lantronix.

The dates are what you’re buying, so here they are as Lantronix published them.

  • Last order date: 31 December 2026, while stock lasts, after which new units stop.
  • Warranty support: until 31 December 2029, which covers the maker’s repair path, not a renewed seller’s own warranty.
  • Last software maintenance release: 31 December 2031, so security fixes keep coming for five more years.

The hardware is modular: 8, 16, 32 or 48 RJ45 ports built from swappable modules, USB modules for USB consoles, line rates from 300 to 230,400 bps, two gigabit ports, two SFP cages and dual AC supplies in 1U. Lantronix ships its RJ45 ports with a reversed pinout, so a Cisco console connects with a straight Ethernet cable, and each port can be switched in software if a device needs the other wiring. The catch with a renewed listing is that the module mix varies by unit and the Amazon title does not say how many ports this one has, so read the seller’s description or ask before you order.

We’d buy one for a lab that wants real appliance hardware (dual power, SFP uplinks, swappable port modules) without the Opengear support contract. Pass on it if the box has to face the internet for longer than 2031, or if you’d rather not plan a replacement within the life of the rack.

A Raspberry Pi 5 and ser2net build

A console server is a Linux box with serial ports and a network port. A Pi 5 with a handful of USB console cables is exactly that. ser2net turns each serial device into a TCP port, conserver puts logging and shared sessions on top, and SSH is the only thing exposed to the network.

Raspberry Pi 5 board used as a DIY ser2net console server
Raspberry Pi 5: the host for a ser2net and conserver console server, built to at least January 2036. Image: Raspberry Pi.

The parts list is short, and each item is there for a reason.

  • Raspberry Pi 5 4GB: ser2net and conserver together used about 20 MB of RAM in our lab, so 4 GB is already generous, about $127 from a reseller (check the live price).
  • Official 27W USB-C supply: the 5 A supply is what lets the Pi feed 1.6 A to USB devices instead of 600 mA, about $24 (check the live price).
  • FTDI USB to RJ45 console cables: one per device, Cable Matters’ rollover with an FTDI chip and an in-kernel driver, about $17 each (check the live price).
  • Optional multi-port hub: StarTech’s ICUSB2328I is an 8-port USB to DB9 RS-232 hub that Amazon lists as FTDI-based, about $175, but every RJ45 console then needs a DB9 to RJ45 rollover (check the live price).

Separate FTDI cables beat the hub for most racks, because each one is a rollover already and a dead cable takes out one console instead of eight. Our USB console cable comparison explains why FTDI is the chip to insist on, and what a counterfeit one prints in dmesg. Raspberry Pi raised Pi 5 prices in 2026 because of DRAM costs, and reseller listings sit above the official price, so compare a few sellers or reuse a Pi you already own. Our Pi 5 versus N150 mini PC comparison has the numbers if you’re deciding between the two as a small always-on box.

The design keeps every serial port off the network. ser2net listens only on 127.0.0.1, conserver connects to it locally, and you reach conserver by logging in to the Pi over SSH or over a WireGuard or Tailscale tunnel:

DIY console server architecture: admin laptop over SSH to a Raspberry Pi 5 running conserver and ser2net with USB console cables to a switch, router and firewall

The device names and baud rates on the diagram are examples: Cisco and most switches default to 9600 8N1, while many firewall appliances, including Netgate’s pfSense boxes, use 115200. Set each port’s rate in ser2net to whatever that device’s documentation says, because a wrong rate shows up as garbage characters rather than an error. What the Pi does not give you is a second network path. If the Pi hangs off the same switch and internet link as everything else, it shares their outage, so pair it with an LTE router or a network-independent IP-KVM path if remote recovery matters.

The ser2net and conserver setup we ran

Raspberry Pi OS and Debian 13 install the same packages from the trixie archive, so one command pulls everything. telnet is the client for a quick ser2net test; conserver-client provides the console command:

sudo apt update
sudo apt install -y ser2net conserver-server conserver-client telnet

Confirm the versions, since ser2net 3.x used a completely different one-line config format and old blog posts still show it:

ser2net -v
apt-cache policy ser2net conserver-server | grep -E "^[a-z]|Installed"

On trixie both packages come from the stable archive:

ser2net version 4.6.4
ser2net:
  Installed: 4.6.4-1
conserver-server:
  Installed: 8.2.7-3

Anything older than 4.x on your Pi means the image predates Debian 11, and none of the YAML below will load on it.

One ser2net connection per console

ser2net 4 reads YAML from /etc/ser2net.yaml, and the Debian package ships a sample there that you can replace. Open it:

sudo vim /etc/ser2net.yaml

This is the exact file from our lab, where the emulated devices were symlinks named after each console. On a real Pi, point each connector at a stable name under /dev/serial/by-path/ instead of a numbered ttyUSB device. The numbered names follow USB enumeration order and can swap after a reboot.

%YAML 1.1
---
define: &banner "\r\n== oob-rack-01 serial console, device \\d ==\r\n"

connection: &sw01
    accepter: telnet(rfc2217),tcp,127.0.0.1,2001
    enable: on
    options:
      banner: *banner
      kickolduser: true
      max-connections: 1
      trace-both: /var/log/ser2net/sw01.log
      trace-timestamp: true
    connector: serialdev,/dev/ttyUSB-sw01,9600n81,local

connection: &rtr01
    accepter: telnet(rfc2217),tcp,127.0.0.1,2002
    enable: on
    options:
      banner: *banner
      kickolduser: false
      max-connections: 1
      trace-both: /var/log/ser2net/rtr01.log
      trace-timestamp: true
    connector: serialdev,/dev/ttyUSB-rtr01,9600n81,local

Each key earns its place in a console server.

  • accepter: telnet with RFC 2217 on 127.0.0.1, so nothing on the LAN can open a raw console port and only local clients such as conserver connect.
  • connector: the device, its speed and framing (9600n81), and local, which tells ser2net to ignore modem control lines that console cables do not wire.
  • kickolduser and max-connections: one user per console; true hands the port to the newest connection, false refuses it. We set them differently on purpose to show both.
  • trace-both: a per-port log of everything sent and received, the closest a homelab gets to the keystroke logging appliances sell.

Create the trace directory, then restart the service so it reads the new file:

sudo mkdir -p /var/log/ser2net
sudo systemctl restart ser2net
sudo ss -ltnp | grep ser2net

Both listeners should be on the loopback address only. If you see 0.0.0.0 here, the accepter line is missing its address and every console is open to the LAN:

LISTEN 0      5          127.0.0.1:2002      0.0.0.0:*    users:(("ser2net",pid=1470,fd=5))
LISTEN 0      5          127.0.0.1:2001      0.0.0.0:*    users:(("ser2net",pid=1470,fd=4))

Our container had no systemd, so we started ser2net by hand with ser2net -n -d -c /etc/ser2net.yaml. Every start also printed Unable to start mdns: Out of memory, which came from the container lacking an mDNS daemon, not from a memory problem. A quick telnet to the first port proves the path end to end. In the session below, the first banner line is ser2net’s and the second comes from the device side of our emulated port:

ser2net 4.6.4 telnet session reaching a device console login on Debian 13

Note what \d expanded to in the banner: the whole connector string, serialdev,/dev/ttyUSB-sw01,9600n81,local, not just the device name. That is useful for confirming the speed at a glance, and it is a reason to give each connection a readable device path.

Port already in use, and what kickolduser changes

We held one session open on each port and connected a second client. On port 2001 (kickolduser: true) the first client was dropped and the second got the prompt, and the trace log recorded the handover:

2026/10/27 13:00:37 CLOSE netcon (kicked off, new user is coming
)
2026/10/27 13:00:37 CLOSE port (All users disconnected)
2026/10/27 13:00:37 OPEN (ipv4,127.0.0.1,42656)

On port 2002 (kickolduser: false) the second client was refused with Port already in use. Which one you want depends on who uses the rack. On a single-admin homelab, kicking is kinder, because a forgotten session on another laptop otherwise locks you out of the console you need at 2 a.m. With two people working, refusing is safer, and conserver (below) solves the sharing properly.

No connector given in connection

YAML indentation is the failure you will actually hit. We moved options: two spaces out of line in a test file and ser2net exited with status 1:

/root/bad2.yaml:4(column 2): No connector given in connection

The message names the connection, not the real culprit, so check the indentation of every key above the line it reports. A misspelt option is gentler and easier to miss: kick-old-user: true produced Unknown config item: kick-old-user=true and ser2net kept running with the default behaviour. Read the journal after every config change (journalctl -u ser2net) rather than trusting that a running service means a correct file.

Device open failure: Value or file not found

ser2net does not check that a device exists when it starts. It opens the serial port only when a client connects, so a connection pointing at an unplugged cable starts cleanly and then fails on first use. Our test connection to /dev/ttyUSB-missing did exactly that:

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Device open failure: Value or file not found
Connection closed by foreign host.

On a real Pi this is the message you get after a cable is unplugged or after /dev/ttyUSB0 and /dev/ttyUSB1 swap places, which is the strongest argument for the by-path names. A second ser2net started against the same file fails differently, with Unable to startup network port sw01: Address already in use repeated in a retry loop.

conserver on top for logs and shared sessions

ser2net gives you ports, and conserver turns them into a console server. It keeps a connection open to every console all the time, writes a log per console even when nobody is attached, and lets two admins watch the same session with one holding write access. Point it at the ser2net ports:

sudo vim /etc/conserver/conserver.cf

The file we ran defines a default log path, gives full access to local users and declares the two consoles as network hosts:

config * {
}
default full {
	rw *;
}
default * {
	logfile /var/log/conserver/&.log;
	timestamp "";
	include full;
}
console sw01 {
	master localhost;
	type host;
	host 127.0.0.1;
	port 2001;
}
console rtr01 {
	master localhost;
	type host;
	host 127.0.0.1;
	port 2002;
}
access * {
	allowed 127.0.0.1;
	trusted 127.0.0.1;
}

Installing conserver-server creates an empty /etc/conserver/conserver.passwd owned by the conservr user, and you can leave it that way. Ours held the single line root:, which lets root in with no conserver password; that is acceptable only because conserver trusts 127.0.0.1 alone and SSH is the real gate. Check the syntax, then enable and start the packaged service. Debian installs conserver-server disabled, so a plain restart would start it today and leave it off after the next reboot:

sudo conserver -S -C /etc/conserver/conserver.cf -P /etc/conserver/conserver.passwd
sudo systemctl enable --now conserver-server

Debian’s packaged unit runs conserver as the unprivileged conservr user and reads its options from /etc/conserver/server.conf, which the installer writes with port 3109, the client’s default. Our container had no systemd, so we started the daemon by hand as root, where it used the compiled-in port 782 and listened on every address. That is why the capture below passes -p 782. With the packaged service on a Pi, a plain console -u reaches it. To keep the listener on loopback, run sudo dpkg-reconfigure conserver-server and set the listen address to 127.0.0.1, which becomes the daemon’s -M option, then run sudo systemctl restart conserver-server, because the reconfigure only rewrites the options file. The log line ERROR: Could not acquire GSS-API credentials only means Kerberos is not configured, and -u lists every console with its state:

ser2net Port already in use message and conserver console list on Debian 13

Both consoles report up and -x shows each mapped to its ser2net port. Attach with console -l root sw01 (add -p 782 -M localhost if you run the daemon by hand as we did) and leave with Ctrl+E c .. The -l root picks the conserver.passwd entry, and the trusted line for 127.0.0.1 is what lets it in without a password. In our run, the session printed [Enter `^Ec?' for help], passed our commands through to the device and logged them to /var/log/conserver/sw01.log. In memory terms the whole stack is tiny: ser2net used 4,040 kB of RSS for two ports and each of conserver’s two processes about 8.1 MB, measured on x86, so expect similar numbers on the Pi’s ARM build.

What decides a console server purchase

Most console server regret comes from four details that spec sheets bury. Check them against the gear in your rack before comparing prices:

  • Pinout: Opengear’s manual calls X2 “Cisco straight” and X1 “Cisco reversed”. A Cisco-straight port takes a normal patch cable to a Cisco console; anything else needs a rollover cable or adapter per port, which is how a cheap 48-port bargain turns into 48 adapters.
  • USB consoles: newer switches, firewalls and servers often expose a USB console instead of RJ45. The CM8000’s USB 3.0 ports, the SLC 8000’s USB modules and the Pi all handle them; an HWIC-16A does not.
  • A second way in: a console server on the same internet link as the rack fails with it. Cellular (Opengear -C models) or a separate LTE router is what makes it out-of-band rather than just tidy.
  • Lifecycle: a console server holds the keys to everything else, so its own security patches matter. Check the maker’s end-of-sale and software dates, as the Lantronix notice makes plain.

Port count is the fifth decision, and the easiest to get wrong in the expensive direction. Count consoles today, add the next two devices you expect to buy, and stop there. A full 8-port box is a better buy than a mostly empty 48-port one, because you can always add a second small unit later. If your rack is a 10-inch mini rack, the half-width CM8000 or a Pi on a shelf fits where a 19-inch 1U appliance does not.

The used Cisco terminal server route

CCNA and CCNP students have built terminal servers from old Cisco routers for years, and the parts are cheaper than ever. Cisco’s HWIC Q&A lists the HWIC-16A for the 2800, 2900, 3800 and 3900 series in HWIC and EHWIC slots, and says it is not supported on the 1800 or 1900, which rules out the smallest ISRs people try first. A 2901 is the cheapest router that takes it:

  • Cisco 2901/K9: the host router, about $125 on Amazon with scarce stock (check the live price).
  • HWIC-16A: 16 asynchronous lines on one card, about $55 renewed (check the live price).
  • Two CAB-HD8-ASYNC octal cables: each carries eight lines from the card’s 68-pin connector to RJ45 plugs; the listing is a third-party cable, not Cisco-branded, about $70 each (check the live price).

The result is 16 consoles you reach with reverse telnet from the router’s own CLI, which is exactly the workflow the CCNA labs expect. Its limits are real, though: no USB consoles, telnet rather than SSH to the lines unless you configure it, a fan that is loud for a living room, and a router sold mostly used or as old stock now. It suits a dedicated study rack better than a homelab that also runs your house.

The cost per console port

Dividing the price by the ports you’ll actually use is the fairest way to compare boxes this different. The figures use the Amazon prices from 27 October 2026, rounded, and assume every port is filled:

BuildPortsApprox. totalPer portWhat the money buys
Cisco 2901 + HWIC-16A + 2 octal cables16$320$20Lots of RJ45 lines, no USB, no vendor support
Pi 5 4GB + 27W supply + 4 FTDI cables4$220$55SSH-only access, USB and RJ45 consoles, your own patches
Pi 5 4GB + 27W supply + 8 FTDI cables8$290$36Same ports, but the Pi 5 has four USB ports, so add a powered hub (not in the total)
Opengear CM8148-10G48$4,900$10210G uplinks, dual AC, current firmware and a support contract

The Lantronix and the CM8000 are missing on purpose. The renewed SLC 8000’s port count depends on the modules in the unit you get, and the CM8000 has no public price. The Pi’s per-port cost falls with every cable you add, but the eight-cable row leaves out the powered hub, since the Pi 5 caps USB peripherals at 1.6 A in total even on the 27W supply. In practice we’d put a Pi with FTDI cables on a home rack of up to eight devices and a used 2901 in a Cisco study rack. An Opengear makes sense once the rack carries something a family or client cannot be without. If what you need is the screen and keyboard of a server rather than a serial line, a rack console KVM is the tool for that job, and the two sit happily in the same rack.

Keep reading

Free CCNA 200-301 Practice Questions with Answers Networking Free CCNA 200-301 Practice Questions with Answers Configure Samba File Share on Debian 13 / 12 Debian Configure Samba File Share on Debian 13 / 12 WireGuard VPN Setup: Ubuntu 26.04/24.04, Debian 13, Rocky 10 Debian WireGuard VPN Setup: Ubuntu 26.04/24.04, Debian 13, Rocky 10 Homelab and Sysadmin Gifts by Budget: $25, $50, $100 and $250+ Networking Homelab and Sysadmin Gifts by Budget: $25, $50, $100 and $250+ Black Friday Homelab Deals: GPUs, Mini PCs, NAS and Networking Networking Black Friday Homelab Deals: GPUs, Mini PCs, NAS and Networking Configure Static IP on Rocky Linux 10 and AlmaLinux 10 AlmaLinux Configure Static IP on Rocky Linux 10 and AlmaLinux 10

Leave a Comment

Press ESC to close