<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>How To - Category - Fryguy's Blog</title><link>https://fryguy.net/categories/how-to/</link><description>How To - Category - Fryguy's Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sat, 08 Aug 2026 18:00:00 +0000</lastBuildDate><atom:link href="https://fryguy.net/categories/how-to/" rel="self" type="application/rss+xml"/><item><title>Retiring WordPress – How I Migrated fryguy.net to Hugo (With an AI Pair Programmer)</title><link>https://fryguy.net/2026/08/08/retiring-wordpress-how-claude-code-helped-migrate-fryguy-net-to-hugo/</link><pubDate>Sat, 08 Aug 2026 18:00:00 +0000</pubDate><author>Fryguy</author><guid>https://fryguy.net/2026/08/08/retiring-wordpress-how-claude-code-helped-migrate-fryguy-net-to-hugo/</guid><description><![CDATA[<p>This site has run on WordPress since basically forever. As of this week, it doesn&rsquo;t anymore. Everything you&rsquo;re reading is now a static Hugo site, built from Markdown, served by nginx, with no PHP and no database anywhere in the stack. Here&rsquo;s why I did it, what actually moved, and how I used Claude Code as a pair programmer for most of the heavy lifting.</p>
<h2 id="why-bother">Why bother</h2>
<p>Let&rsquo;s be honest about how it got this bad: I didn&rsquo;t keep up with it. I know. Servers don&rsquo;t rot on their own — you stop patching them, stop upgrading them, and a few years later you&rsquo;re staring at a stack that&rsquo;s aged out from under you. The old droplet had quietly rotted underneath a site that still worked fine. Ubuntu 18.04 — EOL since 2023. PHP 7.4 — EOL since 2022, with no apt-upgrade path to anything newer (the PPA I&rsquo;d have needed was frozen). MySQL 5.7 — also EOL. WordPress itself was current; everything under it wasn&rsquo;t, and there was no clean patching path left, just a slow accumulation of risk on a box facing the public internet.</p>]]></description></item><item><title>Juniper Port Checker – Validate Port Speed Mappings Before You Deploy</title><link>https://fryguy.net/2026/04/12/juniper-port-checker-qfx5120/</link><pubDate>Mon, 13 Apr 2026 01:08:29 +0000</pubDate><author>Fryguy</author><guid>https://fryguy.net/2026/04/12/juniper-port-checker-qfx5120/</guid><description><![CDATA[<div class="wp-block-image">

</div>
<p>If you work with Juniper hardware and have never used the <a href="https://apps.juniper.net/port-checker/" target="_blank" rel="noopener">Juniper Port Checker</a>, you are missing out on a really useful tool. It is part of the Juniper Pathfinder suite and it gives you a visual representation of the front panel of a device and lets you configure port speeds to validate that your planned configuration is actually supported by the hardware. No more digging through data sheets trying to figure out what happens to adjacent ports when you change a speed.</p>]]></description></item><item><title>New Network Tools Section</title><link>https://fryguy.net/2026/04/12/new-network-tools-section/</link><pubDate>Sun, 12 Apr 2026 21:29:42 +0000</pubDate><author>Fryguy</author><guid>https://fryguy.net/2026/04/12/new-network-tools-section/</guid><description><![CDATA[<div class="wp-block-image">

</div>
<p>I have been meaning to put together some network tools for a while now, and I finally got around to it. I added a new <a href="/tools/" rel="">Network Tools</a> section to the site with eight tools that I find myself needing on a regular basis. They all run in the browser – nothing gets sent to a server, they either do the math locally or call a public API directly.</p>]]></description></item><item><title>Juniper SRX DNS Proxy Configuration (Split-DNS)</title><link>https://fryguy.net/2020/07/07/juniper-srx-dns-proxy-configuration-split-dns/</link><pubDate>Tue, 07 Jul 2020 10:00:00 +0000</pubDate><author>Fryguy</author><guid>https://fryguy.net/2020/07/07/juniper-srx-dns-proxy-configuration-split-dns/</guid><description><![CDATA[<div class="wp-block-image">
  
