feat: Updates to network article.
All checks were successful
CI / release (push) Successful in 6m9s

This commit is contained in:
2025-04-08 13:36:39 -04:00
parent d0383b0d4e
commit a53e808aec
10 changed files with 122 additions and 50 deletions

View File

@@ -20,7 +20,7 @@ func baseLayout(
return [ return [
.documentType("html"), .documentType("html"),
html(lang: "en-US") { html(lang: "en-US") {
generateHeader(pageTitle, extraHeader) generateHead(pageTitle, extraHeader)
body(class: "text-white text-lg pb-5 font-avenir \(section.rawValue)") { body(class: "text-white text-lg pb-5 font-avenir \(section.rawValue)") {
siteHeader(section) siteHeader(section)
@@ -80,19 +80,16 @@ private func footer(_ rssLink: String) -> Node {
"(" "("
%a( %a(
class: "[&:hover]:border-b border-green-400", class: "[&:hover]:border-b border-green-400",
href: "https://github.com/m-housh/mhoush.com", href: "https://git.housh.dev/homelab/docs",
rel: "nofollow", rel: "nofollow",
target: "_blank" target: "_blank"
) { "source" } ) { "source" }
%")." %")."
} }
script(src: "https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js")
script(src: "https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js")
script(src: "https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js")
} }
} }
private func generateHeader(_ pageTitle: String, _ extraHeader: NodeConvertible) -> Node { private func generateHead(_ pageTitle: String, _ extraHeader: NodeConvertible) -> Node {
head { head {
meta(charset: "utf-8") meta(charset: "utf-8")
meta(content: "#0e1112", name: "theme-color", customAttributes: ["media": "(prefers-color-scheme: dark)"]) meta(content: "#0e1112", name: "theme-color", customAttributes: ["media": "(prefers-color-scheme: dark)"])
@@ -128,8 +125,6 @@ private func generateHeader(_ pageTitle: String, _ extraHeader: NodeConvertible)
link(href: "/static/output.css", rel: "stylesheet") link(href: "/static/output.css", rel: "stylesheet")
link(href: "/articles/feed.xml", rel: "alternate", title: SiteMetadata.name, type: "application/rss+xml") link(href: "/articles/feed.xml", rel: "alternate", title: SiteMetadata.name, type: "application/rss+xml")
extraHeader extraHeader
// script(src: "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js")
//
Node.raw(""" Node.raw("""
<script src="/pagefind/pagefind-ui.js"></script> <script src="/pagefind/pagefind-ui.js"></script>
<link href="/pagefind/pagefind-ui.css" rel="stylesheet"> <link href="/pagefind/pagefind-ui.css" rel="stylesheet">

View File

@@ -46,12 +46,15 @@ extension HomeLink: NodeConvertible {
} }
private func internalLink() -> Node { private func internalLink() -> Node {
a(class: "bg-orange-400 border-2 border-green-600 p-4 rounded-lg [&:hover]:bg-orange-500", href: href) { a(
class: "bg-orange-400 border-2 border-green-600 p-4 rounded-lg [&:hover]:bg-orange-500",
href: href
) {
div(class: "flex text-3xl") { div(class: "flex text-3xl") {
i(class: "mt-1", customAttributes: ["data-lucide": icon]) i(class: "mt-1", customAttributes: ["data-lucide": icon])
p(class: "ps-2") { title } span(class: "ps-2") { title }
} }
p(class: "text-sm") { description } span(class: "text-sm") { description }
} }
} }
@@ -64,9 +67,9 @@ extension HomeLink: NodeConvertible {
) { ) {
div(class: "flex text-3xl") { div(class: "flex text-3xl") {
i(class: "mt-1", customAttributes: ["data-lucide": icon]) i(class: "mt-1", customAttributes: ["data-lucide": icon])
p(class: "ps-2") { title } span(class: "ps-2") { title }
} }
p(class: "text-sm") { description } span(class: "text-sm") { description }
} }
} }
} }

View File

@@ -37,14 +37,7 @@ func renderHome(body: String) -> Node {
"Articles", "Articles",
icon: "newspaper", icon: "newspaper",
href: "/articles/", href: "/articles/",
description: "Click here to view articles." description: "Click here to view all articles."
)
HomeLink.external(
"Service Monitor",
icon: "heart-pulse",
href: "https://uptime.housh.dev/status/housh-dev",
description: "Click here to view the service status."
) )
HomeLink.external( HomeLink.external(
@@ -55,17 +48,10 @@ func renderHome(body: String) -> Node {
) )
HomeLink.external( HomeLink.external(
"Excalidraw", "Service Monitor",
icon: "pen-tool", icon: "heart-pulse",
href: "https://draw.housh.dev", href: "https://uptime.housh.dev/status/housh-dev",
description: "A drawing utility." description: "Server and services uptime status page."
)
HomeLink.external(
"Gitea",
icon: "git-branch",
href: "https://git.housh.dev/explore/repos",
description: "Explore source code."
) )
HomeLink.external( HomeLink.external(
@@ -75,12 +61,33 @@ func renderHome(body: String) -> Node {
description: "Network management." description: "Network management."
) )
HomeLink.external(
"Excalidraw",
icon: "pen-tool",
href: "https://draw.housh.dev",
description: "A drawing utility that runs locally in your browser."
)
HomeLink.external(
"Gitea",
icon: "git-branch",
href: "https://git.housh.dev/explore/repos",
description: "Explore source code."
)
HomeLink.external( HomeLink.external(
"Legacy Purchase Orders", "Legacy Purchase Orders",
icon: "file-archive", icon: "file-archive",
href: "https://legach-po.housh.dev", href: "https://legach-po.housh.dev",
description: "Legacy purchase order application (pre-2025)." description: "Legacy purchase order application (pre-2025)."
) )
HomeLink.external(
"HVAC Toolbox",
icon: "hammer",
href: "https://hvac-toolbox.com",
description: "A collection of HVAC calculators."
)
} }
} }
script(src: "https://unpkg.com/lucide@latest") script(src: "https://unpkg.com/lucide@latest")

View File

@@ -1,8 +1,9 @@
--- ---
date: 2025-4-02 date: 2025-4-02
updated: 2025-4-03 updated: 2025-4-08
author: "Michael Housh" author: "Michael Housh"
tags: network, infrastructure tags: network, infrastructure
primaryTag: infrastructure
--- ---
# Networking # Networking
@@ -10,9 +11,31 @@ tags: network, infrastructure
All of the networking setup is done through [unifi](https://unifi.ui.com). The All of the networking setup is done through [unifi](https://unifi.ui.com). The
network is segmented into several different networks to isolate communication. network is segmented into several different networks to isolate communication.
> Note: If you are unable to connect to the unifi management console linked
> above or if the internet is down, you can connect directly with the management
> console at `http://192.168.1.1`.
## Backup
The network management console get's backed up automatically each week (Sundays
@2:30am), however you can manually backup the server by going to
`Settings -> Control Plane -> Backups`. This is where you can also restore from
a backup if needed.
## Networks ## Networks
An overview of the networks that are setup. A brief overview of the networks that are setup, their uses, and why they are
needed.
| Network | VLAN ID | Subnet | Usable IP's |
| --------- | ------- | ---------------- | ----------- |
| Default | 1 | 192.168.1.0/24 | 249 |
| Main | 10 | 192.168.10.0/24 | 205 |
| Phones | 20 | 192.168.20.0/28 | 13 |
| IoT | 30 | 192.168.30.0/24 | 249 |
| housh.dev | 50 | 192.168.50.0/28 | 12 |
| Guest | 60 | 192.168.60.0/26 | 61 |
| Mangement | 254 | 192.168.254.0/24 | 249 |
### Default Network ### Default Network
@@ -21,8 +44,8 @@ unifi networking gear. It is also generally the network a new device will go if
it is plugged into an ethernet cable / switch. For this reason this network is it is plugged into an ethernet cable / switch. For this reason this network is
isolated from communicating with other networks. isolated from communicating with other networks.
New devices that end up on this network should be configured to the appropriate New devices that end up on this network should be configured / moved to the
network by a network administrator. appropriate network by a network administrator.
### Management Network ### Management Network
@@ -33,26 +56,32 @@ someone gained access to the network.
### Main Network ### Main Network
This is where the majority of "trusted" devices should be placed on the network, This is where the majority of "trusted" devices should be placed on the network,
such as computers, phones, etc. This is also the network when people join the such as computers, mobile phones, etc. This is also the network used when people
non-guest WiFi. join the non-guest WiFi.
This network has the ability to communicate with most all other networks. This network has the ability to communicate with most all other networks,
therefore only trusted devices should be allowed on this network.
### housh.dev Network ### housh.dev Network
This is the network where all the servers are placed. This network is primarily This is the network where the majority of servers are placed. This network is
setup to allow "responses", but not initiate communication with other networks. primarily setup to allow "responses", but not allowed to initiate communication
This is to help reduce the risk if one of the servers gets compromised, an with other networks. This is to help reduce the risk if one of the servers gets
attacker should not easily be able to transition to another network. compromised, an attacker should not easily be able to transition to another
network.
### Phones Network ### Phones Network
This is the network where all the VoIP phones are on. It is considered This is the network where all the VoIP phones are on. It is considered
"untrusted" and should not be able to communicate with any other network. "untrusted" and should not be able to communicate with any other network.
This is merely considered "untrusted" because there's no reason for anything on
this network to try and reach anything else. It should only handle phone
traffic.
### IoT Network ### IoT Network
This is the network where all IoT (internet of things) devices are. This is This is the network where IoT (internet of things) devices are. This is
considered an "untrusted" network and communications with other networks are considered an "untrusted" network and communications with other networks are
minimized to what is actually needed to work. This network is not able to minimized to what is actually needed to work. This network is not able to
communicate with the internet, because these devices are made by so many communicate with the internet, because these devices are made by so many
@@ -64,6 +93,24 @@ such as home-pods and apple-tv because there are network challenges with these
devices operating properly when placed on the IoT network, such as airdrop and devices operating properly when placed on the IoT network, such as airdrop and
screen casting (which may be resolved in the future). screen casting (which may be resolved in the future).
### Guest Network
This is the network where guests are placed, it is considered "untrusted" and
should only be able to access the internet. Devices on this network are also not
able to communicate with other devices attached to the guest network.
## Wifi Networks
The following wifi networks are setup and broadcast via the access points. All
networks require a password to use. Ask Michael for passwords if you need them.
| Wifi SSID | Network |
| ------------------------ | ----------------------- |
| Center of Monroe | Main |
| Jarvis | IoT |
| Center of Monroe - Guest | Guest |
| Housh Home Energy | Main (VPN traffic only) |
## Firewall ## Firewall
The unifi management console is what handles firewall rules for the networks. It The unifi management console is what handles firewall rules for the networks. It
@@ -74,6 +121,11 @@ is accessed via `Settings -> Security -> Firewall` on the management console.
This is where settings are made to either allow or deny traffic on the networks This is where settings are made to either allow or deny traffic on the networks
from communicating with other networks or the internet. from communicating with other networks or the internet.
> Note: Be aware that making changes here may break things / render networks or
> services to be unusable. It is recommended to make a backup prior to making
> changes. One of the biggest things to _not_ do is block traffic from
> `Main -> Gateway`, most everything else done is recoverable.
## DNS ## DNS
DNS is what translates IP addresses to domain names (i.e. DNS is what translates IP addresses to domain names (i.e.

View File

@@ -1,6 +1,8 @@
--- ---
date: 2025-04-04 date: 2025-04-04
updated: 2025-04-08
tags: servers, infrastructure, homelab tags: servers, infrastructure, homelab
primaryTag: infrastructure
--- ---
# Servers # Servers
@@ -15,7 +17,9 @@ services based on that. Meaning services that I run primarily for personal items
are running on servers that I own, while services that are supporting business are running on servers that I own, while services that are supporting business
functionality run on the companies server. functionality run on the companies server.
All of the servers run the services in `Docker Containers`. All of the servers run the services in `Docker Containers`, which allows for
them to be isolated from the host system (server) and makes them more easily
portable between servers if needed.
There is also a `Raspberry-Pi` that runs `Home Assitant`, which is another one There is also a `Raspberry-Pi` that runs `Home Assitant`, which is another one
of my personal devices. of my personal devices.
@@ -27,10 +31,14 @@ of my personal devices.
| rogue-mini | roguemini.housh.dev | 192.168.50.4 | | rogue-mini | roguemini.housh.dev | 192.168.50.4 |
| home-assistant | homeassitant.housh.dev | 192.168.30.5 | | home-assistant | homeassitant.housh.dev | 192.168.30.5 |
| NAS | nas.housh.dev | 192.168.10.105 | | NAS | nas.housh.dev | 192.168.10.105 |
| Backup NAS | nas.hhe | 192.168.1.10 |
You can read more about the network setup You can read more about the network setup
[here](https://docs.housh.dev/articles/2025/network/). [here](https://docs.housh.dev/articles/2025/network/).
> Note: The backup NAS is used to backup our primary NAS, for now it is not easy
> to use, and will be used for camera / security footage in the future.
## Containers ## Containers
Services run inside of docker containers that are spread between several Services run inside of docker containers that are spread between several
@@ -44,7 +52,8 @@ is hosted on an [internal git server](https://git.housh.dev/homelab). The
configuration will consist of a docker compose file (generally named configuration will consist of a docker compose file (generally named
`compose.yaml`). There is often an `example.env` file for the service, these are `compose.yaml`). There is often an `example.env` file for the service, these are
examples for documentation and variable naming purposes. The environment examples for documentation and variable naming purposes. The environment
variables themselves are setup in the container orchestrator for the service. variables themselves are setup in the container orchestrator for the service to
prevent sensitive data being "leaked".
### Container orchestrator ### Container orchestrator
@@ -99,7 +108,7 @@ access may be implemented in the future. If access is required outside of our
network then using our VPN is required. The VPN setup is done automatically via network then using our VPN is required. The VPN setup is done automatically via
unifi (our network router). unifi (our network router).
`DNS` is what translates domain names to `IP` addresses, currently the public `DNS` is what translates domain names to `IP addresses`, currently the public
DNS records are handled by cloudflare. Cloudflare is used to validate that we DNS records are handled by cloudflare. Cloudflare is used to validate that we
own the `housh.dev` domain name in order for Let's Encrypt to issue free `TLS` own the `housh.dev` domain name in order for Let's Encrypt to issue free `TLS`
certificates. TLS is used to encrypt traffic over the web (`https://`). certificates. TLS is used to encrypt traffic over the web (`https://`).
@@ -107,4 +116,7 @@ certificates. TLS is used to encrypt traffic over the web (`https://`).
Internal DNS records are setup in our unifi router `Settings -> Routing -> DNS`. Internal DNS records are setup in our unifi router `Settings -> Routing -> DNS`.
The internal DNS is fairly simple and just needs to map to servers appropriately The internal DNS is fairly simple and just needs to map to servers appropriately
(primarily just to the primary caddy instance, which then handles all the (primarily just to the primary caddy instance, which then handles all the
routing to the individual service that is requested). routing to the individual service that is requested). All devices that connect
to the network will be able to use the internal DNS to resolve host names
properly (meaning it all should just work automatically without any knowledge
from the user).

View File

@@ -1,6 +1,7 @@
--- ---
date: 2025-04-07 date: 2025-04-07
tags: phones, infrastructure, unifi tags: phones, infrastructure, unifi
primaryTag: infrastructure
--- ---
# Phone System # Phone System

View File

@@ -1,6 +1,7 @@
--- ---
date: 2025-04-07 date: 2025-04-07
tags: how-to, backups, nas tags: how-to, backups, nas
primaryTag: how-to
--- ---
# Time Machine Backups # Time Machine Backups

View File

@@ -1,6 +1,7 @@
--- ---
date: 2025-04-08 date: 2025-04-08
tags: how-to, nas tags: how-to, nas
primaryTag: how-to
--- ---
# Link Sharing # Link Sharing

View File

@@ -151,7 +151,7 @@ article a:hover {
} }
article code { article code {
@apply bg-violet-600; @apply text-white bg-violet-600 px-2;
} }
article ol { article ol {

File diff suppressed because one or more lines are too long