diff --git a/content/post/appgate-sdp-on-arch-linux.md b/content/post/appgate-sdp-on-arch-linux/index.md similarity index 100% rename from content/post/appgate-sdp-on-arch-linux.md rename to content/post/appgate-sdp-on-arch-linux/index.md diff --git a/content/post/automatically-rotating-aws-keys.md b/content/post/automatically-rotating-aws-keys/index.md similarity index 100% rename from content/post/automatically-rotating-aws-keys.md rename to content/post/automatically-rotating-aws-keys/index.md diff --git a/content/post/backing-up-gmail-with-synology.md b/content/post/backing-up-gmail-with-synology/index.md similarity index 96% rename from content/post/backing-up-gmail-with-synology.md rename to content/post/backing-up-gmail-with-synology/index.md index 0e05fcc6..ee4100e6 100644 --- a/content/post/backing-up-gmail-with-synology.md +++ b/content/post/backing-up-gmail-with-synology/index.md @@ -48,7 +48,7 @@ Synology's MailPlus seems to be a good candidate for backing up this data. By en Installing MailPlus can be done from the Package Center: -![image](/images/backing-up-gmail-with-synology/install-mailplus-server.png) +![image](install-mailplus-server.png) Next, I went into **Synology MailPlus Server** and on the left, clicked on **Account** and ensured my user was marked as active. @@ -60,7 +60,7 @@ I made sure to set the `Fetch Range` to `All` in order to get all emails from th After this, mail started coming in. -![image](/images/backing-up-gmail-with-synology/mail-plus-incoming-mail.png) +![image](mail-plus-incoming-mail.png) After fetching 19 years worth of emails, I tried searching for some emails. It only took a few seconds to search through ~50K emails, which is a relief if I ever did have to search for something important. diff --git a/public/images/backing-up-gmail-with-synology/install-mailplus-server.png b/content/post/backing-up-gmail-with-synology/install-mailplus-server.png similarity index 100% rename from public/images/backing-up-gmail-with-synology/install-mailplus-server.png rename to content/post/backing-up-gmail-with-synology/install-mailplus-server.png diff --git a/public/images/backing-up-gmail-with-synology/mail-plus-incoming-mail.png b/content/post/backing-up-gmail-with-synology/mail-plus-incoming-mail.png similarity index 100% rename from public/images/backing-up-gmail-with-synology/mail-plus-incoming-mail.png rename to content/post/backing-up-gmail-with-synology/mail-plus-incoming-mail.png diff --git a/content/post/enhancing-pfsense-with-services.md b/content/post/enhancing-pfsense-with-services.md deleted file mode 100644 index bd21e92b..00000000 --- a/content/post/enhancing-pfsense-with-services.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "Enhancing Pfsense With Services" -date: 2023-03-25T18:37:08-04:00 -lastmod: 2023-03-25T18:37:08-04:00 -draft: true -keywords: [] -description: "" -tags: [] -categories: [] -author: "" - -# You can also close(false) or open(true) something for this content. -# P.S. comment can only be closed -comment: false -toc: false -autoCollapseToc: false -postMetaInFooter: false -hiddenFromHomePage: false -# You can also define another contentCopyright. e.g. contentCopyright: "This is another copyright." -contentCopyright: false -reward: false -mathjax: false -mathjaxEnableSingleDollar: false - -flowchartDiagrams: - enable: false - options: "" - -sequenceDiagrams: - enable: false - options: "" - ---- - - diff --git a/content/post/replacing-docker-with-podman-on-macos.md b/content/post/replacing-docker-with-podman-on-macos/index.md similarity index 100% rename from content/post/replacing-docker-with-podman-on-macos.md rename to content/post/replacing-docker-with-podman-on-macos/index.md diff --git a/content/post/running-k3s-in-lxc-on-proxmox.md b/content/post/running-k3s-in-lxc-on-proxmox/index.md similarity index 100% rename from content/post/running-k3s-in-lxc-on-proxmox.md rename to content/post/running-k3s-in-lxc-on-proxmox/index.md diff --git a/public/images/setting-up-gitea-actions-with-tailscale/gitea-runners.png b/content/post/setting-up-gitea-actions-with-tailscale/gitea-runners.png similarity index 100% rename from public/images/setting-up-gitea-actions-with-tailscale/gitea-runners.png rename to content/post/setting-up-gitea-actions-with-tailscale/gitea-runners.png diff --git a/content/post/setting-up-gitea-actions-with-tailscale/index.md b/content/post/setting-up-gitea-actions-with-tailscale/index.md index c279438e..14979fa5 100644 --- a/content/post/setting-up-gitea-actions-with-tailscale/index.md +++ b/content/post/setting-up-gitea-actions-with-tailscale/index.md @@ -43,7 +43,7 @@ In this post I'll go through the process of setting up Gitea Actions and [Tailsc [Gitea Actions](https://docs.gitea.com/usage/actions/overview) have made it into the [1.19.0 release](https://blog.gitea.com/release-of-1.19.0/). This feature had been in an experimental state up until [1.21.0](https://blog.gitea.com/release-of-1.21.0/) and is now enabled by default 🎉. -So what are they? If you've ever used GitHub Actions (and if you're reading this, I imagine you have), they essentially allow you to run github workflows on gitea. Workflows between gitea and github are not completely interopable, but a lot of the same workflow syntax is already compatible on gitea. You can find a list of [unsupported workflows syntax](https://docs.gitea.com/usage/actions/comparison#unsupported-workflows-syntax). +So what are they? If you've ever used GitHub Actions (and if you're reading this, I imagine you have), these will look familiar. Gitea Actions essentially enable the ability to run github workflows on gitea. Workflows between gitea and github are not completely interopable, but a lot of the same workflow syntax is already compatible on gitea. You can find a documented list of [unsupported workflows syntax](https://docs.gitea.com/usage/actions/comparison#unsupported-workflows-syntax). Actions work by using a [custom fork](https://gitea.com/gitea/act) of [nekos/act](https://github.com/nektos/act). Workflows run in a new container for every job. If you specify an action such as 'actions/checkout@v3', it defaults to downloading the scripts from github.com. To avoid internet egress, you could always clone the required actions to your local gitea instance. @@ -136,7 +136,7 @@ http: Something to consider is whether or not you want to use ssh with git. One method of getting this to work with containers is to use [ssh container passthrough](https://docs.gitea.com/installation/install-with-docker#ssh-container-passthrough). I decided to keep it simple and not use ssh, since communicating over https is perfectly fine for my use case. -After adding the above configuration, running `docker compose up -d` should be enough to get your instance up and running. It will be accessible at [https://gitea.my-tailnet-name.ts.net](https://gitea.my-tailnet-name.ts.net) from within your tailnet. +After adding the above configuration, running `docker compose up -d` should be enough to get an instance up and running. It will be accessible at [https://gitea.my-tailnet-name.ts.net](https://gitea.my-tailnet-name.ts.net) from within your tailnet. ## Connecting a Runner @@ -144,7 +144,7 @@ I installed the runner by [following the docs](https://docs.gitea.com/usage/acti After registering this runner and starting the daemon, it appeared in `/admin/actions/runners`: -![image](/images/setting-up-gitea-actions-with-tailscale/gitea-runners.png) +![image](gitea-runners.png) ## Running a workflow @@ -201,6 +201,6 @@ And voilà: ## Conclusion -Gitea Actions are fast and the resource footprint is minimal. My gitea instance is currently using around 250mb of memory and a small fraction of a single cpu core (and the runner is using a similar amount of resources). This is impressive since many alternatives tend to require substantionally more resources (ahem, gitlab). It certainly doesn't hurt that the codebase is largely written in go. +Gitea Actions are fast and the resource footprint is minimal. My gitea instance is currently using around 250mb of memory and a small fraction of a single cpu core (and the runner is using a similar amount of resources). This is impressive since many alternatives tend to require substantionally more resources (ahem, gitlab). It likely helps that the codebase is largely written in go. By combining gitea with the networking marvel that is tailscale, running workflows becomes simple and fun. Whether you are working on a team or working alone, this setup ensures that your workflows are securely accessible from anywhere with an internet connection. diff --git a/content/post/using-aks-and-socks-to-connect-to-a-private-azure-db.md b/content/post/using-aks-and-socks-to-connect-to-a-private-azure-db/index.md similarity index 100% rename from content/post/using-aks-and-socks-to-connect-to-a-private-azure-db.md rename to content/post/using-aks-and-socks-to-connect-to-a-private-azure-db/index.md diff --git a/content/post/virtualizing-a-router-with-pfsense.md b/content/post/virtualizing-a-router-with-pfsense/index.md similarity index 93% rename from content/post/virtualizing-a-router-with-pfsense.md rename to content/post/virtualizing-a-router-with-pfsense/index.md index dd2c6d35..2f7bf359 100644 --- a/content/post/virtualizing-a-router-with-pfsense.md +++ b/content/post/virtualizing-a-router-with-pfsense/index.md @@ -56,7 +56,7 @@ The following configuration will: In the switch's web interface, I went to `VLAN` and then `802.1Q`, and then clicked on `VLAN Configuration`. I configured the ports to look like this: -![vlan-config](/images/virtualizing-a-router-with-pfsense/netgear-vlan-configuration.png) +![vlan-config](netgear-vlan-configuration.png) Note that the `VLAN Identifier Setting` has been setup already with two VLANs (1 and 10). More VLANs can be created (i.e. to isolate IoT devices), but 2 VLANs is all we need for the initial setup of a router. @@ -64,15 +64,15 @@ To replicate the above configuration, add a new VLAN ID 10 (1 should exist by de Next, go into `VLAN Membership` and configure VLAN 1's port membership to be the following: -![vlan-membership-1](/images/virtualizing-a-router-with-pfsense/netgear-vlan-membership-1.png) +![vlan-membership-1](netgear-vlan-membership-1.png) and then configure VLAN 10's port membership to be the following: -![vlan-membership-10](/images/virtualizing-a-router-with-pfsense/netgear-vlan-membership-10.png) +![vlan-membership-10](netgear-vlan-membership-10.png) Now, go into `Port PVID` and ensure that port 8 is set to PVID 10. -![vlan-port-pvid](/images/virtualizing-a-router-with-pfsense/netgear-port-pvid.png) +![vlan-port-pvid](netgear-port-pvid.png) This above configuration will dedicate two of the eight ports to WAN and LAN. This will allow the internet to flow into the pfSense from the modem. @@ -90,7 +90,7 @@ After going through the rest of the installation, if everything is connected cor If all goes well, the web interface should be running at [https://192.168.1.1](https://192.168.1.1). -![pfsense-dashboard](/images/virtualizing-a-router-with-pfsense/pfsense-dashboard.png) +![pfsense-dashboard](pfsense-dashboard.png) And this is where the fun begins. There are many tutorials and blogs about how to setup pfSense and various services and packages that can be installed. I've already installed [pfBlocker-NG](https://docs.netgate.com/pfsense/en/latest/packages/pfblocker.html). diff --git a/public/images/virtualizing-a-router-with-pfsense/netgear-port-pvid.png b/content/post/virtualizing-a-router-with-pfsense/netgear-port-pvid.png similarity index 100% rename from public/images/virtualizing-a-router-with-pfsense/netgear-port-pvid.png rename to content/post/virtualizing-a-router-with-pfsense/netgear-port-pvid.png diff --git a/public/images/virtualizing-a-router-with-pfsense/netgear-vlan-configuration.png b/content/post/virtualizing-a-router-with-pfsense/netgear-vlan-configuration.png similarity index 100% rename from public/images/virtualizing-a-router-with-pfsense/netgear-vlan-configuration.png rename to content/post/virtualizing-a-router-with-pfsense/netgear-vlan-configuration.png diff --git a/public/images/virtualizing-a-router-with-pfsense/netgear-vlan-membership-1.png b/content/post/virtualizing-a-router-with-pfsense/netgear-vlan-membership-1.png similarity index 100% rename from public/images/virtualizing-a-router-with-pfsense/netgear-vlan-membership-1.png rename to content/post/virtualizing-a-router-with-pfsense/netgear-vlan-membership-1.png diff --git a/public/images/virtualizing-a-router-with-pfsense/netgear-vlan-membership-10.png b/content/post/virtualizing-a-router-with-pfsense/netgear-vlan-membership-10.png similarity index 100% rename from public/images/virtualizing-a-router-with-pfsense/netgear-vlan-membership-10.png rename to content/post/virtualizing-a-router-with-pfsense/netgear-vlan-membership-10.png diff --git a/public/images/virtualizing-a-router-with-pfsense/pfsense-dashboard.png b/content/post/virtualizing-a-router-with-pfsense/pfsense-dashboard.png similarity index 100% rename from public/images/virtualizing-a-router-with-pfsense/pfsense-dashboard.png rename to content/post/virtualizing-a-router-with-pfsense/pfsense-dashboard.png diff --git a/public/images/watching-youtube-in-private/computerphile.png b/content/post/watching-youtube-in-private/computerphile.png similarity index 100% rename from public/images/watching-youtube-in-private/computerphile.png rename to content/post/watching-youtube-in-private/computerphile.png diff --git a/content/post/watching-youtube-in-private.md b/content/post/watching-youtube-in-private/index.md similarity index 91% rename from content/post/watching-youtube-in-private.md rename to content/post/watching-youtube-in-private/index.md index c4455c35..1ae60069 100644 --- a/content/post/watching-youtube-in-private.md +++ b/content/post/watching-youtube-in-private/index.md @@ -5,7 +5,7 @@ lastmod: 2022-12-10T21:46:55-05:00 draft: false keywords: [] description: "" -tags: ['invidious','degoogle', 'youtube', 'yewtu.be', 'tailscale', 'privacy'] +tags: ["invidious", "degoogle", "youtube", "yewtu.be", "tailscale", "privacy"] categories: [] author: "" @@ -26,18 +26,16 @@ flowchartDiagrams: enable: false options: "" -sequenceDiagrams: +sequenceDiagrams: enable: false options: "" - --- -I recently stumbled upon [yewtu.be](https://yewtu.be) and found it intriguing. It not only allows you to watch YouTube without *being on YouTube*, but it also allows you to create an account and subscribe to channels without a Google account. What sort of wizardry is going on under the hood? It turns out that it's a hosted instance of [invidious](https://invidious.io/). +I recently stumbled upon [yewtu.be](https://yewtu.be) and found it intriguing. It not only allows you to watch YouTube without _being on YouTube_, but it also allows you to create an account and subscribe to channels without a Google account. What sort of wizardry is going on under the hood? It turns out that it's a hosted instance of [invidious](https://invidious.io/). - -![requestly](/images/watching-youtube-in-private/computerphile.png) +![image](computerphile.png) The layout is simple, and **JavaScript is not required**. @@ -54,7 +52,6 @@ I made a few modifications (such as pinning the container's tag), and ended up w ```yaml version: "3" services: - invidious: image: quay.io/invidious/invidious:5160d8bae39dc5cc5d51abee90571a03c08d0f2b restart: unless-stopped @@ -103,7 +100,7 @@ I figured it would be nice to redirect existing YouTube links that others send m I went looking for a way to redirect paths at the browser level. I found the lightweight proxy [requestly](https://requestly.io/), which can be used to modify http requests in my browser. I created the following rules: -![requestly](/images/watching-youtube-in-private/requestly-rules.png) +![requestly](requestly-rules.png) Now the link https://www.youtube.com/watch?v=-lz30by8-sU will redirect to [http://invidious:3000/watch?v=-lz30by8-sU](http://invidious:3000/watch?v=-lz30by8-sU) diff --git a/public/images/watching-youtube-in-private/requestly-rules.png b/content/post/watching-youtube-in-private/requestly-rules.png similarity index 100% rename from public/images/watching-youtube-in-private/requestly-rules.png rename to content/post/watching-youtube-in-private/requestly-rules.png diff --git a/content/post/what-to-do-with-a-homelab.md b/content/post/what-to-do-with-a-homelab/index.md similarity index 98% rename from content/post/what-to-do-with-a-homelab.md rename to content/post/what-to-do-with-a-homelab/index.md index 4bffb7fc..10abcf92 100644 --- a/content/post/what-to-do-with-a-homelab.md +++ b/content/post/what-to-do-with-a-homelab/index.md @@ -23,7 +23,7 @@ Having multiple machines/nodes provides the advantage of increased redundancy, b Virtualizing your hardware is an organized way of dividing up your machine's resources. This can be done with something such as a *Virtual Machine* or something lighter like a container using *LXC* or *runC*. Containers have much less overhead in terms of boot time and storage allocation. This [Stack Overflow answer](https://stackoverflow.com/questions/16047306/how-is-docker-different-from-a-virtual-machine) sums it up nicely. -![image](/images/proxmox.png) +![image](proxmox.png) A hypervisor such as [Proxmox](https://www.proxmox.com/en/proxmox-ve/get-started) can be installed in minutes on a new machine. It provides a web interface and a straight-forward way to spin up new VMs and containers. Even if your plan is to run mostly docker containers, Proxmox can be a useful abstraction for managing VMs, disks and running scheduled backups. You can even run docker within an LXC container by enabling nested virtualization. You'll want to ensure that VT-d and VT-x are enabled in the BIOS if you decide to install a hypervisor to manage your virtualization. @@ -46,7 +46,7 @@ You could certainly setup and manage your own VPN by using something like [OpenV ## Monitoring -![dashboard](/images/netdata.png) +![dashboard](netdata.png) Monitoring can become an important aspect of your homelab after it starts to become something that is relied upon. One of the simplest ways to setup some monitoring is using [netdata](https://www.netdata.cloud/). It can be installed on individual containers, VMs, and also a hypervisor (such as Proxmox). All of the monitoring works out of the box by detecting disks, memory, network interfaces, etc. @@ -54,7 +54,7 @@ Additionally, agents installed on different machines can all be centrally viewed As mentioned above, [Uptime Kuma](https://github.com/louislam/uptime-kuma) is a convenient way to track uptime and monitor the availability of your services. -![uptime-kuma](/images/uptime-kuma.png) +![uptime-kuma](uptime-kuma.png) ## In Summary diff --git a/public/images/netdata.png b/content/post/what-to-do-with-a-homelab/netdata.png similarity index 100% rename from public/images/netdata.png rename to content/post/what-to-do-with-a-homelab/netdata.png diff --git a/public/images/proxmox.png b/content/post/what-to-do-with-a-homelab/proxmox.png similarity index 100% rename from public/images/proxmox.png rename to content/post/what-to-do-with-a-homelab/proxmox.png diff --git a/public/images/uptime-kuma.png b/content/post/what-to-do-with-a-homelab/uptime-kuma.png similarity index 100% rename from public/images/uptime-kuma.png rename to content/post/what-to-do-with-a-homelab/uptime-kuma.png diff --git a/content/post/why-i-threw-out-my-dotfiles.md b/content/post/why-i-threw-out-my-dotfiles/index.md similarity index 100% rename from content/post/why-i-threw-out-my-dotfiles.md rename to content/post/why-i-threw-out-my-dotfiles/index.md diff --git a/public/blog/2021/09/06/what-to-do-with-a-homelab/index.html b/public/blog/2021/09/06/what-to-do-with-a-homelab/index.html index 2f5dde60..0ed4d207 100644 --- a/public/blog/2021/09/06/what-to-do-with-a-homelab/index.html +++ b/public/blog/2021/09/06/what-to-do-with-a-homelab/index.html @@ -111,7 +111,7 @@ Having multiple machines/nodes provides the advantage of increased redundancy, b

Virtualization#

Virtualizing your hardware is an organized way of dividing up your machine’s resources. This can be done with something such as a Virtual Machine or something lighter like a container using LXC or runC. Containers have much less overhead in terms of boot time and storage allocation. This Stack Overflow answer sums it up nicely.

-

image

+

image

A hypervisor such as Proxmox can be installed in minutes on a new machine. It provides a web interface and a straight-forward way to spin up new VMs and containers. Even if your plan is to run mostly docker containers, Proxmox can be a useful abstraction for managing VMs, disks and running scheduled backups. You can even run docker within an LXC container by enabling nested virtualization. You’ll want to ensure that VT-d and VT-x are enabled in the BIOS if you decide to install a hypervisor to manage your virtualization.

Services#

So what are some useful services to deploy?

@@ -127,11 +127,11 @@ Containers have much less overhead in terms of boot time and storage allocation.

VPN#

You could certainly setup and manage your own VPN by using something like OpenVPN, but there is also something else you can try: tailscale. It is a very quick way to create fully-encrypted connections between clients. With its MagicDNS, your can reference the names of machines like homer rather than using an IP address. By using this mesh-like VPN, you can easily create a secure tunnel to your homelab from anywhere.

Monitoring#

-

dashboard

+

dashboard

Monitoring can become an important aspect of your homelab after it starts to become something that is relied upon. One of the simplest ways to setup some monitoring is using netdata. It can be installed on individual containers, VMs, and also a hypervisor (such as Proxmox). All of the monitoring works out of the box by detecting disks, memory, network interfaces, etc.

Additionally, agents installed on different machines can all be centrally viewed in netdata, and it can alert you when some of your infrastructure is down or in a degraded state. Adding additional nodes to netdata is as simple as a 1-line shell command.

As mentioned above, Uptime Kuma is a convenient way to track uptime and monitor the availability of your services.

-

uptime-kuma

+

uptime-kuma

In Summary#

Building out a homelab can be a rewarding experience and it doesn’t require buying a rack full of expensive servers to get a significant amount of utility. There are many services that you can run that require very minimal setup, making it possible to get a server up and running in a short period of time, with monitoring, and that can be securely connected to remotely.

diff --git a/static/images/netdata.png b/public/blog/2021/09/06/what-to-do-with-a-homelab/netdata.png similarity index 100% rename from static/images/netdata.png rename to public/blog/2021/09/06/what-to-do-with-a-homelab/netdata.png diff --git a/static/images/proxmox.png b/public/blog/2021/09/06/what-to-do-with-a-homelab/proxmox.png similarity index 100% rename from static/images/proxmox.png rename to public/blog/2021/09/06/what-to-do-with-a-homelab/proxmox.png diff --git a/static/images/uptime-kuma.png b/public/blog/2021/09/06/what-to-do-with-a-homelab/uptime-kuma.png similarity index 100% rename from static/images/uptime-kuma.png rename to public/blog/2021/09/06/what-to-do-with-a-homelab/uptime-kuma.png diff --git a/public/blog/2022/03/13/backing-up-gmail-with-synology/index.html b/public/blog/2022/03/13/backing-up-gmail-with-synology/index.html index 35b37a95..30d6598b 100644 --- a/public/blog/2022/03/13/backing-up-gmail-with-synology/index.html +++ b/public/blog/2022/03/13/backing-up-gmail-with-synology/index.html @@ -109,13 +109,13 @@

I’ve used tools such as gmvault with success in the past. Setting this up on a cron seems like a viable option. However, I don’t really need a lot of the features it offers and do not plan to restore this data to another account.

Synology’s MailPlus seems to be a good candidate for backing up this data. By enabling POP3 fetching, it’s possible to fetch all existing emails, as well as periodically fetch all new emails. If a disaster ever did occur, having these emails would be beneficial, as they are an extension of my memory bank.

Installing MailPlus can be done from the Package Center:

-

image

+

image

Next, I went into Synology MailPlus Server and on the left, clicked on Account and ensured my user was marked as active.

Afterwords, I followed these instructions in order to start backing up emails.

When entering the POP3 credentials, I created an app password solely for authenticating to POP3 from the Synology device. This is required because I have 2-Step verification enabled on my account. There doesn’t seem to be a more secure way to access POP3 at the moment. It does seem like app password access is limited in scope (when MFA is enabled). These app passwords can’t be used to login to the main Google account.

I made sure to set the Fetch Range to All in order to get all emails from the beginning of time.

After this, mail started coming in.

-

image

+

image

After fetching 19 years worth of emails, I tried searching for some emails. It only took a few seconds to search through ~50K emails, which is a relief if I ever did have to search for something important.

Securing Synology#

Since Synology devices are not hermetically sealed, it’s best to secure them by enabling MFA to help prevent being the victim of ransomware. It is also wise to backup your system settings and volumes to the cloud using a tool such as Hyper Backup. diff --git a/static/images/backing-up-gmail-with-synology/install-mailplus-server.png b/public/blog/2022/03/13/backing-up-gmail-with-synology/install-mailplus-server.png similarity index 100% rename from static/images/backing-up-gmail-with-synology/install-mailplus-server.png rename to public/blog/2022/03/13/backing-up-gmail-with-synology/install-mailplus-server.png diff --git a/static/images/backing-up-gmail-with-synology/mail-plus-incoming-mail.png b/public/blog/2022/03/13/backing-up-gmail-with-synology/mail-plus-incoming-mail.png similarity index 100% rename from static/images/backing-up-gmail-with-synology/mail-plus-incoming-mail.png rename to public/blog/2022/03/13/backing-up-gmail-with-synology/mail-plus-incoming-mail.png diff --git a/public/blog/2022/04/02/virtualizing-my-router-with-pfsense/index.html b/public/blog/2022/04/02/virtualizing-my-router-with-pfsense/index.html index 27da02e1..105ea87b 100644 --- a/public/blog/2022/04/02/virtualizing-my-router-with-pfsense/index.html +++ b/public/blog/2022/04/02/virtualizing-my-router-with-pfsense/index.html @@ -116,15 +116,15 @@

  • assign port 8 to be the WAN (connected to my ISP’s modem)
  • In the switch’s web interface, I went to VLAN and then 802.1Q, and then clicked on VLAN Configuration. I configured the ports to look like this:

    -

    vlan-config

    +

    vlan-config

    Note that the VLAN Identifier Setting has been setup already with two VLANs (1 and 10). More VLANs can be created (i.e. to isolate IoT devices), but 2 VLANs is all we need for the initial setup of a router.

    To replicate the above configuration, add a new VLAN ID 10 (1 should exist by default).

    Next, go into VLAN Membership and configure VLAN 1’s port membership to be the following:

    -

    vlan-membership-1

    +

    vlan-membership-1

    and then configure VLAN 10’s port membership to be the following:

    -

    vlan-membership-10

    +

    vlan-membership-10

    Now, go into Port PVID and ensure that port 8 is set to PVID 10.

    -

    vlan-port-pvid

    +

    vlan-port-pvid

    This above configuration will dedicate two of the eight ports to WAN and LAN. This will allow the internet to flow into the pfSense from the modem.

    Setting up pfSense#

    pfSense is fairly easy to setup. Just download the latest ISO and boot up the virtual machine. @@ -136,7 +136,7 @@ When setting up the machine, I mostly went with all of the defaults. Configurati

    After going through the rest of the installation, if everything is connected correctly it should display both WAN and LAN addresses.

    If all goes well, the web interface should be running at https://192.168.1.1.

    -

    pfsense-dashboard

    +

    pfsense-dashboard

    And this is where the fun begins. There are many tutorials and blogs about how to setup pfSense and various services and packages that can be installed. I’ve already installed pfBlocker-NG.

    Summary#

    It is fairly simple to setup a router with pfSense from within a virtual machine. A physical dedicated routing machine is not necessary and often does not perform as well as software running on faster and more reliable hardware. So far, pfSense has been running for over a week without a single hiccup. pfSense is a mature piece of software that is incredibly powerful and flexible. To avoid some of the instability I had experienced with OpenWrt, I enabled AutoConfigBackup, which is capable of automatically backing up configuration upon every change. I plan to explore and experiment with more services and configuration in the future, so the ability to track all of these changes gives me the peace of mind that experimentation is safe.

    diff --git a/static/images/virtualizing-a-router-with-pfsense/netgear-port-pvid.png b/public/blog/2022/04/02/virtualizing-my-router-with-pfsense/netgear-port-pvid.png similarity index 100% rename from static/images/virtualizing-a-router-with-pfsense/netgear-port-pvid.png rename to public/blog/2022/04/02/virtualizing-my-router-with-pfsense/netgear-port-pvid.png diff --git a/static/images/virtualizing-a-router-with-pfsense/netgear-vlan-configuration.png b/public/blog/2022/04/02/virtualizing-my-router-with-pfsense/netgear-vlan-configuration.png similarity index 100% rename from static/images/virtualizing-a-router-with-pfsense/netgear-vlan-configuration.png rename to public/blog/2022/04/02/virtualizing-my-router-with-pfsense/netgear-vlan-configuration.png diff --git a/static/images/virtualizing-a-router-with-pfsense/netgear-vlan-membership-1.png b/public/blog/2022/04/02/virtualizing-my-router-with-pfsense/netgear-vlan-membership-1.png similarity index 100% rename from static/images/virtualizing-a-router-with-pfsense/netgear-vlan-membership-1.png rename to public/blog/2022/04/02/virtualizing-my-router-with-pfsense/netgear-vlan-membership-1.png diff --git a/static/images/virtualizing-a-router-with-pfsense/netgear-vlan-membership-10.png b/public/blog/2022/04/02/virtualizing-my-router-with-pfsense/netgear-vlan-membership-10.png similarity index 100% rename from static/images/virtualizing-a-router-with-pfsense/netgear-vlan-membership-10.png rename to public/blog/2022/04/02/virtualizing-my-router-with-pfsense/netgear-vlan-membership-10.png diff --git a/static/images/virtualizing-a-router-with-pfsense/pfsense-dashboard.png b/public/blog/2022/04/02/virtualizing-my-router-with-pfsense/pfsense-dashboard.png similarity index 100% rename from static/images/virtualizing-a-router-with-pfsense/pfsense-dashboard.png rename to public/blog/2022/04/02/virtualizing-my-router-with-pfsense/pfsense-dashboard.png diff --git a/static/images/watching-youtube-in-private/computerphile.png b/public/blog/2022/12/10/watching-youtube-in-private/computerphile.png similarity index 100% rename from static/images/watching-youtube-in-private/computerphile.png rename to public/blog/2022/12/10/watching-youtube-in-private/computerphile.png diff --git a/public/blog/2022/12/10/watching-youtube-in-private/index.html b/public/blog/2022/12/10/watching-youtube-in-private/index.html index 6df09c53..e4b5de69 100644 --- a/public/blog/2022/12/10/watching-youtube-in-private/index.html +++ b/public/blog/2022/12/10/watching-youtube-in-private/index.html @@ -103,7 +103,7 @@

    I recently stumbled upon yewtu.be and found it intriguing. It not only allows you to watch YouTube without being on YouTube, but it also allows you to create an account and subscribe to channels without a Google account. What sort of wizardry is going on under the hood? It turns out that it’s a hosted instance of invidious.

    -

    requestly

    +

    image

    The layout is simple, and JavaScript is not required.

    I started using yewtu.be as my primary client for watching videos. I subscribe to several YouTube channels and I prefer the interface invidiuous provides due to its simplicity. It’s also nice to be in control of my search and watch history.

    A few days ago, yewtu.be went down briefly, and that motivated me enough to self-host invidious. There are several other hosted instances listed here, but being able to easily backup my own instance (including subscriptions and watch history) is more compelling in my case.

    @@ -112,7 +112,6 @@

    I made a few modifications (such as pinning the container’s tag), and ended up with:

    version: "3"
     services:
    -
       invidious:
         image: quay.io/invidious/invidious:5160d8bae39dc5cc5d51abee90571a03c08d0f2b
         restart: unless-stopped
    @@ -156,7 +155,7 @@ volumes:
     
     

    I figured it would be nice to redirect existing YouTube links that others send me, so that I could seamlessly watch the videos using invidious.

    I went looking for a way to redirect paths at the browser level. I found the lightweight proxy requestly, which can be used to modify http requests in my browser. I created the following rules:

    -

    requestly

    +

    requestly

    Now the link https://www.youtube.com/watch?v=-lz30by8-sU will redirect to http://invidious:3000/watch?v=-lz30by8-sU

    I’m still looking for ways to improve this invidious setup. There doesn’t appear to be a way to stream in 4K yet.

    diff --git a/static/images/watching-youtube-in-private/requestly-rules.png b/public/blog/2022/12/10/watching-youtube-in-private/requestly-rules.png similarity index 100% rename from static/images/watching-youtube-in-private/requestly-rules.png rename to public/blog/2022/12/10/watching-youtube-in-private/requestly-rules.png diff --git a/static/images/setting-up-gitea-actions-with-tailscale/gitea-runners.png b/public/blog/2023/12/10/setting-up-gitea-actions-with-tailscale/gitea-runners.png similarity index 100% rename from static/images/setting-up-gitea-actions-with-tailscale/gitea-runners.png rename to public/blog/2023/12/10/setting-up-gitea-actions-with-tailscale/gitea-runners.png diff --git a/public/blog/2023/12/10/setting-up-gitea-actions-with-tailscale/index.html b/public/blog/2023/12/10/setting-up-gitea-actions-with-tailscale/index.html index a9d48a3c..94bd76b2 100644 --- a/public/blog/2023/12/10/setting-up-gitea-actions-with-tailscale/index.html +++ b/public/blog/2023/12/10/setting-up-gitea-actions-with-tailscale/index.html @@ -107,7 +107,7 @@

    Gitea is a lightweight and fast git server that has much of the same look and feel as github. I have been using it in my homelab to mirror repositories hosted on other platforms such as github and gitlab. These mirrors take advantage of the decentralized nature of git by serving as “backups”. One of the main reasons I hadn’t been using it more often was due to the lack of integrated CI/CD. This is no longer the case.

    Gitea Actions#

    Gitea Actions have made it into the 1.19.0 release. This feature had been in an experimental state up until 1.21.0 and is now enabled by default 🎉.

    -

    So what are they? If you’ve ever used GitHub Actions (and if you’re reading this, I imagine you have), they essentially allow you to run github workflows on gitea. Workflows between gitea and github are not completely interopable, but a lot of the same workflow syntax is already compatible on gitea. You can find a list of unsupported workflows syntax.

    +

    So what are they? If you’ve ever used GitHub Actions (and if you’re reading this, I imagine you have), these will look familiar. Gitea Actions essentially enable the ability to run github workflows on gitea. Workflows between gitea and github are not completely interopable, but a lot of the same workflow syntax is already compatible on gitea. You can find a documented list of unsupported workflows syntax.

    Actions work by using a custom fork of nekos/act. Workflows run in a new container for every job. If you specify an action such as ‘actions/checkout@v3’, it defaults to downloading the scripts from github.com. To avoid internet egress, you could always clone the required actions to your local gitea instance.

    Actions (gitea’s implementation) has me excited because it makes spinning up a network-isolated environment for workflow automation incredibly simple.

    Integration with Tailscale#

    @@ -183,11 +183,11 @@ log: - url: "http://gitea:3000"

    Something to consider is whether or not you want to use ssh with git. One method of getting this to work with containers is to use ssh container passthrough. I decided to keep it simple and not use ssh, since communicating over https is perfectly fine for my use case.

    -

    After adding the above configuration, running docker compose up -d should be enough to get your instance up and running. It will be accessible at https://gitea.my-tailnet-name.ts.net from within your tailnet.

    +

    After adding the above configuration, running docker compose up -d should be enough to get an instance up and running. It will be accessible at https://gitea.my-tailnet-name.ts.net from within your tailnet.

    Connecting a Runner#

    I installed the runner by following the docs. I opted for installing it on a separate host (another lxc container) as recommended in the docs. I used the systemd unit file to ensure that the runner comes back online after system reboots. I installed tailscale on this act runner as well, so that it can have the same “networking privileges” as the main instance.

    After registering this runner and starting the daemon, it appeared in /admin/actions/runners:

    -

    image

    +

    image

    Running a workflow#

    Now it’s time start running some automation. I used the demo workflow as a starting point to verify that the runner is executing workflows.

    After this, I wanted to make sure that some of my existing workflows could be migrated over.

    @@ -232,12 +232,12 @@ jobs: --limit ${{ matrix.host }}

    And voilà:

    -