</div>
<p>This post is intended to show you how to configure a Juniper SRX to be a DNS proxy for your network. This will allow you to forward DNS queries to both a private DNS server for your local domain and a public DNS server for all other requests.</p>
<p>Using the SRX as a DNS proxy has a few advantages for a network administrator. The first being that if you need to ever change an upstream DNS server pointer, you just need to update the SRX and not all the clients. The second is that if you want to split domain name DNS queries among different DNS servers, you can do that. This is good if you have a .local domain server locally or over a VPN. This will allow you to keep that query local, yet all other requests will go to a public DNS server.</p>
<p>The topology for this lab is as follows:</p>
<ul class="wp-block-list">
<li>
The internal network in this topology is my Home network that is providing access to the Internet.
</li>
<li>
The SRX is configured with DHCP on the UNTRUST side to obtain an IP from my home network.
</li>
<li>
SRX is configured with a static IP of 192.168.100.1/24 on the TRUST side.
</li>
<li>
SRX is acting as DHCP server for 192.168.100.0/24 and serving DNS server IP of 192.168.100.1.
</li>
<li>
The SRX is NATing all traffic from TRUST to the UNTRUST interface.
</li>
<li>
Linux host is a simple Ubuntu 16.04 desktop default in EVE-NG.
</li>
</ul>
<figure class="wp-block-image size-large">
<p> </figure></p>
<p>You can find a copy of the EVE-NG topology as well as the SRX start and final configs in my github repository: <a href="https://github.com/FryguyPA/Junos-SRX-DNS-Proxy" target="_blank" rel="noopener noreffer ">https://</a><a href="https://github.com/FryguyPA/Junos-SRX-DNS-Proxy" target="_blank" rel="noreferrer noopener">github</a><a href="https://github.com/FryguyPA/Junos-SRX-DNS-Proxy" target="_blank" rel="noreferrer noopener" title="Fryguy's GIthub repository">.</a><a href="https://github.com/FryguyPA/Junos-SRX-DNS-Proxy" target="_blank" rel="noopener noreffer ">com/FryguyPA/Junos-SRX-DNS-Proxy</a></p>]]></description></item><item><title>Junos – Loading Configs – 5 of 5 – Set</title><link>https://fryguy.net/2019/11/11/junos-loading-configs-5-of-5-set/</link><pubDate>Mon, 11 Nov 2019 08:42:11 +0000</pubDate><author>Fryguy</author><guid>https://fryguy.net/2019/11/11/junos-loading-configs-5-of-5-set/</guid><description><![CDATA[<div class="wp-block-image">

</div>
<p>This is the fifth post in the <em>Loading Configs</em> series. In this post, we will cover the <em>load set</em> command. This allows you to enter commands into the buffer just like you would on the CLI. All these commands are either <em>set</em> or <em>delete</em> based commands. Yes, you can use this to delete as well.</p>
<p>Here is a quick refresher on what we are doing…</p>]]></description></item><item><title>Junos – Loading configs – 4 of 5 – Update</title><link>https://fryguy.net/2019/11/07/junos-loading-configs-4-of-5-update/</link><pubDate>Thu, 07 Nov 2019 08:30:30 +0000</pubDate><author>Fryguy</author><guid>https://fryguy.net/2019/11/07/junos-loading-configs-4-of-5-update/</guid><description><![CDATA[<div class="wp-block-image">

</div>
<p>This is the fourth post in the <em>Loading Configs</em> series. In this post, we will cover the <em>load update</em> command. We touched on this in post one when we discussed <em>override</em>. This command, <em>update</em>, is less destructive as it will update the configuration, yet the Junos device will only evaluate the differences between the running and what you have staged.</p>
<p>Here is a quick refresher on what we are doing…</p>
<p>For this lab series, we will use a simple topology to demonstrate the different ways to load configs. We have our SRX configured with TRUST and UNTRUST zones, a connection to the Internet, and a Windows 7 PC that has a browser installed. We will focus on making changes to our security policies.</p>
<div class="wp-block-image">

</div>]]></description></item><item><title>Junos – Loading Configs – 3 of 5 – Replace</title><link>https://fryguy.net/2019/11/04/junos-loading-configs-3-of-4-replace/</link><pubDate>Mon, 04 Nov 2019 08:19:28 +0000</pubDate><author>Fryguy</author><guid>https://fryguy.net/2019/11/04/junos-loading-configs-3-of-4-replace/</guid><description><![CDATA[<div class="wp-block-image">

</div>
<p>This is the third post in the <em>Loading Configs</em> series. In this post, we will cover the <em>load replace</em> command. This command shines when you want to replace parts of a configuration without having to delete a bunch of stuff. It is really powerful in security policies and firewall filters, places where you tend to want to replace a lot of configs quickly.</p>]]></description></item><item><title>Junos – Loading Configs – 2 of 5 – Patch</title><link>https://fryguy.net/2019/10/31/junos-loading-configs-2-of-4-patch/</link><pubDate>Thu, 31 Oct 2019 08:15:16 +0000</pubDate><author>Fryguy</author><guid>https://fryguy.net/2019/10/31/junos-loading-configs-2-of-4-patch/</guid><description><![CDATA[<div class="wp-block-image">

</div>
<p>This is the second post in the <em>Loading Configs</em> series. In this post, we will cover the <em>load patch</em> command. The beauty of the <em>load patch</em> command is that you can load the config on one device, issue a <em>show | compare</em>, and take that output and patch another device. This is also useful when you want to test your commands for a change, roll it back, and then re-apply it later.</p>
<p>Here is a quick refresher on what we are doing…</p>
<p>For this lab series, we will use a simple topology to demonstrate the different ways to load configs. We have our SRX configured with TRUST and UNTRUST zones, a connection to the Internet, and a Windows 7 PC that has a browser installed. We will focus on making changes to our security policies.</p>
<div class="wp-block-image">

