Build your own Cisco Terminal Server with Raspberry Pi

I have been working in Computer networking for more than 8 years now and the biggest fear I still harbor is losing access to a router by misconfiguration. During my first stint with Service Provider networks, losing access to a router or switch would mean running to the Data Centre and taking console to a router and revert the changes and this because we didn’t have console servers in our Data Centre. Our Data centre was just across the NOC so it would take less than a minute to reach the equipments. During my second stint, the Data centre was the largest in India and going to the Data Centre would take minimum of 15 minutes from the NOC. Although we had a management network connecting all networked equipments, this did not help when a router or switch was malfunctioning and the only option left was taking console. My third stint with Service Provider network had no option of running to the router as many of the PoPs were international. Few of the larger PoPs had Terminal Servers but not all had this. A question would run through anyones mind as to why someone would not provision a console server on a remote site? The primary reason is the cost. The second reason is that it does not make business sense to have a console server for a couple of routers.

Why Raspberry Pi?

Raspberry Pi is a small computer costing just $35 and yet fully functional. Kids from 8 till adults are making good use of it as it is very versatile. We are using a Raspberry Pi for the following reasons

  • It is much cheaper as compared to a Cisco Terminal Server
  • The connectivity options are much varied with Wired, Wireless, 3G, etc
  • Expansion is easy as you can provision a USB Hub with higher number of ports
  • Cisco Mini USB Consoles can be used
  • The Raspberry Pi can be used for other services like MRTG, monitoring, etc
  • Takes very less power and spaceRaspberry Pi in hand

Requirements

  • Raspberry Pi Model B
  • Powered USB Hub with as many ports as you want console cables
  • USB Mini console
  • USB to Serial Cable
  • Cisco Console Cable

Cisco Console CableMini USB CableUSB to serial cable

The Setup

I am beginning with the assumption that your Raspberry Pi is already running Debian Wheezy. We will connect the USB Hub to the USB Port with the provided USB cable. We must use a powered USB Hub because the Pi is not able to drive the USB Hub and all the connected devices. If we do not use a powered hub, the devices keep on disconnecting. In this example, I am using 3 USB Mini Cable and 2 USB to Serial Cables connected with Cisco Console cable.DSC_0008DSC_0007

The Configuration

As soon as you connect the USB Hub and all the consoles, it should be detected and you can see it via the command lsusb.

lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 008: ID 05a6:0009 Cisco Systems, Inc.
Bus 001 Device 009: ID 05a6:0009 Cisco Systems, Inc.
Bus 001 Device 010: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 005: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 006: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 007: ID 05a6:0009 Cisco Systems, Inc.

Every Serial device detected will form a TTY port. You can see the Serial Port to TTY mapping by the command

dmesg |grep tty

[ 0.000000] console [tty1] enabled
[ 0.584224] dev:f1: ttyAMA0 at MMIO 0x20201000 (irq = 83) is a PL011 rev3
[ 0.908060] console [ttyAMA0] enabled
[ 6.283591] usb 1-1.2.2: pl2303 converter now attached to ttyUSB0
[ 6.449796] usb 1-1.2.1.3: pl2303 converter now attached to ttyUSB1
[ 7.232831] cdc_acm 1-1.2.3:1.0: ttyACM0: USB ACM device
[ 7.338627] cdc_acm 1-1.2.1.1:1.0: ttyACM1: USB ACM device
[ 7.405930] cdc_acm 1-1.2.1.2:1.0: ttyACM2: USB ACM device

It is best to keep the cables untouched after connecting it because we will be doing manual mapping of TCP port with TTY. If you remove the console and put it back, there is a very good possibility that the TTY will be different.

In order to connect to the routers via Terminal, we will require Kermit on the Pi. You can install Kermit with the following commands

sudo apt-get install ckermit

After installation of Kermit, you can connect to individual routers via the following command

kermit -l /dev/ttyUSB0 where ttyUSB0 is obtained from the output of the dmesg |grep tty command.

Enter “connect” and you will be prompted to enter “set carrier-watch off”. Enter “set carrier-watch off” and again enter “connect” and you will be taken to the router console. You can disconnect the router by the following key combinations ctrl / u

In order to redirect TCP connections to the serial, we will require Ser2net. You can install ser2net via the following commands

wget http://downloads.sourceforge.net/project/ser2net/ser2net/ser2net-2.8.tar.gz

