mirror of
https://github.com/KevinMidboe/schleppe-lab.git
synced 2025-10-29 01:30:39 +00:00
260 lines
7.7 KiB
Markdown
260 lines
7.7 KiB
Markdown
---
|
||
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 don’t 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 it’s 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 I’m 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 I’m using supports network control (but it’s not a network KVM, it can just switch inputs over the network) and I’ve 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. I’m using the default IP of the Tesmart and a /31 subnet to avoid changing it, but if you do change the IP you’d 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 %}
|
||
|