</div>]]></description></item><item><title>Junos – Loading Configs – 1 of 5 – Merge</title><link>https://fryguy.net/2019/10/28/junos-loading-configs-1-of-4/</link><pubDate>Mon, 28 Oct 2019 08:35:46 +0000</pubDate><author>Fryguy</author><guid>https://fryguy.net/2019/10/28/junos-loading-configs-1-of-4/</guid><description><![CDATA[<div class="wp-block-image">

</div>
<p>In this post series, we will cover one of the wonderful things with Junos, which is loading configurations to the devices. Compared to other vendors where you paste into a live configuration, Junus uses a candidate configuration for all changes. A great benefit of this is that there are a few ways to load configurations onto the devices.</p>
<p>The ways we can load the configurations are shown below.</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-text">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">  factory-default      Override existing configuration with factory default
</span></span><span class="line"><span class="cl">  merge                Merge contents with existing configuration
</span></span><span class="line"><span class="cl">  override             Override existing configuration
</span></span><span class="line"><span class="cl">  patch                Load patch file into configuration
</span></span><span class="line"><span class="cl">  replace              Replace configuration data
</span></span><span class="line"><span class="cl">  set                  Execute set of commands on existing configuration
</span></span><span class="line"><span class="cl">  update               Update existing configuration</span></span></code></pre></div></div>
<p>I want to briefly touch on a few of the commands.</p>
<p>The first command, <em>factory-default</em>, is a way to soft reset the configuration back to the factory configuration without losing any of the locally stored data. The alternate way is factory default the configuration is to use the <em>request system zeroize</em> command. The zerioze command will rest the device back to the factory configuration and remove all locally stored user data (logs, files, etc).</p>
<p>The second command, <em>override,</em> will discard the current configuration and replace it with what you load into the device. When doing this the Junos device will re-evaluate the entire configuration you have entered. By re-evaluating the config, it will treat everything like it is new and you will have an impact to the device. If you want to just update the config and not re-evaluate everything, then you would use <em>load update,</em> which we will cover in post 4.</p>
<p>For this post, we will cover <em>merge, patch, replace, update,</em> and <em>set.</em></p>]]></description></item><item><title>Juniper SRX Password Recovery</title><link>https://fryguy.net/2017/09/28/juniper-srx-password-recovery/</link><pubDate>Thu, 28 Sep 2017 12:00:03 +0000</pubDate><author>Fryguy</author><guid>https://fryguy.net/2017/09/28/juniper-srx-password-recovery/</guid><description><![CDATA[  
I can imagine that is how I looked when I got my &#8220;new&#8221; Juniper SRX from (insert favorite auction site) and booted it the first time.  All ready to play with my new toy &#8211; lab some new ideas &#8211; and boom, it has a password on it already.  Grrrr&#8230;.  
Since I had to recover the root password, figured I would post the procedure here in case others are looking for it.  Not only in case others are looking for it, the next time that I need it as well! 🙂  
So the first thing we need to do here is to make sure the device is powered off and we have a console cable connected to it.  I will assume you know how to use your terminal program and access the console already for this post otherwise I suspect you would not be here.  
Now that you are connected we can go ahead and power the SRX on and watch it boot.   In order to boot the system into single user mode, we need to press the space bar when prompted. It will be right at this point in the boot process &#8211; right when you see _Hit [Enter} to boot immediately, or space bar for command prompt.  _Here you need to press the SPACE BAR quick to interrupt the boot process.
<p style="padding-left: 30px;">
  <span style="font-family: 'courier new', courier, monospace; color: #0000ff;">FreeBSD/MIPS U-Boot bootstrap loader, Revision 2.5</span><br /> <span style="font-family: 'courier new', courier, monospace; color: #0000ff;">(slt-builder@slt-junos15.juniper.net, Tue Apr 2 12:36:46 PDT 2013)</span><br /> <span style="font-family: 'courier new', courier, monospace; color: #0000ff;">Memory: 2048MB</span><br /> <span style="font-family: 'courier new', courier, monospace; color: #0000ff;">[0]Booting from nand</span><span style="font-family: 'courier new', courier, monospace; color: #0000ff;">-flash slice 1</span><br /> <span style="font-family: 'courier new', courier, monospace; color: #0000ff;">Un-Protected 1 sectors</span><br /> <span style="font-family: 'courier new', courier, monospace; color: #0000ff;">writing to flash&#8230;</span><br /> <span style="font-family: 'courier new', courier, monospace; color: #0000ff;">Protected 1 sectors</span><br /> <span style="font-family: 'courier new', courier, monospace; color: #0000ff;">Loading /boot/defaults/loader.conf </span><br /> <span style="font-family: 'courier new', courier, monospace; color: #0000ff;">/kernel data=0xb99284+0x13c8b4 syms=[0x4+0x91b00+0x4+0xd5dfb]</span>
</p>]]></description></item></channel></rss>