The version keeps on changing so you will have to go to sourceforge and check the latest version and change the name in the above command accordingly

Complete the installation with the following commands

tar xvfz ser2net-2.8.tar.gz
cd ser2net-2.8
./configure && make && sudo make install

Go to the folder where you have installed the ser2net and edit ser2net.conf

sudo nano ser2net.conf

Add the following lines to the ser2net.conf file.

9001:telnet:0:/dev/ttyUSB0:9600 8DATABITS NONE 1STOPBIT banner1
9002:telnet:0:/dev/ttyUSB1:9600 8DATABITS NONE 1STOPBIT banner1
9003:telnet:0:/dev/ttyACM0:9600 8DATABITS NONE 1STOPBIT banner1
9004:telnet:0:/dev/ttyACM1:9600 8DATABITS NONE 1STOPBIT banner1
9005:telnet:0:/dev/ttyACM2:9600 8DATABITS NONE 1STOPBIT banner1
9006:telnet:0:/dev/ttyACM3:9600 8DATABITS NONE 1STOPBIT banner1

Keep a set of ports for the console connections. I have taken ports 9001 onwards.

Note that my port numbers and TTYs will be different from yours as it depends upon the console cables and types you have used and what your Pi has detected.

A very good feature with this setup is that you can log every command you enter to the console. After you have added the above lines, repeat the above lines as mentioned below

TRACEFILE:tr1:/var/log/ser2net/tr-\p-\Y-\M-\D-\H:\i:\s.\U

9001:telnet:0:/dev/ttyUSB0:9600 8DATABITS NONE 1STOPBIT banner1 tr=tr1 timestamp
9002:telnet:0:/dev/ttyUSB1:9600 8DATABITS NONE 1STOPBIT banner1 tr=tr1 timestamp
9003:telnet:0:/dev/ttyACM0:9600 8DATABITS NONE 1STOPBIT banner1 tr=tr1 timestamp
9004:telnet:0:/dev/ttyACM1:9600 8DATABITS NONE 1STOPBIT banner1 tr=tr1 timestamp
9005:telnet:0:/dev/ttyACM2:9600 8DATABITS NONE 1STOPBIT banner1 tr=tr1 timestamp
9006:telnet:0:/dev/ttyACM3:9600 8DATABITS NONE 1STOPBIT banner1 tr=tr1 timestamp

The logs will be saved at /var/log/

In order to run the setup, enter

/usr/local/sbin/ser2net -c /home/pi/ser2net-2.9.1/ser2net.conf -n

You can now take console to your router by telnetting at ip address of Pi at the specific port number

Example telnet 1.1.1.1 9001 where 1.1.1.1 is ip address of Pi and 9001 is the port of device connected to USB0

In order to make the setup persistent, you will have to edit rc.local file.

sudo nano /etc/rc.local

Enter /usr/local/sbin/ser2net -c /home/pi/ser2net-2.9.1/ser2net.conf -n at the end before exit 0

Again the folder naming might be different in your case depending on the version of ser2net

You can try consoling all the routers at the same time to check whether everything is working as expected.

I hope my post has been helpful in your life but the only guide which can help you in the hereafter is the Qur’an. You can download the English translation of the Qur’an here.

1 thought on “Build your own Cisco Terminal Server with Raspberry Pi

  1. I got the error message as below;
    pi@raspberrypi /home/ser2net-2.8 $ sudo apt-get install ckermit
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    You might want to run ‘apt-get -f install’ to correct these:
    The following packages have unmet dependencies:
    teamviewer9:i386 : Depends: libc6:i386 (>= 2.4) but it is not installable
    Depends: libgcc1:i386 but it is not installable
    Depends: libasound2:i386 but it is not installable
    Depends: libfreetype6:i386 but it is not installable
    Depends: zlib1g:i386 but it is not installable
    Depends: libsm6:i386 but it is not installable
    Depends: libxdamage1:i386 but it is not installable
    Depends: libxext6:i386 but it is not installable
    Depends: libxfixes3:i386 but it is not installable
    Depends: libxrandr2:i386 but it is not installable
    Depends: libxrender1:i386 but it is not installable
    Depends: libxtst6:i386 but it is not installable
    Recommends: ttf-liberation:i386 but it is not installable or
    fonts-liberation:i386 but it is not installable
    E: Unmet dependencies. Try ‘apt-get -f install’ with no packages (or specify a solution).

    Do you have any idea for this issue?

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.