Files
schleppe-lab/_posts/2023-05-19-kvm.markdown
Kevin Midboe 5278b4bfd8 Align code block to new color scheme
Codeblock with line numbers change format of copy code button, updated.
2024-02-18 13:14:57 +01:00

260 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
layout: post
title: Network KVM for ALL of my Servers!
date: 2023-05-19 15:46:15 +0200
updated: 2023-05-19 15:52:00 +0200
tags: networking virtualization
---
Since I use a lot of repurposed computers as servers, I dont have many with IPMI / remote access built in. Usually I can configure them remotely through SSH or their web UI, but sometimes things go wrong and its nice to have remote console access. Enter, PiKVM, a project to build a networked KVM switch with a Raspberry Pi. Unfortunately, I have a more than one server, and building a PiKVM for every one gets expensive, so Im combining it with an 8 port rack mount KVM switch so I can remotely view and control all of the servers in my rack.
The KVM Im using supports network control (but its not a network KVM, it can just switch inputs over the network) and Ive configured that in this video.
# Contents
- [Networking Configuration](#networking-configuration)
- [PiKVM Configuration](#pikvm-configuration)
# Networking Configuration
The network configuration goes in `/etc/systemd/network/eth0.network`. Make sure to run `rw` to make the filesystem writeable before editing it, and `ro` when you are done.
```
[Match]
Name=eth0
[Network]
DHCP=yes
DNSSEC=no
# Use DHCP for primary address
# Add a static address in a /31 for the TESmart KVM
Address=192.168.1.11/31
[DHCP]
# Use same IP by forcing to use MAC address for clientID
ClientIdentifier=mac
# https://github.com/pikvm/pikvm/issues/583
RouteMetric=10
```
# PiKVM Configuration
The PiKVM configuration override goes in `/etc/kvmd/override.yaml`. Make sure to run `rw` to make the filesystem writeable before editing it, and `ro` when you are done. Im using the default IP of the Tesmart and a /31 subnet to avoid changing it, but if you do change the IP youd change it here as well.
{% highlight ruby %}
def print_hi(name)
puts "Hi, #{name}"
end
print_hi('Tom')
#=> prints 'Hi, Tom' to STDOUT.
{% endhighlight %}
<figure id="highlight-figure">
<figcaption>File: folderName/fileName.rb</figcaption>
{% highlight ruby %}
def print_hi(name)
puts "Hi, #{name}"
end
print_hi('Tom')
#=> prints 'Hi, Tom' to STDOUT.
{% endhighlight %}
</figure>
<figure id="highlight-figure">
<figcaption>File: folderName/fileName.rb</figcaption>
{% highlight yaml linenos %}
kvmd:
gpio:
drivers:
tes:
type: tesmart
host: 192.168.1.10
port: 5000
scheme:
server0_led:
driver: tes
pin: 0
mode: input
server0_switch:
driver: tes
pin: 0
mode: output
switch: false
server1_led:
driver: tes
pin: 1
mode: input
server1_switch:
driver: tes
pin: 1
mode: output
switch: false
server2_led:
driver: tes
pin: 2
mode: input
server2_switch:
driver: tes
pin: 2
mode: output
switch: false
server3_led:
driver: tes
pin: 3
mode: input
server3_switch:
driver: tes
pin: 3
mode: output
switch: false
server4_led:
driver: tes
pin: 4
mode: input
server4_switch:
driver: tes
pin: 4
mode: output
switch: false
server5_led:
driver: tes
pin: 5
mode: input
server5_switch:
driver: tes
pin: 5
mode: output
switch: false
server6_led:
driver: tes
pin: 6
mode: input
server6_switch:
driver: tes
pin: 6
mode: output
switch: false
server7_led:
driver: tes
pin: 7
mode: input
server7_switch:
driver: tes
pin: 7
mode: output
switch: false
view:
table:
- ["TESMART Switch"]
- []
- ["#Terra NAS", server0_led, server0_switch|Switch]
- ["#Megalab", server1_led, server1_switch|Switch]
- ["#PVE1", server2_led, server2_switch|Switch]
- ["#PVE2", server3_led, server3_switch|Switch]
- ["#PVE3", server4_led, server4_switch|Switch]
- ["#Minilab", server5_led, server5_switch|Switch]
- ["#OPNsense", server6_led, server6_switch|Switch]
- ["#Iridium", server7_led, server7_switch|Switch]
{% endhighlight %}
</figure>
{% highlight yaml linenos %}
kvmd:
gpio:
drivers:
tes:
type: tesmart
host: 192.168.1.10
port: 5000
scheme:
server0_led:
driver: tes
pin: 0
mode: input
server0_switch:
driver: tes
pin: 0
mode: output
switch: false
server1_led:
driver: tes
pin: 1
mode: input
server1_switch:
driver: tes
pin: 1
mode: output
switch: false
server2_led:
driver: tes
pin: 2
mode: input
server2_switch:
driver: tes
pin: 2
mode: output
switch: false
server3_led:
driver: tes
pin: 3
mode: input
server3_switch:
driver: tes
pin: 3
mode: output
switch: false
server4_led:
driver: tes
pin: 4
mode: input
server4_switch:
driver: tes
pin: 4
mode: output
switch: false
server5_led:
driver: tes
pin: 5
mode: input
server5_switch:
driver: tes
pin: 5
mode: output
switch: false
server6_led:
driver: tes
pin: 6
mode: input
server6_switch:
driver: tes
pin: 6
mode: output
switch: false
server7_led:
driver: tes
pin: 7
mode: input
server7_switch:
driver: tes
pin: 7
mode: output
switch: false
view:
table:
- ["TESMART Switch"]
- []
- ["#Terra NAS", server0_led, server0_switch|Switch]
- ["#Megalab", server1_led, server1_switch|Switch]
- ["#PVE1", server2_led, server2_switch|Switch]
- ["#PVE2", server3_led, server3_switch|Switch]
- ["#PVE3", server4_led, server4_switch|Switch]
- ["#Minilab", server5_led, server5_switch|Switch]
- ["#OPNsense", server6_led, server6_switch|Switch]
- ["#Iridium", server7_led, server7_switch|Switch]
{% endhighlight %}