Skip to content

Routing Steam traffic into sigle WAN (of three)

The newest update for keeping the gaming performance in good shape with pfsense is to put steam-related traffic into lowest priority, or maybe just put it into single WAN.

This can be be done with simple rules. The same rules can be used for tagging the traffic, and prioritizing them down in the QoS side (or we could even put a a network limitter for steam traffic).

the steamcache is separated from rest of the network with source and destination rules

Updated the LAN routing machine

My old esxi was intalled on single USB dongle, which died (I failed). So I upgraded everything. Changed old HDD’s into SSD and upgraded all software too

Everything is not hosted on Proxmox instead of Esxi.
Steamcache is not upgraded into lancache (
pfsense is just newer version

Here’s the upgraded network diagram:

At times like these is pretty nice to have a blog to keep track of things to be done. My old multirouting post still seems to be a good example how to do this.
The new version is being run by docker-compose.

 $ git clone lancache
~ $ cd lancache
~/lancache $ nano .env
~/lancache $ sudo docker-compose up -d
# => Configure your router to serve ONLY lancache-dns

Reading the caches:
tail -100f lancache/logs/access.log

Preventing your site from idling out with Cloudflare workers

Azure might just put your app into idle state if it’s inactive for too long. The always on feature is available only for higher app plans.

However the same functionality can be achieved by just making http calls with cloudflare workers.

Let’s just create a simple listener:

addEventListener("scheduled", event => {

async function handleScheduled(event) {
  await fetch("")

Ant then we just add a cron trigger to launch the fetch request every 30 minutes.

Hardening poorly configured services with Cloudflare workers

It seems that Azure is sending x-powered-by header from, and also the php version. Removing the header is easy with web.config changes, but the php is tricker. I decided to remove these unwanted header with cloudflare worker-script.

Here’s a simple workes which will remove the x-powered-by headers from your responses.

addEventListener('fetch', event => {

 * Respond to the request
 * @param {Request} request
async function handleRequest(request) {
  const response = await fetch(request),
  newheaders = new Headers(response.headers);

 return new Response(response.body , {
		status: response.status,
		statusText: response.statusText,
		headers: newheaders

Blog and Symbian downloads are working again

They have been long gone, but today I finally fixed everything. If you still need these files (surprisingly many people still asks for these) then they are working again.

Configuring Mime types for Azure and WordPress

My blog has been not working so well for quite some time. The Symbian sis file downloads were broken due to broken theme and plugins. After I got the blog working again I wanted to move it into cloud.

I chose Azure, since I haven’t been using that before.

Configuring MIME types in Azure

First we must teach Azure about Symbian installer files, and debian packages. Go to your App Service in Azure Portal, and look for App Service Editor (Preview). Then we can edit web.config and add the new MIME types to the Azure.

MIME Types in WordPress

Then it’s time to set MIME types right in WordPress. I did this by installing the WP Extra File Types Plugin. And I added the file types in there.

..And now the jorney contines in Azure.

Serving static pages with a custom domain with Cloudflare and github pages

The idea is pretty cool. You can serve static web-pages for free with your own domain with Cloudflare and Github Pages. The Cloudflare is handling the DNS, page caching, and the TSL certificate. The the pages itself are hosted by github. Here’s a quick tutorial how to do it.


Set the DNS to point into Github Pages (


I basically made simple html pages without jekyll.
First add the CNAME file into the root of your github project for your own domain:

After the initial commit I noticed that my images are not found from the server. It turns out that you have to add an empty file named as “.nojekyll” to bypass the jekyll, so the github will know to publish everything under your domain.
See my example project at:


You can also get free email routes from mailgun. Setting the account for that is also quite simple. Just follow the mailgun tutorial, for dns etc.
One of the benefits is that you can create rules for forwarding emails like [email protected] and forward those emails for everyone involved in “info”.
Mailgun no longer supports the email routing for free plans, so I moved into is a much easier service. Just write the forwarding rules into the dns records and you’re good to go. Even better service than mailgun!

pfSense Traffic Shaper for prioritizing gaming traffic

This a lot easier, than I originally though it would be. Works really well on my multiWAN setup too! I did everything with the Wizard, that can be found under firewall/traffic shaper.

The Wizard

Why even post steps about a traffic shaper wizard? Well, it’s pretty easy to use, so maybe there’s no point. However I tend to forget easy things, like choosing the correct wizard (traffic_shaper_wizard_multi_all.xml), and using high enough connection speed (the first image). Everything else is really simple.
At the first step we just add the upload / download speed limits. You should use some value that is actually pretty close to the maximum value, since the penaltyBox feature in the next still will only accept persentage of the connection speed, which will be calculated from these values.

The Scheduler PRIQ means that each packed is placed on separate queue, and the prioritized packets (games) will pass through first.
Continue reading ‘pfSense Traffic Shaper for prioritizing gaming traffic’ »

Realtime clock data from Alge-timing system

I made all of this stuff into the Finice 2019 ice climbing competition (  The idea is to send the clock timing events into web, so we could use them in the results-office, or we could insert the clock into the video stream during the competition. There’s always some delay in the video stream, so we need a way to add custom delay into the clock. The data is good, but we have to remember to add some delay so the clock and video will be on sync. It would look stupid if the climber get to the top, and the clock has already stopped a few seconds ago.
Here’s a short video about how all of it works:

Continue reading ‘Realtime clock data from Alge-timing system’ »

Configuring SyntaxHighlighter plugin to StripBrs

I had way too much trouble with the new version of the SyntaxHighlighter Evolved plugin. The default configuration page is missing the option to StripBrs. A quick and dirty solution was to write a plugin to configure the other plugin.
The SyntaxHighlighter configuration is easy. The plugin is running on JavaScript, so all we have to do is to

SyntaxHighlighter.config.stripBrs = true;

To get there I wrote a simple plugin that add the new js after WordPress js scripts. Here’s how it’s done:

function add_js_config() {
    wp_register_script( 'syntaxhighlighter_config',
add_action( 'wp_enqueue_scripts', 'add_js_config' );

The plugin can be found from github: