<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Parker&apos;s Blog</title><description>Your local technology blog with information from networking to hacking software on hardware.</description><link>https://parkercs.tech/</link><language>en-us</language><item><title>Inseego FX2000</title><link>https://parkercs.tech/inseego-fx2000/</link><guid isPermaLink="true">https://parkercs.tech/inseego-fx2000/</guid><description>In my infinite hunt for a product to tinker with, I decided to give the Inseego FX2000 a run for its money. Less than $100 on eBay in fact! I was a little weary of working with this device because Novatel/Inseego is known for locking down their devices more heavily than their competitors.

This guide takes into account that you have knowledge of ADB/Fastboot tools, hex editing, and some Qualcomm tool knowledge. This is by no means a step-by-step tutorial.


Gaining ADB Access

Inseego devices hi</description><pubDate>Sat, 28 Jun 2025 07:27:30 GMT</pubDate><content:encoded>&lt;p&gt;In my infinite hunt for a product to tinker with, I decided to give the Inseego FX2000 a run for its money. Less than $100 on eBay in fact! I was a little weary of working with this device because Novatel/Inseego is known for locking down their devices more heavily than their competitors. &lt;/p&gt;&lt;p&gt;&lt;em&gt;This guide takes into account that you have knowledge of ADB/Fastboot tools, hex editing, and some Qualcomm tool knowledge. This is by no means a step-by-step tutorial.&lt;/em&gt;&lt;/p&gt;&lt;h2 id=&quot;gaining-adb-access&quot;&gt;Gaining ADB Access&lt;/h2&gt;&lt;p&gt;Inseego devices hide their various ports behind an HID port, where you can send values to enable them. In newer devices, the value is encrypted, and can not be done unless you know the crypt. In my testing, the FX2000 worked fine, but my M2000 did not (I think my M2000 is haunted, it just refuses to connect to T-Mobile).&lt;/p&gt;&lt;p&gt;Connect a Windows computer to the USB-C port on the rear of the FX2000. Download the &lt;code&gt;mifilink&lt;/code&gt; utility from &lt;a href=&quot;https://www.temblast.com/mifilink.htm?ref=ghost.parkercs.tech&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. In a terminal, execute &lt;code&gt;mifilink.exe diag&lt;/code&gt;. There should now be a plethora of ports at our disposal, including ADB and DIAG.&lt;/p&gt;&lt;h2 id=&quot;modifying-ttl&quot;&gt;Modifying TTL&lt;/h2&gt;&lt;p&gt;Now that you have ADB access, we can access the shell and mangle the TTL and HL on our device. When booted, the runlevel of the device is 3, meaning we can place a file in &lt;code&gt;/etc/rc3.d/&lt;/code&gt; and it&apos;ll be executed on startup.&lt;/p&gt;&lt;p&gt;Contents of &lt;code&gt;/etc/init.d/set-ttl.sh&lt;/code&gt;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-code-card&quot;&gt;&lt;pre&gt;&lt;code&gt;#!/bin/sh
sleep 15
iptables -t mangle -I POSTROUTING -o rmnet+ ! -p icmp -j TTL --ttl-set 64
ip6tables -t mangle -I POSTROUTING -o rmnet+ ! -p icmpv6 -m hl ! --hl-eq 255 -j HL --hl-set 64&lt;/code&gt;&lt;/pre&gt;&lt;figcaption&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;What these two commands do is modify the outgoing TTL/HL of any packet on an rmnet wildcard interface to 64, so it appears as on-device traffic. It excludes ICMP because pings and traceroutes won&apos;t function correctly. For IPv6, it also ignores packets with a HL of 255 as that is used for neighbor-discovery, and without the exclusion, downstream devices of the router won&apos;t receive an IPv6 address.&lt;/span&gt;&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;Once we create that file, we want to mark it as executable and link it to the rc3.d folder.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;# chmod +x /etc/init.d/set-ttl.sh
# ln -s /etc/init.d/set-ttl.sh /etc/rc3.d/S98ttl
# chmod +x /etc/rc3.d/S98ttl&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you give the device a reboot and run &lt;code&gt;iptables -vL -t mangle&lt;/code&gt; and &lt;code&gt;ip6tables -vL -t mangle&lt;/code&gt;, our rules should be there!&lt;/p&gt;&lt;h2 id=&quot;ssh-access&quot;&gt;SSH Access&lt;/h2&gt;&lt;p&gt;Let&apos;s enable SSH access so we don&apos;t have to continually connect our laptop and use the ADB shell to execute commands.&lt;/p&gt;&lt;p&gt;First, execute &lt;code&gt;passwd&lt;/code&gt; in the ADB shell and set a new root password. Then create &lt;code&gt;/etc/init.d/dropbear.sh&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Contents of &lt;code&gt;/etc/init.d/dropbear.sh&lt;/code&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;#!/bin/sh
sleep 15
/etc/init.d/dropbear start&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then execute the following commands:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;# chmod +x /etc/init.d/dropbear.sh
# ln -s /etc/init.d/dropbear.sh /etc/rc3.d/S98dropbear
# chmod +x /etc/rc3.d/S98dropbear&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now SSH will be enabled on boot! By default, your SSH clients probably won&apos;t like the ciphers dropbear uses, but you can ignore this on UNIX with the following command:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-rsa root@xxx.xxx.xxx.xxx&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;repairing-imei&quot;&gt;Repairing IMEI&lt;/h2&gt;&lt;p&gt;This is not for the weary. It involves backing up and wiping a sensitive EFS partition, modifying the backup in a hex editor, and restoring it onto the device. As far as I am aware, you cannot repair the IMEI on this device without wiping the EFS partition. That is because the NV item 550 (where the IMEI is held) is read-only, and can only be written to once.&lt;/p&gt;&lt;p&gt;With QPST tools on your computer, launch QFIL and select the port of your router,  then in the menu bar, head to Tools &amp;gt; QCN Backup Restore. Select Backup QCN to begin the backup.&lt;/p&gt;&lt;blockquote&gt;I also took the liberty to make an &lt;u&gt;xQCN&lt;/u&gt; backup here, using the Software Download tool in QPST, since this contains more data than a regular QCN. If we restore this after we restore the QCN we&apos;re about to modify, it will &lt;strong&gt;not&lt;/strong&gt; repair the IMEI to the original since it is now read-only. Allegedly there are also some nv items that are used during a factory reset, which these processes may not backup, which could lead to bootlooping after a factory reset.&lt;/blockquote&gt;&lt;p&gt;With the completed QCN backup, open it in your preferred hex editor, and search for hex &lt;code&gt;089A&lt;/code&gt;. (That is, if your IMEI begins with &lt;code&gt;9&lt;/code&gt;. If it is something else, search for &lt;code&gt;08xA&lt;/code&gt;, where x is that first digit.) For me, the offset of the IMEI value is 29560.&lt;/p&gt;&lt;p&gt;If your original IMEI is &lt;code&gt;358314360147956&lt;/code&gt;, then the hex value should be &lt;code&gt;08 3A 85 13 43 06 41 97 65&lt;/code&gt;. The first octet will always be &lt;code&gt;08&lt;/code&gt;, and the second will always be the first digit, followed by &lt;code&gt;A&lt;/code&gt;. For every octet after that, it is the digits &lt;strong&gt;reversed&lt;/strong&gt;. Save the file once done &lt;strong&gt;under a new filename&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;There is a possibility of bricking your device after this. Know the risks.&lt;/strong&gt; I might even recommend making a nanddump backup of the efs2 partition (&lt;code&gt;/dev/mtd2&lt;/code&gt;).&lt;/p&gt;&lt;p&gt;On your laptop connected via USB to the router, execute the following commands in your shell:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;adb reboot bootloader
fastboot erase efs2
fastboot reboot&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The device should reboot, but it will not come up as normal. It is now in a persistent runlevel 2. &lt;/p&gt;&lt;blockquote&gt;This is not required, but if you execute &lt;code&gt;telinit 3&lt;/code&gt; in an ADB shell, the device will come back up as normal, and you can verify that there is no IMEI in the device&apos;s settings.&lt;/blockquote&gt;&lt;p&gt;With the device back up, launch QFIL and navigate to the same menu as before under Tools &amp;gt; QCN Backup Restore, and choose the modified hex file and restore it. Once the restore is completed, reboot the device. When the device comes back up, we need to tell the device to return to a persistent runlevel 3. In an ADB shell, execute:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;# dsm_cli set_persistent_rl&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When prompted &lt;code&gt;Is runlevel persistent 0/1:&lt;/code&gt;, type &lt;code&gt;1&lt;/code&gt; and hit enter, then when prompted &lt;code&gt;Enter runlevel 2/3/4:&lt;/code&gt;, type &lt;code&gt;3&lt;/code&gt; and hit enter. Reboot the device again. It should now come back up as normal, and you can check the device&apos;s settings to make sure your repaired IMEI is present.&lt;/p&gt;&lt;h3 id=&quot;random-device-knowledge&quot;&gt;Random device knowledge&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;General
Manufacturer: Inseego
Model: FX2000-3

Software Components
Modem Firmware Version: SDX55MOR-4.05.1.1 1 [2022-12-15 07:35:29]
Wi-Fi Firmware Version: 1.0.1.2.193.0
OS Version: 4.14
Cute Version: 3A&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;ati
Manufacturer: Inseego Corp.
Model: FX2000
Revision: 4.05.1.1  SVN 18 [2022-12-15 07:35:29] (Release Build - nvtl)
SVN: 18
IMEI: xx
+GCAP: +CLTE3, +MS, +ES, +DS

OK&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;# cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 00280000 00040000 &quot;sbl&quot;
mtd1: 00280000 00040000 &quot;mibib&quot;
mtd2: 01500000 00040000 &quot;efs2&quot;
mtd3: 001c0000 00040000 &quot;tz&quot;
mtd4: 00100000 00040000 &quot;tz_devcfg&quot;
mtd5: 00180000 00040000 &quot;ddr&quot;
mtd6: 00100000 00040000 &quot;apdp&quot;
mtd7: 00100000 00040000 &quot;xbl_config&quot;
mtd8: 00100000 00040000 &quot;multi_image&quot;
mtd9: 00100000 00040000 &quot;aop&quot;
mtd10: 00100000 00040000 &quot;qhee&quot;
mtd11: 00100000 00040000 &quot;abl&quot;
mtd12: 00280000 00040000 &quot;uefi&quot;
mtd13: 00180000 00040000 &quot;toolsfv&quot;
mtd14: 00180000 00040000 &quot;loader_sti&quot;
mtd15: 00d00000 00040000 &quot;boot&quot;
mtd16: 00100000 00040000 &quot;scrub&quot;
mtd17: 06b40000 00040000 &quot;modem&quot;
mtd18: 001c0000 00040000 &quot;misc&quot;
mtd19: 00180000 00040000 &quot;devinfo&quot;
mtd20: 01900000 00040000 &quot;recovery&quot;
mtd21: 001c0000 00040000 &quot;fota&quot;
mtd22: 02940000 00040000 &quot;recoveryfs&quot;
mtd23: 000c0000 00040000 &quot;ipa_fw&quot;
mtd24: 00100000 00040000 &quot;usb_qti&quot;
mtd25: 00100000 00040000 &quot;sec&quot;
mtd26: 00100000 00040000 &quot;fotacookie&quot;
mtd27: 11200000 00040000 &quot;system&quot;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;# cat /proc/cpuinfo 
processor	: 0
model name	: ARMv7 Processor rev 5 (v7l)
BogoMIPS	: 38.40
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xc07
CPU revision	: 5

Hardware	: Qualcomm Technologies, Inc SDXPRAIRIE
Revision	: 0000
Serial		: 0000000000000000&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;# cat /proc/mounts 
ubi0:rootfs / ubifs rw,relatime,bulk_read,ubi=0,vol=0 0 0
devtmpfs /dev devtmpfs rw,relatime,size=373084k,nr_inodes=93271,mode=755 0 0
proc /proc proc rw,relatime 0 0
none /tmp ramfs rw,relatime 0 0
none /sys sysfs rw,relatime 0 0
none /run ramfs rw,relatime 0 0
none /var/log ramfs rw,relatime 0 0
none /run ramfs rw,relatime 0 0
none /var/lock ramfs rw,relatime 0 0
none /sys/kernel/debug debugfs rw,relatime 0 0
ramfs /opt/nvtl/tmp ramfs rw,relatime 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0
/dev/ubi1_0 /firmware ubifs ro,relatime,bulk_read,ubi=1,vol=0 0 0
none /sys/kernel/config configfs rw,relatime 0 0
adb /dev/usb-ffs/adb functionfs rw,relatime 0 0&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;# cat /proc/version 
Linux version 4.14.206-perf (builder@nvtlsdselbld06) (clang version 6.0.9 for Android NDK, GNU ld (GNU Binutils) 2.31.1.20181224) #1 PREEMPT Thu Apr 6 02:19:08 PDT 2023&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;# uname -a
Linux mifi 4.14.206-perf #1 PREEMPT Thu Apr 6 02:19:08 PDT 2023 armv7l GNU/Linux&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also, I may be crazy, but using the MBN profile ROW_Commercial instead of Commercial-TMO and a custom DNS server appears to solve my video throttling issue on T-Mobile.&lt;/p&gt;</content:encoded></item><item><title>Running a RIPE Atlas Probe on OpenWRT</title><link>https://parkercs.tech/running-a-ripe-atlas-probe-on-openwrt/</link><guid isPermaLink="true">https://parkercs.tech/running-a-ripe-atlas-probe-on-openwrt/</guid><description>The RIPE Atlas network is described as &quot;a global network of probes that measure Internet connectivity and reachability, providing an unprecedented understanding of the state of the Internet in real time.&quot;

RIPE can either provide a hardware probe that you plug into an ethernet port if you apply and are accepted, or you can run a software probe, not needing any additional hardware, and apply online.


Prerequisites

 * Create an account here and make note of your username/email address


Installi</description><pubDate>Thu, 12 Jan 2023 06:28:17 GMT</pubDate><content:encoded>&lt;p&gt;The RIPE Atlas network is described as &quot;a global network of probes that measure Internet connectivity and reachability, providing an unprecedented understanding of the state of the Internet in real time.&quot;&lt;/p&gt;&lt;p&gt;RIPE can either provide a hardware probe that you plug into an ethernet port if you apply and are accepted, or you can run a software probe, not needing any additional hardware, and apply online.&lt;/p&gt;&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Create an account &lt;a href=&quot;https://access.ripe.net/registration?ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt; and make note of your username/email address&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;installing-the-package&quot;&gt;Installing the package&lt;/h2&gt;&lt;p&gt;SSH into your OpenWRT device and enter the following commands:&lt;br&gt;&lt;code&gt;opkg update&lt;/code&gt;&lt;br&gt;&lt;code&gt;opkg install atlas-sw-probe&lt;/code&gt;&lt;/p&gt;&lt;h2 id=&quot;configuring-the-package&quot;&gt;Configuring the package&lt;/h2&gt;&lt;p&gt;This will install the appropriate package and its dependencies. It should print out something saying &lt;code&gt;Missing probe_key. To init the key follow instruction in /etc/atlas/atlas.readme&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;If we read the contents of that file, it reads:&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;# Atlas probe setup instruction

The atlas probe software requires a rsa 2048-4096 key for registration.

Follow these steps to register your probe on the ripe-atlas systems.
1. Insert your username in the atlas config file (/etc/config/atlas)
2. Use the command &apos;/etc/init.d/atlas create_key&apos; to create a priv/pub key.
3. The priv/pub key will be stored on the directory /etc/atlas/
4. Use the command &apos;/etc/init.d/atlas get_key&apos; to get the public key used for probe registration.
   Make sure to copy the entire key and that the last value is the correct username
5. Follow the instruction from the past command or go to &apos;https://atlas.ripe.net/apply/swprobe/&apos;
   and register your probe.
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;So we&apos;ll follow those instructions. OpenWRT includes the vi editor by default. So we will execute:&lt;/p&gt;&lt;p&gt;&lt;code&gt;vi /etc/config/atlas&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Using the arrow keys on your keyboard, place the cursor in between the quotes following the &lt;code&gt;option username&lt;/code&gt; line. Then, press I on your keyboard to enter insert mode, then enter your username, then press ESC to leave insert mode, followed by &lt;code&gt;:wq&lt;/code&gt; to save and quit the editor and pressing the enter key. You should be returned to the command prompt.&lt;/p&gt;&lt;p&gt;Next, we will run &lt;code&gt;/etc/init.d/atlas create_key&lt;/code&gt; to create our private and public key pairs. After it&apos;s done generating, run &lt;code&gt;/etc/init.d/atlas get_key&lt;/code&gt; to print the key in the terminal. It will print the URL to register your software probe, or you can click &lt;a href=&quot;https://atlas.ripe.net/apply/swprobe/?ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;registering-your-probe&quot;&gt;Registering your probe&lt;/h2&gt;&lt;p&gt;The page will ask for your AS number, which is an identifying number for your ISP and can be found by going &lt;a href=&quot;https://ipv4.lookup.test-ipv6.com/ip/?&amp;asn=1&amp;testdomain=test-ipv6.com&amp;testname=test_asn4&amp;ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt; and making note of the numbers following the &quot;asn&quot; array. Enter the city where your device is located, followed by the country. Finally, enter the public key that was returned by the &lt;code&gt;get_key&lt;/code&gt; command earlier.&lt;/p&gt;&lt;p&gt;The approval process is a manual one, and someone will have to approve your software probe to be placed on the network.&lt;/p&gt;&lt;h2 id=&quot;ensuring-atlas-starts-on-boot&quot;&gt;Ensuring Atlas starts on boot&lt;/h2&gt;&lt;p&gt;Finally, enter these last two commands in your terminal to enable and start the Atlas service.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;/etc/init.d/atlas enable
/etc/init.d/atlas start
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;That&apos;s it! Once your probe is approved, you should be able to view the data on it and be able to use the credits generated by your probe to fully utilize the Atlas network.&lt;/p&gt;</content:encoded></item><item><title>Secure DNS On A Linux-Based Hotspot</title><link>https://parkercs.tech/doh-on-a-linux-based-hotspot/</link><guid isPermaLink="true">https://parkercs.tech/doh-on-a-linux-based-hotspot/</guid><description>In my previous posts, I talked about the Netgear MR1100 and T-Mobile TMOHS1 hotspots. In them, I briefly spoke about mods you can perform on those devices, including modifying the TTL and changing the DNS servers. But I wanted a little more security on the DNS side, especially because we know that carriers perform deep packet inspection and God knows what else on their networks.

Originally I planned to use cloudflared in its DNS mode, however, the binary file was much too big (~26MB) for the re</description><pubDate>Sun, 10 Jul 2022 06:05:54 GMT</pubDate><content:encoded>&lt;p&gt;In my previous posts, I talked about the Netgear MR1100 and T-Mobile TMOHS1 hotspots. In them, I briefly spoke about mods you can perform on those devices, including modifying the TTL and changing the DNS servers. But I wanted a little more security on the DNS side, especially because we know that carriers perform deep packet inspection and God knows what else on their networks.&lt;/p&gt;&lt;p&gt;Originally I planned to use &lt;a href=&quot;https://github.com/Cloudflare/cloudflared?ref=ghost.parkercs.tech&quot;&gt;cloudflared&lt;/a&gt; in its DNS mode, however, the binary file was much too big (~26MB) for the relatively small file systems on these devices and did not work half the time. I gave up, but then I remembered &lt;a href=&quot;https://github.com/DNSCrypt/dnscrypt-proxy?ref=ghost.parkercs.tech&quot;&gt;dnscrypt-proxy&lt;/a&gt;. And luckily for us, its binary file size is much more forgiving at only ~7.5MB.&lt;/p&gt;&lt;p&gt;I&apos;m going to be using a custom Cloudflare Zero Trust DoH server for the upstream requests on my hotspot. dnscrypt-proxy has many built-in servers and a list can be found &lt;a href=&quot;https://dnscrypt.info/public-servers/?ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt;. It also supports a vast amount of protocols, including but not limited to, DNScrypt, DNS over HTTPS, Oblivious DNS over HTTPS, and plain old DNS.&lt;/p&gt;&lt;h2 id=&quot;overview&quot;&gt;Overview&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Downloading dnscrypt-proxy on the device&lt;/li&gt;&lt;li&gt;Modifying the config file&lt;/li&gt;&lt;li&gt;Adding CA Certs&lt;/li&gt;&lt;li&gt;Creating a script to make dnscrypt-proxy run on boot&lt;/li&gt;&lt;li&gt;Changing the hotspot settings to use the new DNS settings&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;downloading-dnscrypt-proxy-on-the-device&quot;&gt;Downloading dnscrypt-proxy On the Device&lt;/h3&gt;&lt;p&gt;First, we need to get to a root shell on the device which I discussed how to do in my other posts. Then we&apos;ll navigate to the &lt;code&gt;/tmp&lt;/code&gt; folder and grab the dnscrypt-proxy tar and untar it.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;cd /tmp
wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/download/2.1.1/dnscrypt-proxy-linux_arm-2.1.1.tar.gz
tar -xf dnscrypt-proxy-linux_arm-2.1.1.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;If we do a &lt;code&gt;ls&lt;/code&gt; now, we should see a linux-arm folder.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2022/07/image.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;661&quot; height=&quot;418&quot; srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2022/07/image.png 600w, https://ghost.parkercs.tech/content/images/2022/07/image.png 661w&quot;&gt;&lt;/figure&gt;&lt;p&gt;Now we will change the directory into that folder and move some files to their appropriate location.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;cd linux-arm/
mv dnscrypt-proxy /bin
mv example-dnscrypt-proxy.toml /etc/dnscrypt-proxy.toml
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2022/07/image-1.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;661&quot; height=&quot;418&quot; srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2022/07/image-1.png 600w, https://ghost.parkercs.tech/content/images/2022/07/image-1.png 661w&quot;&gt;&lt;/figure&gt;&lt;h2 id=&quot;modifying-the-config-file&quot;&gt;Modifying the Config File&lt;/h2&gt;&lt;p&gt;Now that we&apos;ve moved all the needed files to their appropriate location we can edit the config file for dnscrypt-proxy. This will allow us to set our upstream servers and our binding address, because we cannot have dnscrypt-proxy and dnsmasq both listening on 127.0.0.1:53, so we&apos;ll assign dnscrypt-proxy 127.0.1.200:53, and then tell the system to forward to that address. I recommend you visit the wiki &lt;a href=&quot;https://github.com/DNSCrypt/dnscrypt-proxy/wiki/Configuration?ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt; and learn how the config file works.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;cd /etc
vi dnscrypt-proxy.toml
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;Line 32 in this file is where you specify your servers. Make sure to uncomment the line if you want to use servers other than the default so it is parsed accordingly. Line 42 is where we change our binding address, so change this 127.0.1.200:53. At the very bottom of the config is where you can specify custom servers using what&apos;s called a DNS stamp. &lt;a href=&quot;https://dnscrypt.info/stamps/?ref=ghost.parkercs.tech&quot;&gt;This&lt;/a&gt; is a good generator.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2022/07/image-2.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;516&quot; height=&quot;36&quot;&gt;&lt;figcaption&gt;use custom servers with the line uncommented&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2022/07/image-3.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;307&quot; height=&quot;34&quot;&gt;&lt;figcaption&gt;new listen address&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;If you choose to leave the server_names lines commented out, dnscrypt-proxy will choose servers that follow the options in the lines farther down.&lt;/p&gt;&lt;h2 id=&quot;adding-ca-certs&quot;&gt;Adding CA Certs&lt;/h2&gt;&lt;p&gt;Once you&apos;ve edited your config, we need to add ca-certificates to the system so dnscrypt-proxy can verify that we are connecting to a server with a valid certificate. We are going to place the file in &lt;code&gt;/etc/ssl/certs/ca-certificates.crt&lt;/code&gt;&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;mkdir ssl
mkdir ssl/certs
cd ssl/certs/
wget https://curl.se/ca/cacert.pem
mv cacert.pem ca-certificates.crt
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2022/07/image-4.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;661&quot; height=&quot;418&quot; srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2022/07/image-4.png 600w, https://ghost.parkercs.tech/content/images/2022/07/image-4.png 661w&quot;&gt;&lt;/figure&gt;&lt;p&gt;Verify that everything is setup by running &lt;code&gt;dnscrypt-proxy -config /etc/dnscrypt-proxy.toml&lt;/code&gt;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2022/07/image-5.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;654&quot; height=&quot;241&quot; srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2022/07/image-5.png 600w, https://ghost.parkercs.tech/content/images/2022/07/image-5.png 654w&quot;&gt;&lt;/figure&gt;&lt;h2 id=&quot;making-a-script-to-run-on-boot&quot;&gt;Making a Script to Run On Boot&lt;/h2&gt;&lt;p&gt;We&apos;re going to change directory to &lt;code&gt;/etc/init.d/&lt;/code&gt; and create a script that will wait 15 seconds on boot, then start dnscrypt-proxy. This gives the system time to establish a network connection and generally is safer than running immediately when the system comes up.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;cd /etc/init.d
vi dnscrypt-proxy.sh
chmod +x dnscrypt-proxy.sh
ln -s /etc/init.d/dnscrypt-proxy.sh /etc/rc5.d/S98dnscrypt-proxy
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;Contents of &lt;code&gt;dnscrypt-proxy.sh&lt;/code&gt;:&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;#!/bin/sh
sleep 15 &amp;amp;&amp;amp; \
/bin/dnscrypt-proxy -config /etc/dnscrypt-proxy.toml &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;Reboot the hotspot, and dnscrypt-proxy should be running! You can verify by performing a nslookup on the device itself.&lt;/p&gt;&lt;h2 id=&quot;changing-the-hotspot-settings-to-use-the-new-server&quot;&gt;Changing the Hotspot Settings to Use the New Server&lt;/h2&gt;&lt;p&gt;On the MR1100, in the webUI, enable manual DNS and set DNS 1 to 127.0.1.200 and DNS 2 to 0.0.0.0. On the TMOHS1, edit the /etc/init.d/customdns.sh script with the new IP. A reboot may be needed to apply the changes.&lt;/p&gt;&lt;h3 id=&quot;helpful-links&quot;&gt;Helpful Links&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/DNSCrypt/dnscrypt-proxy/wiki?ref=ghost.parkercs.tech&quot;&gt;DNSCrypt Documentation&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;https://dnscrypt.info/public-servers?ref=ghost.parkercs.tech&quot;&gt;DNSCrypt Server List&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;https://dnscrypt.info/stamps?ref=ghost.parkercs.tech&quot;&gt;DNS Stamp Calculator&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;https://www.redhat.com/sysadmin/introduction-vi-editor?ref=ghost.parkercs.tech&quot;&gt;How to Use Vim&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Netgear MR1100 Hotspot</title><link>https://parkercs.tech/netgear-mr1100-hotspot/</link><guid isPermaLink="true">https://parkercs.tech/netgear-mr1100-hotspot/</guid><description>After receiving a T-Mobile TMOHS1 hotspot, I was left craving a little more. I hopped on eBay, searched up for an MR1100 hotspot, and found an ATT model with a bad SIM reader for ~$50! Bought it, took a small knife to the gold contacts on the reader, and pushed them up a little, and we&apos;re up and running!

I&apos;ve been using the T-Mobile $10 business unlimited tablet plan, and I have read online that T-Mobile specifically blocks the IMEIs of MR1100s unless they&apos;re on specific hotspot plans. So my fi</description><pubDate>Tue, 05 Apr 2022 17:42:52 GMT</pubDate><content:encoded>&lt;p&gt;After receiving a T-Mobile TMOHS1 hotspot, I was left craving a little more. I hopped on eBay, searched up for an MR1100 hotspot, and found an ATT model with a bad SIM reader for ~$50! Bought it, took a small knife to the gold contacts on the reader, and pushed them up a little, and we&apos;re up and running!&lt;/p&gt;&lt;p&gt;I&apos;ve been using the T-Mobile $10 business unlimited tablet plan, and I have read online that T-Mobile specifically blocks the IMEIs of MR1100s unless they&apos;re on specific hotspot plans. So my first step in my plan was to modify/perform magic/change/alter/etc. the IMEI.&lt;/p&gt;&lt;p&gt;I have gone ahead and flashed my ATT hotspot to the generic software, as I don&apos;t need the LAA feature, and I trust Netgear&apos;s firmware a little more than ATT&apos;s.&lt;/p&gt;&lt;h2 id=&quot;performing-magic&quot;&gt;Performing &quot;Magic&quot;&lt;/h2&gt;&lt;p&gt;In online forums, modifying the IMEI is typically referred to as &quot;performing magic&quot; on a device. Modification of the IMEI is a legal gray area in the US as you&apos;re only supposed to change the IMEI to a device you already own, i.e. a tablet. I won&apos;t be delving into how to obtain a tablet IMEI in this guide, sorry!&lt;/p&gt;&lt;p&gt;Regardless, let&apos;s hop right into it!&lt;/p&gt;&lt;p&gt;First, connect the MR1100 to your computer via USB, and use your favorite telnet client to telnet to your hotspot&apos;s IP at port 5510. Nothing will automatically display, but you should be able to type &lt;code&gt;ati&lt;/code&gt; and get a response.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;http://res-4.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;452&quot; height=&quot;442&quot;&gt;&lt;figcaption&gt;PuTTY settings&lt;/figcaption&gt;&lt;/figure&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;ati
ati
Manufacturer: Netgear, Incorporated
Model: MR1100
Revision: NTG9X50C_12.06.11.00 r3831 ntgrbc-fwbuild4 2020/01/24 17:46:40
IMEI: xxx
IMEI SV: 13
FSN: xxx
+GCAP: +CGSM


OK
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;h3 id=&quot;unlocking-the-advanced-settings&quot;&gt;Unlocking the Advanced Settings&lt;/h3&gt;&lt;p&gt;We need to clone &lt;a href=&quot;https://replit.com/repls/TreasuredTornRouter?ref=ghost.parkercs.tech&quot;&gt;this&lt;/a&gt; Replit repo, as this gives us the script needed to modify the IMEI all in one place. In the Shell tab, we need to run &lt;code&gt;pip3 install -r requirements.txt&lt;/code&gt;&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;~/TreasuredTornRouter$ pip3 install -r requirements.txt 
Collecting pyserial
  Using cached pyserial-3.5-py2.py3-none-any.whl
Installing collected packages: pyserial
Successfully installed pyserial-3.5
WARNING: You are using pip version 21.2.dev0; however, version 22.0.4 is available.
You should consider upgrading via the &apos;/opt/virtualenvs/python3/bin/python3 -m pip install --upgrade pip&apos; command.
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;Back in PuTTY, we need to type &lt;code&gt;AT!OPENLOCK?&lt;/code&gt; to get the string needed to get the unlock token. Copy the string to your clipboard.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;AT!OPENLOCK?
1240396BFCEA38E7

OK
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;Now we need to enter the command &lt;code&gt;./sierrakeygen.py -l &apos;string&apos; -d MDM9x50_v1&lt;/code&gt;, replacing &apos;string&apos; with the string you copied and without quotes.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;~/TreasuredTornRouter$ ./sierrakeygen.py -l 1240396BFCEA38E7 -d MDM9x50_V1
AT!OPENLOCK=&amp;quot;BCC54829A0CBE8DE&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;The output of that command is what we need to copy and paste into PuTTY to unlock the advanced settings on the device. &lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;AT!OPENLOCK=&amp;quot;BCC54829A0CBE8DE&amp;quot;
AT!OPENLOCK=&amp;quot;BCC54829A0CBE8DE&amp;quot;
OK
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;h3 id=&quot;modifying-imei&quot;&gt;Modifying IMEI&lt;/h3&gt;&lt;p&gt;Next, enter &lt;code&gt;AT!NVIMEIUNLOCK&lt;/code&gt;.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;AT!NVIMEIUNLOCK
AT!NVIMEIUNLOCK
OK
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;Now here&apos;s where we put in our IMEI. For example, if the IMEI we want to change it to is 123456789012347, we type &lt;code&gt;AT!NVENCRYPTIMEI=12,34,56,78,90,12,34,70&lt;/code&gt;.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;AT!NVENCRYPTIMEI=12,34,56,78,90,12,34,70
AT!NVENCRYPTIMEI=12,34,56,78,90,12,34,70
OK
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;Type &lt;code&gt;ATI&lt;/code&gt; to verify our changes applied, and then type &lt;code&gt;AT!RESET&lt;/code&gt;.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;ati
ati
Manufacturer: Netgear, Incorporated
Model: MR1100
Revision: NTG9X50C_12.06.11.00 r3831 ntgrbc-fwbuild4 2020/01/24 17:46:40
IMEI: 123456789012347
IMEI SV: 13
FSN: xxx
+GCAP: +CGSM

AT!RESET
AT!RESET
OK
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;Done!&lt;/p&gt;&lt;h2 id=&quot;modifying-ttl&quot;&gt;Modifying TTL&lt;/h2&gt;&lt;p&gt;I&apos;ve read online a lot of places that claim that modifying the TTL on the MR1100 is not possible. This couldn&apos;t be further from the truth. We just need to enable the root telnet shell, and then create a script that runs on boot to masquerade the TTL.&lt;/p&gt;&lt;p&gt;First, we need to enable the advanced settings of the hotspot as we did above with the python script. After that, enter &lt;code&gt;AT!TELEN=1&lt;/code&gt;, followed by &lt;code&gt;AT!CUSTOM=&quot;RDENABLE&quot;, 1&lt;/code&gt;. Then reboot the device.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;AT!TELEN=1
AT!TELEN=1
OK
AT!CUSTOM=&amp;quot;RDENABLE&amp;quot;, 1
AT!CUSTOM=&amp;quot;RDENABLE&amp;quot;, 1
OK
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;Now we need to open a new telnet session, this time at the standard telnet port. You should be dropped straight into a shell.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;msm 202001241807 mdm9650

/ #
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;Now simply just enter the following commands and reboot the device!&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;echo &amp;quot;iptables -t mangle -I POSTROUTING -o rmnet_data+ -j TTL --ttl-set 64&amp;quot; &amp;gt; /etc/init.d/ttl.sh
echo &amp;quot;ip6tables -t mangle -I POSTROUTING -o rmnet_data+ -m hl ! --hl-eq 255 -j HL --hl-set 64&amp;quot; &amp;gt;&amp;gt; /etc/init.d/ttl.sh
chmod 755 /etc/init.d/ttl.sh
ln -s /etc/init.d/ttl.sh /etc/rc5.d/S98ttl
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;Note, I recommend after rebooting to disable the root shell telnet. This can be done by entering the advanced settings in the port 5510 telnet session and entering &lt;code&gt;AT!TELEN=0&lt;/code&gt;and&lt;code&gt;AT!CUSTOM=&quot;RDENABLE&quot;, 0&lt;/code&gt;, and rebooting once more.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;AT!TELEN=0
AT!TELEN=0
OK
AT!CUSTOM=&amp;quot;RDENABLE&amp;quot;, 0
AT!CUSTOM=&amp;quot;RDENABLE&amp;quot;, 0
OK
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;h2 id=&quot;using-ipv6-dns-servers&quot;&gt;Using IPv6 DNS Servers&lt;/h2&gt;&lt;p&gt;A step up from the TMOHS1 hotspot, this one lets us specify the DNS servers for our clients. However, it will only let us use IPv4 servers...sigh. The resolv.conf file for this device is stored in &lt;code&gt;/mnt/userrw/swietc/resolv.conf&lt;/code&gt;. So we simply create a script in &lt;code&gt;/etc/init.d/customdns.sh&lt;/code&gt; with the contents:&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;#!/bin/sh

(while true
    do echo &amp;quot;nameserver 2606:4700:4700::1111&amp;quot; &amp;gt; /mnt/userrw/swietc/resolv.conf
    sleep 15
done) &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;Make it executable:&lt;br&gt;&lt;code&gt;chmod 755 /etc/init.d/customdns.sh&lt;/code&gt;&lt;br&gt;and finally:&lt;br&gt;&lt;code&gt;ln -s /etc/init.d/customdns.sh /etc/rc5.d/S98customdns&lt;/code&gt;.&lt;/p&gt;</content:encoded></item><item><title>T-Mobile TMOHS1 Hotspot</title><link>https://parkercs.tech/tmohs1/</link><guid isPermaLink="true">https://parkercs.tech/tmohs1/</guid><description>A lovely little hotspot with an even lovelier backdoor.</description><pubDate>Sat, 26 Mar 2022 08:43:05 GMT</pubDate><content:encoded>&lt;figure class=&quot;kg-card kg-bookmark-card&quot;&gt;&lt;a class=&quot;kg-bookmark-container&quot; href=&quot;https://github.com/parker-stephens/TMOHS1-Root-Utility?ref=ghost.parkercs.tech&quot;&gt;&lt;div class=&quot;kg-bookmark-content&quot;&gt;&lt;div class=&quot;kg-bookmark-title&quot;&gt;GitHub - parker-stephens/TMOHS1-Root-Utility: An interactive python script that enables root access on the T-Mobile (Wingtech) TMOHS1, as well as providing several useful utilites to change the configuration of the device.&lt;/div&gt;&lt;div class=&quot;kg-bookmark-description&quot;&gt;An interactive python script that enables root access on the T-Mobile (Wingtech) TMOHS1, as well as providing several useful utilites to change the configuration of the device. - GitHub - parker-st...&lt;/div&gt;&lt;div class=&quot;kg-bookmark-metadata&quot;&gt;&lt;img class=&quot;kg-bookmark-icon&quot; src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot;&gt;&lt;span class=&quot;kg-bookmark-author&quot;&gt;GitHub&lt;/span&gt;&lt;span class=&quot;kg-bookmark-publisher&quot;&gt;parker-stephens&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;kg-bookmark-thumbnail&quot;&gt;&lt;img src=&quot;https://opengraph.githubassets.com/6437f63b74b50fa5410603f987f501e1cc87eb54c6d678e87f10805733492d3e/parker-stephens/TMOHS1-Root-Utility&quot; alt=&quot;&quot;&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;h2 id=&quot;modifying-all-outgoing-ttl&quot;&gt;Modifying All Outgoing TTL&lt;/h2&gt;&lt;p&gt;Essentially masks all outgoing data as &quot;on-device&quot; rather than hotspot data. This will apply on each boot automatically.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;echo &amp;quot;iptables -t mangle -I POSTROUTING -o rmnet_data+ -j TTL --ttl-set 64&amp;quot; &amp;gt; /etc/init.d/ttl.sh
echo &amp;quot;ip6tables -t mangle -I POSTROUTING -o rmnet_data+ -m hl ! --hl-eq 255 -j HL --hl-set 64&amp;quot; &amp;gt;&amp;gt; /etc/init.d/ttl.sh
chmod 755 /etc/init.d/ttl.sh
ln -s /etc/init.d/ttl.sh /etc/rc5.d/S98ttl
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;h2 id=&quot;using-custom-dns-servers&quot;&gt;Using Custom DNS Server(s)&lt;/h2&gt;&lt;p&gt;Editing &lt;code&gt;/etc/resolv.conf&lt;/code&gt; provides a temporary fix, but this file will be overwritten again on reboot, and even randomly while it&apos;s on. So let&apos;s make a script to defeat that!&lt;br&gt;Create &lt;code&gt;/etc/init.d/customdns.sh&lt;/code&gt; with the contents:&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;#!/bin/sh

(while true
    do echo &amp;quot;nameserver 1.1.1.1&amp;quot; &amp;gt; /etc/resolv.conf
    sleep 15
done) &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;This will make the script repeat every 15 seconds, ensuring that our DNS change sticks. You can replace 1.1.1.1 with whatever IPv4/6 server you want.&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;chmod 755 /etc/init.d/customdns.sh
ln -s /etc/init.d/customdns.sh /etc/rc5.d/S98customdns
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;h2 id=&quot;allowing-more-devices-on-wifi&quot;&gt;Allowing More Devices On WiFi&lt;/h2&gt;&lt;p&gt;By default, the hotspot allows a maximum of 10 devices on a WiFi network, but we can change this to whatever we want. Edit the &lt;code&gt;max_num_sta&lt;/code&gt; line in &lt;code&gt;/data/configs/hostapd.conf&lt;/code&gt; for the 2.4GHz network or &lt;code&gt;/data/configs/hostapd-wlan1.conf&lt;/code&gt; for the 5GHz network. There is also a file in &lt;code&gt;/data/wlan_cfg/max_num&lt;/code&gt;, but this doesn&apos;t seem to do anything.&lt;/p&gt;&lt;h2 id=&quot;changing-usb-mode&quot;&gt;Changing USB Mode&lt;/h2&gt;&lt;p&gt;At a shell:&lt;br&gt;ADB: &lt;code&gt;/sbin/usb/compositions/9025&lt;/code&gt;&lt;br&gt;ADB + RNDIS + DIAG: &lt;code&gt;/sbin/usb/compositions/902D&lt;/code&gt;&lt;br&gt;Default: &lt;code&gt;/sbin/usb/compositions/9057&lt;/code&gt;&lt;/p&gt;&lt;p&gt;I&apos;ve had trouble identifying whether or not this device has a MDM9207 or a MDM9607 (X5) modem, as the internal FCC photos show a MDM9207 modem and QPST also says MDM9207, but my hotspot&apos;s software references the MDM9607 several times, and considering I&apos;m able to hit speeds of 75/15 (QCOM says the MDM9207 is only capable of 10/5), I&apos;m just gonna assume it has the MDM9607 modem.&lt;/p&gt;&lt;p&gt;Considering that T-Mobile is literally handing these out for free with 30GB of data, I hope that eventually someone will figure out how to SIM unlock these devices. It appears as though there haven&apos;t been any software updates after ~January 2021 (device is on software version TMOHS1_0.04.18, and I&apos;m able to find Google results about that version from around those times, but hell, it&apos;s possible it&apos;s even older than that).&lt;/p&gt;&lt;figure class=&quot;kg-card kg-bookmark-card&quot;&gt;&lt;a class=&quot;kg-bookmark-container&quot; href=&quot;https://www.t-mobile.com/offers/free-trial?ref=ghost.parkercs.tech&quot;&gt;&lt;div class=&quot;kg-bookmark-content&quot;&gt;&lt;div class=&quot;kg-bookmark-title&quot;&gt;Free 30-Day Trial with Test Drive® | App &amp;amp; Hotspot Device | T-Mobile&lt;/div&gt;&lt;div class=&quot;kg-bookmark-description&quot;&gt;Try our network with a 30-day or 30GB free trial. Choose to Test Drive® with a mobile hotspot device or an iOS app and keep your phone, number, and apps.&lt;/div&gt;&lt;div class=&quot;kg-bookmark-metadata&quot;&gt;&lt;img class=&quot;kg-bookmark-icon&quot; src=&quot;https://www.t-mobile.com/favicon.ico&quot; alt=&quot;&quot;&gt;&lt;span class=&quot;kg-bookmark-author&quot;&gt;Try T-Mobile free for 30 days or 30GB of data and experience our expanded network without leaving your current carrier or losing your phone number.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;kg-bookmark-thumbnail&quot;&gt;&lt;img src=&quot;https://cdn.tmobile.com/content/dam/t-mobile/assets/backgrounds/hero/general/358590-fade-bg-23.desktop.png&quot; alt=&quot;&quot;&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;kg-card kg-bookmark-card&quot;&gt;&lt;a class=&quot;kg-bookmark-container&quot; href=&quot;https://fccid.io/2APXW-TMOHS1?ref=ghost.parkercs.tech&quot;&gt;&lt;div class=&quot;kg-bookmark-content&quot;&gt;&lt;div class=&quot;kg-bookmark-title&quot;&gt;FCC ID 2APXW-TMOHS1 4G Mobile Broadband Router by Wingtech Group (Hong Kong) Limited&lt;/div&gt;&lt;div class=&quot;kg-bookmark-description&quot;&gt;FCC ID application submitted by Wingtech Group (Hong Kong) Limited for 4G Mobile Broadband Router for FCC ID 2APXW-TMOHS1. Approved Frequencies, User Manuals, Photos, and Wireless Reports.&lt;/div&gt;&lt;div class=&quot;kg-bookmark-metadata&quot;&gt;&lt;img class=&quot;kg-bookmark-icon&quot; src=&quot;https://fccid.io/logo.png&quot; alt=&quot;&quot;&gt;&lt;span class=&quot;kg-bookmark-author&quot;&gt;FCC ID&lt;/span&gt;&lt;span class=&quot;kg-bookmark-publisher&quot;&gt;FCC ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;kg-bookmark-thumbnail&quot;&gt;&lt;img src=&quot;https://fccid.io/png.php?id&amp;#x3D;4987085&amp;amp;page&amp;#x3D;0&quot; alt=&quot;&quot;&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;ati: (what the hell? i guess it&apos;s a MDM9607??)&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;Manufacturer: QUALCOMM INCORPORATED
Model: 4108
Revision: MPSS.JO.2.0.2.c1.7-00052-9607_GENNS_PACK-1  1  [Jul 17 2020 11:00:00]
SVN: 04
IMEI: ###############
+GCAP: +CGSM

OK
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;p&gt;at+cgdcont=?&lt;/p&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;pre&gt;&lt;code&gt;+CGDCONT: (1-24),&amp;quot;IP&amp;quot;,,,(0-2),(0-4),(0-1),(0-1)
+CGDCONT: (1-24),&amp;quot;PPP&amp;quot;,,,(0-2),(0-4),(0-1),(0-1)
+CGDCONT: (1-24),&amp;quot;IPV6&amp;quot;,,,(0-2),(0-4),(0-1),(0-1)
+CGDCONT: (1-24),&amp;quot;IPV4V6&amp;quot;,,,(0-2),(0-4),(0-1),(0-1)

OK
&lt;/code&gt;&lt;/pre&gt;
&lt;!--kg-card-end: markdown--&gt;</content:encoded></item><item><title>Cloudflare for Teams Wireguard Config</title><link>https://parkercs.tech/cloudflare-for-teams-wireguard-config/</link><guid isPermaLink="true">https://parkercs.tech/cloudflare-for-teams-wireguard-config/</guid><description>Warning

I&apos;m going to go ahead and say this isn&apos;t a task for the weak and feeble. This isn&apos;t a method supported by Cloudflare, and could be against their TOS for all I know, thus making this process not straightforward.


Summary

This process involved installing the Android SDK on Windows with the AVD manager, using some command line knowledge, and knowing how to setup a Wireguard tunnel.

We will make a device running Lollipop, as this allows us to extract the Wireguard configuration from the </description><pubDate>Fri, 23 Jul 2021 19:01:39 GMT</pubDate><content:encoded>&lt;h3 id=&quot;warning&quot;&gt;Warning&lt;/h3&gt;&lt;p&gt;I&apos;m going to go ahead and say this isn&apos;t a task for the weak and feeble. This isn&apos;t a method supported by Cloudflare, and could be against their TOS for all I know, thus making this process not straightforward.&lt;/p&gt;&lt;h3 id=&quot;summary&quot;&gt;Summary&lt;/h3&gt;&lt;p&gt;This process involved installing the Android SDK on Windows with the AVD manager, using some command line knowledge, and knowing how to setup a Wireguard tunnel.&lt;/p&gt;&lt;p&gt;We will make a device running Lollipop, as this allows us to extract the Wireguard configuration from the device, as in newer versions of Android this is locked down in hardware.&lt;/p&gt;&lt;h2 id=&quot;the-process&quot;&gt;The Process&lt;/h2&gt;&lt;p&gt;First, let&apos;s go ahead and install the latest Android SDK from &lt;a href=&quot;https://developer.android.com/studio?ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt;. In the install process, make sure AVD Manager is checked and will be installed on the hard drive. We also want Android platform-tools, as this includes ADB which we will need later on. Download that from &lt;a href=&quot;https://developer.android.com/studio/releases/platform-tools?ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt; and just extract it into a folder.&lt;/p&gt;&lt;h3 id=&quot;creating-our-android-device&quot;&gt;Creating our Android Device&lt;/h3&gt;&lt;p&gt;Go ahead and launch Android Studio, and select AVD manager under the configure dropdown.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-2.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-4.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;763&quot; height=&quot;760&quot;&gt;&lt;/figure&gt;&lt;p&gt;A new windows will appear. Go ahead and select &quot;Create Virtual Device.&quot;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-2.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-6.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;484&quot;&gt;&lt;/figure&gt;&lt;p&gt;Select Tablet in the Category pane, and Nexus 7 (not 2012!) in the Device pane.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-5.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-7.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;1003&quot; height=&quot;644&quot;&gt;&lt;/figure&gt;&lt;p&gt;In the &quot;Select a system image&quot; window, select Lollipop and select the download button next to it. Click accept on the terms, and wait for it to download. Select Lollipop and click next.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-3.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-8.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;999&quot; height=&quot;645&quot;&gt;&lt;/figure&gt;&lt;p&gt;We don&apos;t need to change anything on this next window, so go ahead and select &quot;Finish.&quot;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-3.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-9.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;998&quot; height=&quot;647&quot;&gt;&lt;/figure&gt;&lt;p&gt;Select the play button inside the device you just created.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-5.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-10.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;718&quot; height=&quot;485&quot;&gt;&lt;/figure&gt;&lt;p&gt;If all went well, you should now be greeted with the Android homescreen!&lt;/p&gt;&lt;h3 id=&quot;installing-1111-on-the-android-device&quot;&gt;Installing 1.1.1.1 on the Android Device&lt;/h3&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-1.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-11.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;1139&quot;&gt;&lt;/figure&gt;&lt;p&gt;Now on your computer, open your web browser and head to APKMirror &lt;a href=&quot;https://www.apkmirror.com/apk/cloudflare/1-1-1-1-faster-safer-internet/?ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt; to download the latest APK of 1.1.1.1. Note that we want the APK, not a bundle. Once your apk is downloaded, place it in the folder you extracted platform-tools to. Your folder should look like something below.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-2.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-12.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;1126&quot; height=&quot;630&quot;&gt;&lt;/figure&gt;&lt;p&gt;Go ahead and shift+right-click in the folder, and select &quot;Open Powershell window here&quot; or &quot;Open Command Prompt windows here,&quot; depending on what version on Windows you have, or whatever your preference is. Type &lt;code&gt;adb.exe devices&lt;/code&gt;. This should list your emulator as a device.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-2.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-13.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;567&quot; height=&quot;113&quot;&gt;&lt;/figure&gt;&lt;p&gt;Now we want to install 1.1.1.1 onto the Android device. Type &lt;code&gt;adb.exe install &quot;apk name here&quot;&lt;/code&gt;.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-5.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-14.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;826&quot; height=&quot;152&quot;&gt;&lt;/figure&gt;&lt;p&gt;And like magic, 1.1.1.1 should show up in the app drawer now!&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-2.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-15.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;636&quot; height=&quot;1127&quot;&gt;&lt;/figure&gt;&lt;h3 id=&quot;logging-into-cloudflare-for-teams-on-the-device&quot;&gt;Logging into Cloudflare for Teams on the Device&lt;/h3&gt;&lt;p&gt;If you have set up Cloudflare for Teams on any other mobile device, the process is the exact same here. Click the hamburger, &quot;Account,&quot; &quot;Login with Cloudflare for Teams.&quot;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-5.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-16.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;108&quot; height=&quot;86&quot;&gt;&lt;/figure&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-4.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-17.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;541&quot; height=&quot;486&quot;&gt;&lt;/figure&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-3.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-18.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;539&quot; height=&quot;581&quot;&gt;&lt;/figure&gt;&lt;p&gt;Go ahead and enter your organization name, and proceed with whatever login method is set up.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-4.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-19.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;545&quot; height=&quot;480&quot;&gt;&lt;/figure&gt;&lt;p&gt;And just like that Teams is set up on the device. Now it&apos;s time to extract the Wireguard configuration.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-3.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/image-20.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;545&quot; height=&quot;860&quot;&gt;&lt;/figure&gt;&lt;h3 id=&quot;pulling-the-wireguard-configuration&quot;&gt;Pulling the Wireguard Configuration&lt;/h3&gt;&lt;p&gt;Go back into Powershell/Command Prompt, and type &lt;code&gt;adb pull /data/data/com.cloudflare.onedotonedotonedotone/shared_prefs/com.cloudflare.onedotonedotonedotone_preferences.xml&lt;/code&gt;. This will place the configuration in the platform-tools folder. Go ahead and open it with your favorite editor, VS Code in my case.&lt;/p&gt;&lt;h3 id=&quot;tunnel-info&quot;&gt;Tunnel Info&lt;/h3&gt;&lt;p&gt;Within our XML file, we need to make note of a couple items.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Peer Public Key&lt;/li&gt;&lt;li&gt;Peer IP Address&lt;/li&gt;&lt;li&gt;Peer Port&lt;/li&gt;&lt;li&gt;Client IP/s&lt;/li&gt;&lt;li&gt;Client Private Key&lt;/li&gt;&lt;li&gt;Client Registration ID&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You might have to dig around in the XML to find these, but in my case here are my values (don&apos;t worry, it won&apos;t work after).&lt;/p&gt;&lt;p&gt;Endpoint Public Key: &lt;code&gt;bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=&lt;/code&gt;&lt;br&gt;Endpoint IP Address: &lt;code&gt;162.159.193.10&lt;/code&gt; and &lt;code&gt;[2606:4700:100::a29f:c10a]&lt;/code&gt;&lt;br&gt;Peer Port: &lt;code&gt;2408&lt;/code&gt; (Note, if this is blocked by a firewall, port 500, 1701, and 4500 are also valid.)&lt;br&gt;Client IP: &lt;code&gt;172.16.0.2&lt;/code&gt; and &lt;code&gt;fd01:5ca1:ab1e:8f0c:9fb5:4cdd:ea7e:f0d3&lt;/code&gt;&lt;br&gt;Client Private Key: &lt;code&gt;Q28IK1ygu1MT4wumEoBf3Gl6+awKgyS3X+ioEi2HGnE=&lt;/code&gt; (I have revoked this, it will not work for you.)&lt;br&gt;Client Registration ID: &lt;code&gt;t.f634e942-ebe5-11eb-9b1d-a6b0c2bd8c0a&lt;/code&gt; (This is used to create Identity based-policies and other things in the Cloudflare for Teams dashboard. Note, the &quot;t.&quot; part won&apos;t be present in the dashboard.)&lt;/p&gt;&lt;h3 id=&quot;all-done&quot;&gt;All done!&lt;/h3&gt;&lt;p&gt;That&apos;s it! Now you can use that in pfSense to treat your whole network as one device in the dashboard, use it on a device that doesn&apos;t support the 1.1.1.1 app but supports Wireguard, or anything else you put your mind to. &lt;/p&gt;&lt;p&gt;Keep in mind, some online service will recognize the Warp IP as a VPN. Specifically Hulu (but not Netflix?), Wikipedia, and others. You can try using split tunneling, but this will have to be configured on the local device, not the Cloudflare for Teams dashboard. &lt;/p&gt;</content:encoded></item><item><title>Joining the NTP Pool</title><link>https://parkercs.tech/joining-the-ntp-pool/</link><guid isPermaLink="true">https://parkercs.tech/joining-the-ntp-pool/</guid><description>What is NTP?

NTP, or Network Time Protocol is a UDP-based protocol on port 123 that allows computers to sync their time over the internet. NTP servers have different levels on a hierarchy based system, or stratums, with the highest at 0 being the reference clock sources that are not made public and are connected directly to stratum 1 servers, and so on and so forth. Endpoints such as your phone, computer, router, etc, can connect to any server at or below stratum 1.


What Is the NTP Pool?

The</description><pubDate>Tue, 06 Apr 2021 02:30:46 GMT</pubDate><content:encoded>&lt;h2 id=&quot;what-is-ntp&quot;&gt;What is NTP?&lt;/h2&gt;&lt;p&gt;NTP, or Network Time Protocol is a UDP-based protocol on port 123 that allows computers to sync their time over the internet. NTP servers have different levels on a hierarchy based system, or stratums, with the highest at 0 being the reference clock sources that are not made public and are connected directly to stratum 1 servers, and so on and so forth. Endpoints such as your phone, computer, router, etc, can connect to any server at or below stratum 1.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2021/01/image-4.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;709&quot; srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2021/01/image-4.png 600w, https://ghost.parkercs.tech/content/images/2021/01/image-4.png 960w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;h2 id=&quot;what-is-the-ntp-pool&quot;&gt;What Is the NTP Pool?&lt;/h2&gt;&lt;p&gt;The &lt;a href=&quot;https://www.ntppool.org/?ref=ghost.parkercs.tech&quot;&gt;NTP pool&lt;/a&gt; is a large virtual cluster of timeservers that are used for millions of devices everyday. As of January 29, 2021, there are 4,392 active servers that take part in the NTP pool project. With all these servers, an accurate time can be kept, and load-balancing can be done amongst all servers to distribute a fair load upon all of them. Even with all these servers, however, more servers still need to be added to keep up with the growing demand of internet devices.&lt;/p&gt;&lt;h2 id=&quot;how-can-i-join-the-pool&quot;&gt;How Can I Join the Pool?&lt;/h2&gt;&lt;p&gt;Now you may be asking yourself, &quot;How do I join the pool?&quot; All that you need to join the pool is a NTP server with a static IP address (IPv4 and/or IPv6!) and some good, manually selected upstream time servers (or your own clock source!). If you&apos;ve got all that, you&apos;re eligible to join the NTP pool!&lt;/p&gt;&lt;h2 id=&quot;choosing-good-upstream-time-servers&quot;&gt;Choosing Good Upstream Time Servers&lt;/h2&gt;&lt;p&gt;If you have a NTP server, but aren&apos;t sure of how to configure your upstream NTP servers, this can help. You want to use statically assigned NTP servers, and NOT pools (you can use servers that are in the pool, just make sure you save the specific IP address, NOT the pool hostname.) For example, if you want to use time.google.com, run a DNS lookup for time.google.com, like below, and choose one of those IP addresses instead of the hostname.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2021/01/Screen-Shot-2021-01-29-at-9.21.43-AM.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;1364&quot; height=&quot;966&quot; srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2021/01/Screen-Shot-2021-01-29-at-9.21.43-AM.png 600w, https://ghost.parkercs.tech/content/images/size/w1000/2021/01/Screen-Shot-2021-01-29-at-9.21.43-AM.png 1000w, https://ghost.parkercs.tech/content/images/2021/01/Screen-Shot-2021-01-29-at-9.21.43-AM.png 1364w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;Also, you can configure servers found on the NTP website as well. &lt;a href=&quot;https://support.ntp.org/bin/view/Servers/StratumOneTimeServers?ref=ghost.parkercs.tech&quot;&gt;Here&lt;/a&gt; is a list of stratum 1 time servers, and &lt;a href=&quot;https://support.ntp.org/bin/view/Servers/StratumTwoTimeServers?ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt; is a list of stratum 2 time servers. You want to pick servers that are marked &quot;OpenAccess&quot; for their access policy, and ones that are generally closer to your location. The goal here is to pick several different servers, not only for failover, but because of how NTP works, it compares the different server&apos;s times, and will only sync if three or more servers agree on the time.&lt;/p&gt;&lt;h2 id=&quot;joining-the-pool&quot;&gt;Joining the Pool&lt;/h2&gt;&lt;p&gt;Now it&apos;s time to join the pool! Make sure you have a firewall rule to allow UDP traffic on port 123 on your timeserver, and use a website such as &lt;a href=&quot;https://servertest.online/ntp?ref=ghost.parkercs.tech&quot;&gt;this one&lt;/a&gt; to check if your NTP server can be reached from the outside internet. Once you&apos;ve made sure you&apos;ve done that, head over &lt;a href=&quot;https://manage.ntppool.org/manage?ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt; to login in to the NTP pool website.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2021/04/chrome_ewoX3yrwBK.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;620&quot; srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2021/04/chrome_ewoX3yrwBK.png 600w, https://ghost.parkercs.tech/content/images/size/w1000/2021/04/chrome_ewoX3yrwBK.png 1000w, https://ghost.parkercs.tech/content/images/size/w1600/2021/04/chrome_ewoX3yrwBK.png 1600w, https://ghost.parkercs.tech/content/images/size/w2400/2021/04/chrome_ewoX3yrwBK.png 2400w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;Once you are logged in, you will be brought to your dashboard. On the right-hand side, you can see the spot to add your server. Type in the hostname or IP address of your server, IPv4 and/or IPv6, and click add. It will then be populated in the list in the middle. There is an option to change the net speed of the server. This is NOT the actual speed of what NTP clients will connect at, so if you select 1000 Mbps you will NOT receive a full gigabit of NTP traffic. The net speed is relative to all the other NTP servers, so a 500 Mbps server will receive double the amount of that of a 250 Mbps server. In my dashboard I have my servers set to 1000 Mbps, and see a max constant 5 Mbps. This may sound too good to be true, but 5 Mbps of traffic for me is over 120k states of connections in my firewall.&lt;/p&gt;&lt;h2 id=&quot;when-will-my-server-start-being-used&quot;&gt;When Will My Server Start Being Used?&lt;/h2&gt;&lt;p&gt;You will notice at first that your NTP server will not be used. This is because your NTP server on the pool has a score, with a max of 20 and a low of -100, and for your server to be used in the pool it must have a minimum score of 10. What affects your score? Server downtime and if your time offset is more than 100ms. You can monitor your score on the dashboard and once it reaches 10 you will start to see NTP traffic flow to your server.&lt;/p&gt;</content:encoded></item><item><title>Flashing OpenWRT to Luma Mesh Routers</title><link>https://parkercs.tech/flashing-openwrt-to-luma-mesh-routers/</link><guid isPermaLink="true">https://parkercs.tech/flashing-openwrt-to-luma-mesh-routers/</guid><description>Luma is one of those Mesh WiFi companies that didn&apos;t last very long. The last firmware pushed out for these access points was in January 2018. Over two years ago. Their website, https://lumahome.com, isn&apos;t even available anymore. However, the app still works, but don&apos;t expect to get any support.

So you may be asking yourself, what can I do to these access points to give them more customizability, make them more secure, or just have more control over them? These routers ran a customized version </description><pubDate>Wed, 14 Oct 2020 10:18:36 GMT</pubDate><content:encoded>&lt;p&gt;Luma is one of those Mesh WiFi companies that didn&apos;t last very long. The last firmware pushed out for these access points was in January 2018. Over two years ago. Their website, &lt;a href=&quot;https://lumahome.com/?ref=ghost.parkercs.tech&quot;&gt;https://lumahome.com&lt;/a&gt;, isn&apos;t even available anymore. However, the app still works, but don&apos;t expect to get any support.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/image.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;675&quot; srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2020/10/image.png 600w, https://ghost.parkercs.tech/content/images/size/w1000/2020/10/image.png 1000w, https://ghost.parkercs.tech/content/images/2020/10/image.png 1200w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;figcaption&gt;3-pack of Luma Mesh System&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;So you may be asking yourself, what can I do to these access points to give them more customizability, make them more secure, or just have more control over them? These routers ran a customized version of OpenWRT out of the box, but recently OpenWRT has been ported over, and as of October 13, 2020, builds are in the snapshot state.&lt;/p&gt;&lt;h2 id=&quot;what-do-you-need&quot;&gt;What do you need?&lt;/h2&gt;&lt;p&gt;A Luma Router (M/N WRTQ-329ACN)&lt;br&gt;The install/initram image of OpenWRT (Can be found &lt;a href=&quot;https://openwrt.org/toh/hwdata/luma/luma_wrtq-329acn?ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt;)&lt;br&gt;A USB to TTL adapter (Can be found on eBay for literally less than $5 with free shipping)&lt;br&gt;Some Solderless Breadboard Jumper Wires&lt;br&gt;A Computer&lt;br&gt;A TFTP Server (for Windows you can use PumpKIN and macOS you can use TFTPServer)&lt;br&gt;A little patience&lt;/p&gt;&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h2&gt;&lt;p&gt;First, let&apos;s pop open the Luma. You can do this by placing a flathead screwdriver in the bottom slot of the Luma. A lot of force is required to pop it open, and you will most likely damage the plastic a little.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-gallery-card kg-width-wide&quot;&gt;&lt;div class=&quot;kg-gallery-container&quot;&gt;&lt;div class=&quot;kg-gallery-row&quot;&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_215140.jpg&quot; width=&quot;1413&quot; height=&quot;1296&quot; loading=&quot;lazy&quot; alt srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2020/10/IMG_20201013_215140.jpg 600w, https://ghost.parkercs.tech/content/images/size/w1000/2020/10/IMG_20201013_215140.jpg 1000w, https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_215140.jpg 1413w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_215211.jpg&quot; width=&quot;936&quot; height=&quot;1248&quot; loading=&quot;lazy&quot; alt srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2020/10/IMG_20201013_215211.jpg 600w, https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_215211.jpg 936w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p&gt;Now we can get a good look at the mainboard and the back plate, which even has a heatsink with heat pads on it!&lt;/p&gt;&lt;figure class=&quot;kg-card kg-gallery-card kg-width-wide&quot;&gt;&lt;div class=&quot;kg-gallery-container&quot;&gt;&lt;div class=&quot;kg-gallery-row&quot;&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_215245.jpg&quot; width=&quot;1664&quot; height=&quot;1248&quot; loading=&quot;lazy&quot; alt srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2020/10/IMG_20201013_215245.jpg 600w, https://ghost.parkercs.tech/content/images/size/w1000/2020/10/IMG_20201013_215245.jpg 1000w, https://ghost.parkercs.tech/content/images/size/w1600/2020/10/IMG_20201013_215245.jpg 1600w, https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_215245.jpg 1664w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_215254.jpg&quot; width=&quot;2000&quot; height=&quot;2667&quot; loading=&quot;lazy&quot; alt srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2020/10/IMG_20201013_215254.jpg 600w, https://ghost.parkercs.tech/content/images/size/w1000/2020/10/IMG_20201013_215254.jpg 1000w, https://ghost.parkercs.tech/content/images/size/w1600/2020/10/IMG_20201013_215254.jpg 1600w, https://ghost.parkercs.tech/content/images/size/w2400/2020/10/IMG_20201013_215254.jpg 2400w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p&gt;Here&apos;s the area we need to focus on, the serial connector.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_215311.jpg&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;936&quot; height=&quot;1248&quot; srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2020/10/IMG_20201013_215311.jpg 600w, https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_215311.jpg 936w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;Whatever you do, &lt;strong&gt;DO NOT CONNECT THE VCC CONNECTOR. YOU WILL MOST LIKELY FRY YOUR LUMA OR YOUR USB TTL ADAPTER. YOU HAVE BEEN WARNED.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;On my USB TTL Adapter, there are 4 pins. Red is VCC (REMEMBER, DO NOT CONNECT), black is ground, green is TX or transfer, and white is RX or receive. &lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_220050.jpg&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;973&quot; height=&quot;1247&quot; srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2020/10/IMG_20201013_220050.jpg 600w, https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_220050.jpg 973w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;Let&apos;s go ahead and connect the two together. The jumper wire colors can be whatever you want, as long as you know the colors on the USB TTL Adapter and what they correspond to on the Luma.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-gallery-card kg-width-wide&quot;&gt;&lt;div class=&quot;kg-gallery-container&quot;&gt;&lt;div class=&quot;kg-gallery-row&quot;&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_220338.jpg&quot; width=&quot;936&quot; height=&quot;1248&quot; loading=&quot;lazy&quot; alt srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2020/10/IMG_20201013_220338.jpg 600w, https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_220338.jpg 936w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_220333.jpg&quot; width=&quot;936&quot; height=&quot;1248&quot; loading=&quot;lazy&quot; alt srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2020/10/IMG_20201013_220333.jpg 600w, https://ghost.parkercs.tech/content/images/2020/10/IMG_20201013_220333.jpg 936w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p&gt;Here you can see I used totally different jumper wire cables, but as long as you remember what each USB TTL Adapter wire is and what pin it goes to on the Luma, you are fine. Arguably, the most tedious part is done.&lt;/p&gt;&lt;h2 id=&quot;getting-u-boot-access&quot;&gt;Getting U-Boot Access&lt;/h2&gt;&lt;p&gt;U-Boot is the bootloader on these devices, and we need to get access to it. However, Luma has disabled this out of the box, therefore, there are some extra steps needed to get access. For macOS, you can use the screen command with a baud rate of 115200 to get serial access to the device. In Windows, you can use a program such as Putty to get access, just be sure to specify the correct COM port Windows has assigned (can be checked in Device Manager) and use a baud rate of 115200. For example, in macOS I would use the command below. Note, sudo is not needed.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/Screen-Shot-2020-10-13-at-10.07.54-PM.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;571&quot; height=&quot;367&quot;&gt;&lt;/figure&gt;&lt;p&gt;Let&apos;s go ahead and boot up the Luma. As you do, tons of messages should fill up the screen. If no characters appear, or garbled characters appear, check that your connections are good and that you have set the correct baud rate. We want to look for an option to enter failsafe mode.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/Screen-Shot-2020-10-13-at-10.13.19-PM.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;636&quot; height=&quot;577&quot; srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2020/10/Screen-Shot-2020-10-13-at-10.13.19-PM.png 600w, https://ghost.parkercs.tech/content/images/2020/10/Screen-Shot-2020-10-13-at-10.13.19-PM.png 636w&quot;&gt;&lt;/figure&gt;&lt;p&gt;Highlighted in red above is what you want to look out for. If you miss it, just reboot the Luma and try again. Once you see that, press &quot;f&quot; and then enter on your keyboard, and then you should see the splash screen. Once here we want to enter these commands:&lt;/p&gt;&lt;p&gt;&lt;code&gt;mount_root&lt;/code&gt;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/Screen-Shot-2020-10-13-at-10.15.17-PM.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;638&quot; height=&quot;333&quot; srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2020/10/Screen-Shot-2020-10-13-at-10.15.17-PM.png 600w, https://ghost.parkercs.tech/content/images/2020/10/Screen-Shot-2020-10-13-at-10.15.17-PM.png 638w&quot;&gt;&lt;/figure&gt;&lt;p&gt;and:&lt;/p&gt;&lt;p&gt;&lt;code&gt;fw_setenv bootdelay 3&lt;/code&gt;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/Screen-Shot-2020-10-13-at-10.15.57-PM.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;355&quot; height=&quot;33&quot;&gt;&lt;/figure&gt;&lt;p&gt;This gives us a three second time delay to enter U-Boot on the device, which is plenty.&lt;/p&gt;&lt;h2 id=&quot;booting-the-install-image&quot;&gt;Booting the Install Image&lt;/h2&gt;&lt;p&gt;Once you&apos;ve gained U-Boot access, let&apos;s reboot the device. You should see a prompt like below to stop the autoboot process. Just press any key on your keyboard to stop this. Once done, we are given a prompt.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/Screen-Shot-2020-10-13-at-10.17.17-PM.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;537&quot; height=&quot;333&quot;&gt;&lt;/figure&gt;&lt;p&gt;Now to boot the image, we use the tftpboot command. At this point, make sure your ethernet cable is connected to your computer and the other end is plugged into the left port of the Luma (labeled as &quot;out&quot; on the backplate). If you&apos;ve done this right, type &lt;code&gt;tftpboot&lt;/code&gt; and press enter.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/Screen-Shot-2020-10-13-at-10.19.58-PM.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;482&quot; height=&quot;185&quot;&gt;&lt;/figure&gt;&lt;p&gt;It should start attempting to load a TFTP file. Just press ctrl + c to exit this. Now this tells us we need to set our computer&apos;s static IP address to 192.168.11.168, and the install image name to &lt;code&gt;C0A80B0E.img&lt;/code&gt;. The file name can be different for each device, so copy the file name &lt;strong&gt;your&lt;/strong&gt; Luma specifies.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/2020/10/Screen-Shot-2020-10-13-at-10.22.18-PM.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;642&quot; height=&quot;563&quot; srcset=&quot;https://ghost.parkercs.tech/content/images/size/w600/2020/10/Screen-Shot-2020-10-13-at-10.22.18-PM.png 600w, https://ghost.parkercs.tech/content/images/2020/10/Screen-Shot-2020-10-13-at-10.22.18-PM.png 642w&quot;&gt;&lt;/figure&gt;&lt;p&gt;Above shows the current directory I have selected for the TFTP server, with the proper install image renamed. Once you have your computer&apos;s static IP set and the proper directory set for your TFTP server, let&apos;s continue. At the prompt, enter:&lt;/p&gt;&lt;p&gt;&lt;code&gt;tftpboot 0x84000000&lt;/code&gt;&lt;br&gt;then:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bootm 0x84000000&lt;/code&gt;&lt;br&gt;This will start loading the OpenWRT install image. Once it&apos;s done booting, you are now running a temporarily build of OpenWRT!&lt;/p&gt;&lt;h2 id=&quot;flashing-openwrt-permanently&quot;&gt;Flashing OpenWRT Permanently&lt;/h2&gt;&lt;p&gt;Well now that you&apos;ve got the awesome OpenWRT booted, you want it installed on your Luma! The first step we need to do is connect an ethernet cable connected to your &lt;strong&gt;existing&lt;/strong&gt; network, with an active internet connection and DHCP to the right ethernet port, or the &quot;in&quot; port according to the backplate. At the prompt type:&lt;/p&gt;&lt;p&gt;&lt;code&gt;opkg update&lt;/code&gt;&lt;br&gt;then:&lt;/p&gt;&lt;p&gt;&lt;code&gt;opkg install uboot-envtools&lt;/code&gt;&lt;/p&gt;&lt;p&gt;This will install the necessary package to modify the U-Boot bootloader from OpenWRT. If it successfully installed, let&apos;s continue. Type:&lt;/p&gt;&lt;p&gt;&lt;code&gt;fw_setenv openwrt &quot;setenv mtdids nand1=spi_nand; setenv mtdparts mtdparts=spi_nand:-(ubi); ubi part ubi; ubi read 0x84000000 kernel; bootm 0x84000000&quot;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;fw_setenv bootcmd &quot;run openwrt&quot;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;ubirmvol /dev/ubi0 -N ubi_rootfs&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Now for the final steps. Navigate to the /tmp/ directory on your device.&lt;/p&gt;&lt;p&gt;&lt;code&gt;cd /tmp/&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Now we want to grab the latest sysupgrade file from OpenWRT.&lt;/p&gt;&lt;p&gt;&lt;code&gt;wget https://downloads.openwrt.org/releases/21.02.2/targets/ipq40xx/generic/openwrt-21.02.2-ipq40xx-generic-luma_wrtq-329acn-squashfs-sysupgrade.bin&lt;/code&gt;&lt;/p&gt;&lt;p&gt;NOTE: This link may be subject to change and is just the example I have provided. Make sure you grab the correct latest link for the sysupgrade.&lt;/p&gt;&lt;p&gt;Now let&apos;s type:&lt;/p&gt;&lt;p&gt;&lt;code&gt;sysupgrade -v -n openwrt-21.02.2-ipq40xx-generic-luma_wrtq-329acn-squashfs-sysupgrade.bin&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Substituting the file name I used for the file name you used. OpenWRT will start flashing and the device will reboot with a fresh config.&lt;/p&gt;&lt;h2 id=&quot;congrats-&quot;&gt;Congrats!&lt;/h2&gt;&lt;p&gt;You&apos;ve just flashed OpenWRT on your Luma. You can go ahead and remove the jumper wires and place the backplate back on the Luma. The &quot;out&quot; port on the Luma is designated as the LAN and the &quot;in&quot; port is designated as the WAN. Note that with snapshot builds, the web GUI is not built in, and you will have to SSH in to install luci using opkg.&lt;/p&gt;&lt;p&gt;Also, the LED ring light will spin continuously as the custom Luma scripts are no longer present to control what they do. You can get around this as discussed at the bottom of the page &lt;a href=&quot;https://git.openwrt.org/?p=openwrt/openwrt.git;a=commit;h=e24635710c7e6444afa463c59f3d81fe634eb3c7&amp;ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt;, and even do some fancy lighting changes.&lt;/p&gt;&lt;p&gt;Special thanks to everyone who made this possible, and especially the forum thread &lt;a href=&quot;https://forum.openwrt.org/t/luma-home-wifi-support/50630?ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt;. This would not be possible without them.&lt;/p&gt;&lt;p&gt;Sources:&lt;/p&gt;&lt;figure class=&quot;kg-card kg-bookmark-card&quot;&gt;&lt;a class=&quot;kg-bookmark-container&quot; href=&quot;https://forum.openwrt.org/t/luma-home-wifi-support/50630?ref=ghost.parkercs.tech&quot;&gt;&lt;div class=&quot;kg-bookmark-content&quot;&gt;&lt;div class=&quot;kg-bookmark-title&quot;&gt;Luma Home WiFi support&lt;/div&gt;&lt;div class=&quot;kg-bookmark-description&quot;&gt;Is it possible to get support for Luma Home WiFi?? Since the company abandoned the product and I haven’t seen any firmware updates for nearly two years..... I have three of these units. Descent hardware specs http://en.techinfodepot.shoutwiki.com/wiki/Luma_WRTQ-329ACN Am willing to open one up a…&lt;/div&gt;&lt;div class=&quot;kg-bookmark-metadata&quot;&gt;&lt;img class=&quot;kg-bookmark-icon&quot; src=&quot;https://forum.openwrt.org/uploads/default/optimized/2X/d/db0b03f66dd0b341e2ada2aac4957a6f4c206955_2_180x180.png&quot; alt=&quot;&quot;&gt;&lt;span class=&quot;kg-bookmark-author&quot;&gt;OpenWrt Forum&lt;/span&gt;&lt;span class=&quot;kg-bookmark-publisher&quot;&gt;jpstoppa&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;kg-bookmark-thumbnail&quot;&gt;&lt;img src=&quot;https://forum.openwrt.org/uploads/default/original/2X/1/1f939c64b4d285b298dd1428f5d948ef09688424.png&quot; alt=&quot;&quot;&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;kg-card kg-bookmark-card&quot;&gt;&lt;a class=&quot;kg-bookmark-container&quot; href=&quot;https://git.openwrt.org/?p=openwrt/openwrt.git;a=commit;h=e24635710c7e6444afa463c59f3d81fe634eb3c7&amp;ref=ghost.parkercs.tech&quot;&gt;&lt;div class=&quot;kg-bookmark-content&quot;&gt;&lt;div class=&quot;kg-bookmark-title&quot;&gt;git.openwrt.org Git - openwrt/openwrt.git/commit&lt;/div&gt;&lt;div class=&quot;kg-bookmark-description&quot;&gt;&lt;/div&gt;&lt;div class=&quot;kg-bookmark-metadata&quot;&gt;&lt;img class=&quot;kg-bookmark-icon&quot; src=&quot;https://git.openwrt.org/static/git-favicon.png&quot; alt=&quot;&quot;&gt;&lt;span class=&quot;kg-bookmark-author&quot;&gt;openwrt/openwrt.git/commit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;kg-bookmark-thumbnail&quot;&gt;&lt;img src=&quot;https://git.openwrt.org/static/git-logo.png&quot; alt=&quot;&quot;&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;</content:encoded></item><item><title>Upgrading ntopng on pfSense To Latest Version</title><link>https://parkercs.tech/upgrading-ntopng-on-pfsense-to-latest-version/</link><guid isPermaLink="true">https://parkercs.tech/upgrading-ntopng-on-pfsense-to-latest-version/</guid><description>UPDATE: AUGUST 31, 2021.

ntop has a guide on installing the latest version of ntopng located here.</description><pubDate>Sat, 16 May 2020 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;UPDATE: AUGUST 31, 2021.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;ntop has a guide on installing the latest version of ntopng located &lt;a href=&quot;https://www.ntop.org/guides/ntopng/third_party_integrations/pfsense.html?ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Adding An IPv6 Tunnel To pfSense</title><link>https://parkercs.tech/adding-an-ipv6-tunnel-to-pfsense/</link><guid isPermaLink="true">https://parkercs.tech/adding-an-ipv6-tunnel-to-pfsense/</guid><description>IPv6, the newest Internet Protocol. It’s meant to replace IPv4, and was even made in the 90s. However, not all ISPs have adopted it. Whether it be because of outdated equipment, a large investment is needed, or the ISP just isn’t ready, not everyone has native IPv6. Luckily this was thought of, and free services exist to remedy this issue.

Note: Using a public IPv6 tunnel may break certain websites such as Netflix, as the tunnel is considered a “proxy.” Hurricane Electric also does not allow Cl</description><pubDate>Sat, 09 May 2020 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;IPv6, the newest Internet Protocol. It’s meant to replace IPv4, and was even made in the 90s. However, not all ISPs have adopted it. Whether it be because of outdated equipment, a large investment is needed, or the ISP just isn’t ready, not everyone has native IPv6. Luckily this was thought of, and free services exist to remedy this issue.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/strong&gt;: Using a public IPv6 tunnel may break certain websites such as Netflix, as the tunnel is considered a “proxy.” Hurricane Electric also does not allow Cloudflare inbound connections (unless you want to pay $500/month), and you will be greeted with a 522 Error on any proxied DNS entry pointing towards a HE tunnel.&lt;/p&gt;&lt;h2 id=&quot;hurricane-electric&quot;&gt;Hurricane Electric&lt;/h2&gt;&lt;h3 id=&quot;creating-tunnel&quot;&gt;Creating Tunnel&lt;/h3&gt;&lt;p&gt;To get started, first create an account at &lt;a href=&quot;https://tunnelbroker.net/?ref=ghost.parkercs.tech&quot; rel=&quot;noreferrer noopener&quot;&gt;tunnelbroker.net&lt;/a&gt;. Once you have your account created, select “Create Regular Tunnel” in the “User Functions” box in the left-side.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/wordpress/2020/05/Screen-Shot-2020-05-09-at-3.35.23-AM.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot;&gt;&lt;/figure&gt;&lt;p&gt;You will be greeted with a new page asking you to fill in your current IP address and the endpoint location of your tunnel. It will display your current IP as well.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/wordpress/2020/05/Screen-Shot-2020-05-09-at-3.37.53-AM-1.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot;&gt;&lt;/figure&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/wordpress/2020/05/Screen-Shot-2020-05-09-at-3.40.27-AM-1.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;IP cannot be pinged from HE.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;If you get the above message, your endpoint will need to allow pings from HE’s IP. You can do this by adding a firewall rule like the one below.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/wordpress/2020/05/Screen-Shot-2020-05-09-at-3.43.27-AM-1.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;Allowing ping from HE.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/wordpress/2020/05/Screen-Shot-2020-05-09-at-3.44.59-AM.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;Successful ping from HE.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;If you get the message above, continue. Make sure to pick the fastest server. You can do this by pinging the IPv4 addresses and seeing which one has the lowest latency. Think of it this way, all your IPv6 traffic will leave your pfSense box, as IPv4 packets, to a HE server, which will receive those packets and convert them to IPv6, and then route them at that server. Once you have created your tunnel, a new page will appear.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/wordpress/2020/05/Screen-Shot-2020-05-09-at-3.46.14-AM-1.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;Newly created tunnel details page.&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;adding-tunnel-to-pfsense&quot;&gt;Adding Tunnel To pfSense&lt;/h3&gt;&lt;p&gt;Once your new tunnel is created, login to pfSense and navigate to Interfaces&amp;gt;Assignments&amp;gt;GIFs. Select Add+. In the parent interface, select your WAN. In the GIF Remote Address, insert the Server IPv4 Address from above. In the GIF tunnel local address, insert the Client IPv6 address. In the GIF tunnel remote address, insert the Server IPv6 address. In the GIF Tunnel Subnet, select /64. Feel free to add a description and save the interface.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/wordpress/2020/05/Screen-Shot-2020-05-09-at-3.54.05-AM-1-1024x468.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;Configuring the tunnel on pfSense.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;Once the GIF interface is made, navigate to Interfaces&amp;gt;Interface Assignments and add the new interface. Enable it and save it.&lt;/p&gt;&lt;h3 id=&quot;assigning-subnet-to-lan-interface&quot;&gt;Assigning Subnet to LAN Interface&lt;/h3&gt;&lt;p&gt;After you’ve enabled the GIF interface, you now need to assign an IPv6 address to your LAN interface or whichever one needs IPv6. Navigate to the interface settings page. Under IPv6 Configuration Type, select Static IPv6. A new section will appear below. In IPv6 address, insert the HE Routed /64 address here, with the /64 removed. Select /64 in the dropdown menu. Now save the interface and apply the changes.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/wordpress/2020/05/Screen-Shot-2020-05-09-at-4.00.20-AM.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;Configuring the LAN interface for IPv6.&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;allow-ipv6-firewall-rule&quot;&gt;Allow IPv6 Firewall Rule&lt;/h3&gt;&lt;p&gt;Now that IPv6 is enabled on the interface, you must create a new firewall rule to allow IPv6 on the interface. This is as simple as creating a new rule, selecting IPv6, selecting any protocol, and saving the new rule.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/wordpress/2020/05/Screen-Shot-2020-05-09-at-4.03.34-AM-1.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;Creating the IPv6 firewall rule.&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;done-&quot;&gt;Done!&lt;/h3&gt;&lt;p&gt;That’s it! You’ve now enabled IPv6 on your LAN network. Now your client will not receive an IPv6 address yet. You must configure a DHCPv6 server and/or SLAAC for this. The guide listed below will show you how to do that.&lt;/p&gt;&lt;p&gt;Sources:&lt;/p&gt;&lt;figure class=&quot;kg-card kg-bookmark-card&quot;&gt;&lt;a class=&quot;kg-bookmark-container&quot; href=&quot;https://docs.netgate.com/pfsense/en/latest/recipes/ipv6-tunnel-broker.html?ref=ghost.parkercs.tech&quot;&gt;&lt;div class=&quot;kg-bookmark-content&quot;&gt;&lt;div class=&quot;kg-bookmark-title&quot;&gt;pfSense Configuration Recipes — Configuring IPv6 Through A Tunnel Broker Service | pfSense Documentation&lt;/div&gt;&lt;div class=&quot;kg-bookmark-description&quot;&gt;&lt;/div&gt;&lt;div class=&quot;kg-bookmark-metadata&quot;&gt;&lt;img class=&quot;kg-bookmark-icon&quot; src=&quot;https://docs.netgate.com/pfsense/en/latest/_static/favicon.ico&quot; alt=&quot;&quot;&gt;&lt;span class=&quot;kg-bookmark-author&quot;&gt;pfSense Documentation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;kg-bookmark-thumbnail&quot;&gt;&lt;img src=&quot;https://docs.netgate.com/pfsense/en/latest/_images/tunnelbroker-tunnelbroker-providerconfig.png&quot; alt=&quot;&quot;&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;</content:encoded></item><item><title>Solving the Parasitic Battery Drain On My 2012 Volvo XC90</title><link>https://parkercs.tech/solving-the-parasitic-battery-drain-on-my-2012-volvo-xc90/</link><guid isPermaLink="true">https://parkercs.tech/solving-the-parasitic-battery-drain-on-my-2012-volvo-xc90/</guid><description>Recently, I got a 2012 Volvo XC90. Within the first few weeks of driving it, I came out to it and the battery was dead. A quick jump start later, and I was fine. The battery didn’t die for several more weeks. Note that this was also with me driving almost every day.

When it happened the second time, I figured something was up. I started Googling and read about the RDAR module (Remote Digital Audio Receiver, provides Sirius XM for the car) would constantly look for a signal when the car was off </description><pubDate>Sat, 18 Jan 2020 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently, I got a 2012 Volvo XC90. Within the first few weeks of driving it, I came out to it and the battery was dead. A quick jump start later, and I was fine. The battery didn’t die for several more weeks. Note that this was also with me driving almost every day.&lt;/p&gt;&lt;p&gt;When it happened the second time, I figured something was up. I started Googling and read about the RDAR module (Remote Digital Audio Receiver, provides Sirius XM for the car) would constantly look for a signal when the car was off if you did not have a Sirius subscription. Since I did not have a subscription, and it did not work on the radio either, I looked into ways to fix the issue.&lt;/p&gt;&lt;h2 id=&quot;ways-to-fix-the-issue&quot;&gt;Ways to Fix the Issue&lt;/h2&gt;&lt;p&gt;Some ways that included fixing it were to take it to a dealer and pay ~$150 to have Volvo do a software update and reload on the module. Another solution was to unplug the XM receiver and install a MOST loop on the receiver.&lt;/p&gt;&lt;p&gt;I chose to disconnect the receiver and install the MOST loop. In this car, MOST stands for the Media Oriented Systems Transport. It carries all the signals for the infotainment over plastic fiber optic cables, to various parts of the car. This includes a subwoofer in the back if equipped, the amplifier under the passenger seat, the RDAR module, the radio module in the roof headliner, and more. If you do not install the MOST loop and only disconnect the receiver, you will no longer have a working radio.&lt;/p&gt;&lt;p&gt;MOST Loop (P/N 8688083): &lt;a href=&quot;https://www.volvopartswebstore.com/products/Volvo/Brace/1162068/8688083.html?ref=ghost.parkercs.tech&quot;&gt;https://www.volvopartswebstore.com/products/Volvo/Brace/1162068/8688083.html&lt;/a&gt;&lt;/p&gt;&lt;h2 id=&quot;locating-the-module&quot;&gt;Locating the Module&lt;/h2&gt;&lt;p&gt;After finding the internal Volvo repair software online, I located everything I needed to replace and how to remove the parts.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://drive.google.com/uc?export=download&amp;id=1hw8FEHER0D76pVuXS5ix1qtzypKWYou4&amp;ref=ghost.parkercs.tech&quot;&gt;RDAR Module Removal&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;https://drive.google.com/uc?export=download&amp;id=1k9uypGS4sZdfiVwnkuA4pBI_k3h6PvWr&amp;ref=ghost.parkercs.tech&quot;&gt;Side Panel Removal&lt;/a&gt;&lt;/p&gt;&lt;h2 id=&quot;removing-the-side-panel&quot;&gt;Removing the Side Panel&lt;/h2&gt;&lt;p&gt;In the side panel, there are a total of 4 screws to remove. There are two behind the two metal hooks. Remove those screws by prying on the plastic and jamming a socket wrench on the screw with an extension. The next screw is under a little plastic cover by the window vent. The last one is under a little plastic cover on the C pillar.&lt;/p&gt;&lt;p&gt;After removing the 4 screws, remove the upper trim pieces on the C and D pillar. These can be somewhat difficult to remove, but the clips are sturdy and will not likely break.&lt;/p&gt;&lt;p&gt;After these trim pieces are out, lift up and out on the side panel. It should loosen up. Wiggle it out, making sure it is not getting caught on anything like the seatbelt, trunk, etc.&lt;/p&gt;&lt;h2 id=&quot;disconnecting-the-rdar-sirius-module&quot;&gt;Disconnecting the RDAR (Sirius) Module&lt;/h2&gt;&lt;p&gt;After the side trim is removed, the RDAR module is exposed. I found that it was easier to remove the module and to take out the wires/fiber optics then. When removing it, be careful not to bend the fiber optic cables to an extreme. Disconnect the power cable and the fiber optic cable. Connect the MOST loop to the end of the fiber optic cable. Do not reconnect the power cable, otherwise, you’ve wasted your entire time to connect back the faulty module.&lt;/p&gt;</content:encoded></item><item><title>Using VLANs on OpenWRT</title><link>https://parkercs.tech/using-vlans-on-openwrt/</link><guid isPermaLink="true">https://parkercs.tech/using-vlans-on-openwrt/</guid><description>If you have ever used prosumer or enterprise networking equipment, you have probably run across a switch with “smart” capabilities or VLAN capabilities. VLANs by definition is “a virtual LAN is any broadcast domain that is partitioned and isolated in a computer network at the data link layer.” VLANs allow for multiple networks and subnets to be carried across one physical network link.


Things You Will Need:

 * An OpenWRT Device supporting VLANs (see here for more info) set as a DHCP client on</description><pubDate>Sat, 23 Nov 2019 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you have ever used prosumer or enterprise networking equipment, you have probably run across a switch with “smart” capabilities or VLAN capabilities. VLANs by definition is “a virtual LAN is any broadcast domain that is partitioned and isolated in a computer network at the data link layer.” VLANs allow for multiple networks and subnets to be carried across one physical network link.&lt;/p&gt;&lt;h3 id=&quot;things-you-will-need-&quot;&gt;Things You Will Need:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;An OpenWRT Device supporting VLANs (see &lt;a href=&quot;https://openwrt.org/docs/guide-user/network/vlan/switch_configuration?ref=ghost.parkercs.tech&quot;&gt;here&lt;/a&gt; for more info) set as a DHCP client on the uplink interface&lt;/li&gt;&lt;li&gt;A VLAN capable switch (buzzwords like “managed” or “smart” switch)&lt;/li&gt;&lt;li&gt;A router or other device supporting 802.1q VLANs&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h3&gt;&lt;p&gt;Let’s say that I have a 192.168.1.0/24 network on VLAN 1 and a 10.0.1.0/24 network on VLAN 5. To make it easier, VLAN 1 will be the untagged internal network, while VLAN 5 will be the tagged public network. The public network will be able to access the internet but not be able to access VLAN 1, but VLAN 1 can access VLAN 5 and the internet.&lt;/p&gt;&lt;p&gt;On the switch, VLAN 1 will be untagged to the port and VLAN 5 will be tagged on the port. This will allow for the default traffic to go on the management network while allowing the public network stays on the public network.&lt;/p&gt;&lt;h3 id=&quot;creating-your-interfaces&quot;&gt;Creating Your Interfaces&lt;/h3&gt;&lt;p&gt;Log in to the LuCi interface on OpenWRT and navigate to Network&amp;gt;Interfaces. The only item right now should be the LAN network configured as a DHCP client. The OpenWRT device should have an IP address in the management network.&lt;/p&gt;&lt;p&gt;To create the tagged public network, click on “Add new interface” and give it a name. For the protocol, select “Unmanaged” a keep “Bridge interfaces” unselected. For the interface, specify the uplink port, i.e. eth0, and the VLAN tag. I.e. if you have VLAN 5 on eth0, the interface would be eth0.5.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-2.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/Screen-Shot-2019-11-21-at-1.07.37-PM-1024x335.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;335&quot;&gt;&lt;/figure&gt;&lt;p&gt;Click “Create interface” and apply the changes.&lt;/p&gt;&lt;h3 id=&quot;assigning-an-ssid-the-public-network&quot;&gt;Assigning an SSID the Public Network&lt;/h3&gt;&lt;p&gt;Let’s say that we want a public SSID titled “Public WiFi.” Navigate to Network&amp;gt;Wireless. Under the wireless radio for the SSID, it can be either 2.4 or 5GHz or both, select add. You will be asked to enter the SSID information.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-2.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/Screen-Shot-2019-11-21-at-1.11.38-PM-1024x486.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;486&quot;&gt;&lt;/figure&gt;&lt;p&gt;As you can see, the SSID is on the “Public” network and not the “LAN” network. Configure SSID security, if needed, and save and apply the changes. If all went well you should be able to connect to the “Public WiFi” network and receive an IP in the public network subnet. If this did not work, check your switch to see if the VLAN is properly configured on that port, and make sure it is the right VLAN.&lt;/p&gt;</content:encoded></item><item><title>Enabling 802.11r (Fast Roaming/Transition) on OpenWRT</title><link>https://parkercs.tech/enabling-802-11r-fast-roaming-transition-on-openwrt/</link><guid isPermaLink="true">https://parkercs.tech/enabling-802-11r-fast-roaming-transition-on-openwrt/</guid><description>802.11r, also known as Fast Roaming/Transition on OpenWRT allows clients to seamlessly switch between several access points depending on which one is closer to the client. This is great for locations with more than one access point as a client does not have to drop a connection to rescan for APs, but can instead switch between, dropping minimal packets and remaining secure. In this guide, you will learn how to enable fast roaming on OpenWRT.


Installing WPAD

wpad is a full-featured IEEE 802.1x</description><pubDate>Sat, 16 Nov 2019 08:00:19 GMT</pubDate><content:encoded>&lt;p&gt;802.11r, also known as Fast Roaming/Transition on OpenWRT allows clients to seamlessly switch between several access points depending on which one is closer to the client. This is great for locations with more than one access point as a client does not have to drop a connection to rescan for APs, but can instead switch between, dropping minimal packets and remaining secure. In this guide, you will learn how to enable fast roaming on OpenWRT.&lt;/p&gt;&lt;h3 id=&quot;installing-wpad&quot;&gt;Installing WPAD&lt;/h3&gt;&lt;p&gt;wpad is a full-featured IEEE 802.1x authenticator/supplicant for OpenWRT. Your access point may already have it installed but in another format such as wpad-mini or wpad-basic. For fast roaming, wpad, the full package, is required.&lt;/p&gt;&lt;h4 id=&quot;ssh-into-the-ap&quot;&gt;SSH Into The AP&lt;/h4&gt;&lt;p&gt;SSH into your access point. I will be using Windows’ default ssh client. You may be asked to access the RSA key of the client, and select yes. Enter in the password of the AP.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-2.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/Screen-Shot-2019-11-13-at-1.03.37-PM-1024x542.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;542&quot;&gt;&lt;/figure&gt;&lt;h4 id=&quot;removing-other-forms-of-wpad&quot;&gt;Removing Other Forms of wpad&lt;/h4&gt;&lt;p&gt;First in the terminal, enter in:&lt;/p&gt;&lt;p&gt;&lt;code&gt;opkg update&lt;/code&gt;&lt;br&gt;This will update the repositories and lists of packages on the access points. Then enter:&lt;/p&gt;&lt;p&gt;&lt;code&gt;opkg install wpad&lt;/code&gt;&lt;/p&gt;&lt;p&gt;If you receive the following message:&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;http://res-1.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/Screen-Shot-2019-11-13-at-1.05.49-PM-1024x62.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;62&quot;&gt;&lt;figcaption&gt;wpad is already installed and up-to-date&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;Then you do not need to do anything to continue. If you receive a message saying that the &lt;em&gt;&lt;em&gt;wpad&lt;/em&gt;&lt;/em&gt; package could not be installed due to another package, i.e. &lt;em&gt;&lt;em&gt;wpad-basic&lt;/em&gt;&lt;/em&gt; or &lt;em&gt;&lt;em&gt;wpad-mini&lt;/em&gt;&lt;/em&gt;, then type:&lt;br&gt;&lt;em&gt;&lt;em&gt;opkg remove &lt;strong&gt;&lt;strong&gt;interfering-package&lt;/strong&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/em&gt;&lt;br&gt;This should remove the interfering wpad packages.&lt;/p&gt;&lt;h4 id=&quot;installing-wpad-1&quot;&gt;Installing wpad&lt;/h4&gt;&lt;p&gt;If there are no conflicting dependencies and packages, type in:&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;em&gt;&lt;code&gt;opkg install wpad&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;If you want WPA3 support, install wpad-openssl instead of wpad&lt;/p&gt;&lt;p&gt;&lt;code&gt;opkg install wpad-openssl&lt;/code&gt;&lt;/p&gt;&lt;h3 id=&quot;configuring-fast-roaming&quot;&gt;Configuring Fast Roaming&lt;/h3&gt;&lt;p&gt;Now that wpad is installed we can configure fast roaming.&lt;/p&gt;&lt;p&gt;Login to the Luci web interface. Navigate to &lt;em&gt;&lt;em&gt;Network&amp;gt;Wireless&lt;/em&gt;&lt;/em&gt;. Then choose the SSID you want to enable fast roaming on. Note that if you have more than one SSID or radio, then you will have to repeat these steps.&lt;/p&gt;&lt;p&gt;Select the SSID you want to enable fast roaming on, and go to the &lt;em&gt;&lt;em&gt;Wireless Security &lt;/em&gt;&lt;/em&gt;tab under &lt;em&gt;&lt;em&gt;Interface Configuration&lt;/em&gt;&lt;/em&gt;. Select the checkbox to enable 802.11r.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-3.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/Screen-Shot-2019-11-13-at-1.12.09-PM-1024x393.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;393&quot;&gt;&lt;/figure&gt;&lt;p&gt;You will be greeted with several fields.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img src=&quot;http://res-3.cloudinary.com/parkercs/image/upload/q_auto/v1/blog-images/2022/05/Screen-Shot-2019-11-13-at-1.12.56-PM-1024x191.png&quot; class=&quot;kg-image&quot; alt loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;191&quot;&gt;&lt;/figure&gt;&lt;p&gt;For the mobility domain, enter in an 4-character hexadecimal ID. Here are examples&lt;/p&gt;&lt;ul&gt;&lt;li&gt;abcd&lt;/li&gt;&lt;li&gt;12ab&lt;/li&gt;&lt;li&gt;1234&lt;/li&gt;&lt;li&gt;1a2b&lt;/li&gt;&lt;li&gt;So on and so forth.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Once you have entered these settings, copy and paste the same mobility domain if you have multiple SSIDs. &lt;strong&gt;&lt;strong&gt;If you have multiple access points&lt;/strong&gt;&lt;/strong&gt;, you will keep the same mobility domain.&lt;/p&gt;&lt;p&gt;Congrats, you should now have fast roaming enabled on your access points!&lt;/p&gt;</content:encoded></item><item><title>Installing OpenWRT On a Meraki MR16</title><link>https://parkercs.tech/installing-openwrt-on-a-meraki-mr16/</link><guid isPermaLink="true">https://parkercs.tech/installing-openwrt-on-a-meraki-mr16/</guid><description>UPDATE 10/21. It appears that Cucumber WiFi (CT WiFi, etc.) was officially shut down September 3, 2021. I believe that leaves the only way to flash with Serial.


I recently picked up 11 Meraki MR16’s off of eBay for a good price. I decided to buy these because I knew that they would be reliable access points for the price.





Things you will need:





 * A computer (mine is running Windows)
 * A couple of ethernet cables
 * A Meraki MR16 Access Point
 * Something to push the reset button of </description><pubDate>Sat, 09 Nov 2019 08:00:00 GMT</pubDate><content:encoded>&lt;h3 id=&quot;update-10-21-it-appears-that-cucumber-wifi-ct-wifi-etc-was-officially-shut-down-september-3-2021-i-believe-that-leaves-the-only-way-to-flash-with-serial-&quot;&gt;UPDATE 10/21. It appears that Cucumber WiFi (CT WiFi, etc.) was officially shut down September 3, 2021. I believe that leaves the only way to flash with Serial.&lt;/h3&gt;&lt;hr&gt;&lt;!--kg-card-begin: html--&gt;
&lt;p&gt;I recently picked up 11 Meraki MR16&amp;#8217;s off of eBay for a good price. I decided to buy these because I knew that they would be reliable access points for the price.&lt;/p&gt;



&lt;p&gt;Things you will need:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;A computer (mine is running Windows)&lt;/li&gt;&lt;li&gt;A couple of ethernet cables&lt;/li&gt;&lt;li&gt;A Meraki MR16 Access Point&lt;/li&gt;&lt;li&gt;Something to push the reset button of the MR16 (i.e. a paperclip)&lt;/li&gt;&lt;li&gt;A TFTP server, in my case &lt;a href=&quot;https://www.softpedia.com/get/Internet/Servers/Other-Servers/PumpKIN.shtml?ref=ghost.parkercs.tech&quot;&gt;pumpkin&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Cucumber firmware&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://downloads.openwrt.org/releases/18.06.4/targets/ar71xx/generic/?ref=ghost.parkercs.tech&quot;&gt;OpenWRT Sysupgrade File Link&lt;/a&gt; (look for files starting with MR16)&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.chiark.greenend.org.uk/~sgtatham/putty/?ref=ghost.parkercs.tech&quot;&gt;Putty&lt;/a&gt; (or other SSH client)&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;Because you can not flash OpenWRT directly from the MR16 with the TFTP server, we will use Cucumber WiFi as an intermediary between the two, as it can be flashed simply.&lt;/p&gt;



&lt;h4&gt;Registering for a Cucumber Account&lt;/h4&gt;



&lt;p&gt;First, sign up for an account &lt;a href=&quot;https://dashboard.ctapp.io/?_ga=2.28667004.1364041095.1573240743-1889837869.1573240743&amp;ref=ghost.parkercs.tech#/create&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;aligncenter&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/wordpress/2019/11/image.png&quot; alt=&quot;&quot; class=&quot;wp-image-11&quot;/&gt;&lt;/figure&gt;&lt;/div&gt;



&lt;h4&gt;Adding Device and Downloading Firmware&lt;/h4&gt;



&lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;alignright is-resized&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/wordpress/2019/11/image-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-12&quot; width=&quot;211&quot; height=&quot;283&quot;/&gt;&lt;/figure&gt;&lt;/div&gt;



&lt;p&gt;Then you want to log in to your dashboard. You will be asked to create a site and add a device. Once you&amp;#8217;ve created your site, navigate to its page, and select &amp;#8220;Devices&amp;#8221; in the left-hand menu.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;Once you are on the Devices page, you will then click the plus sign in the upper-right corner. It will ask you to either discover your device or to manually add it via its mac address. Select the mac address option.&lt;/p&gt;



&lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;alignright is-resized&quot;&gt;&lt;img src=&quot;https://s3.amazonaws.com/helpscout.net/docs/assets/565c910d90336053e408db48/images/567951f59033603f7da2ac95/file-FI1atV7ftG.jpg&quot; alt=&quot;Image result for meraki mr16 back&quot; width=&quot;261&quot; height=&quot;348&quot;/&gt;&lt;/figure&gt;&lt;/div&gt;



&lt;p&gt;When prompted to enter the mac address, you will enter the mac address found on the back of your MR16 access point, right above its serial number. You will enter it in the format of xx:xx:xx:xx:xx. Enter a device description to help find it later.&lt;/p&gt;



&lt;p&gt;Now to download the Cucumber firmware. To download it, select your profile icon in the upper-right corner of the Cucumber WiFi dashboard, and select downloads. In the downloads list, choose Meraki MR16 and download the file. When downloaded, rename the file to &amp;#8220;&lt;em&gt;vmlinux.gz.uImage&lt;/em&gt;&amp;#8220;. The name is case-sensitive and there must not be a trailing .bin at the end of the name.&lt;/p&gt;



&lt;h4&gt;Setting Up the TFTP Server&lt;/h4&gt;



&lt;p&gt;The first step to setting up the server is setting a static ip-address on your wired interface.&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;IP &amp;#8211; 192.168.1.101&lt;/li&gt;&lt;li&gt;Subnet Mask &amp;#8211; 255.255.255.0&lt;/li&gt;&lt;/ul&gt;



&lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;aligncenter is-resized&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/wordpress/2019/11/image-2.png&quot; alt=&quot;&quot; class=&quot;wp-image-14&quot; width=&quot;332&quot; height=&quot;376&quot;/&gt;&lt;/figure&gt;&lt;/div&gt;



&lt;p&gt;From here, launch the pumpkin TFTP server. When it is launched, select the &amp;#8220;Network&amp;#8221; tab and input 192.168.1.101 in the ip-address field. Go back to the &amp;#8220;Server&amp;#8221; tab and for the &amp;#8220;TFTP Filesystem Root&amp;#8221; specify the location of the &lt;em&gt;vmlinux.gz.uImage&amp;nbsp;&lt;/em&gt; file.&lt;/p&gt;



&lt;h4&gt;Flashing the Cucumber Image&lt;/h4&gt;



&lt;p&gt;Connect an ethernet cable between your computer on the wired interface you set a static ip and the Meraki AP. Grab a paperclip and press and hold the reset button. Then connect power to the AP. While still holding the reset button, you should see the file being transferred in pumpkin, and after the file is transferred keep holding down the reset button until all the lights on the front of the AP start flashing, then you can let go. It will take approximately 5 minutes to flash, and if the device is still flashing after ~10 minutes, reboot and try again. After the AP reboots, connect the ethernet cable on the AP to an internet source. Also, connect your computer back to the internet.&lt;/p&gt;



&lt;h4&gt;Setting the MAC Address of the AP&lt;/h4&gt;



&lt;p&gt;By default, the MAC address of Meraki access points are not recognized by WRT-based operating systems. When the AP is fully booted and has an ip-address, navigate to its ip. If you do not know the location of the AP check the DHCP leases in your router. You will reach a login page. The username is &lt;em&gt;cucumber&lt;/em&gt; and the password is &lt;em&gt;stinky&lt;/em&gt;. Then navigate to http://&lt;em&gt;ip-address/cgi-bin/meraki.html&lt;/em&gt;, substituting the IP of the AP in. You will be prompted to enter the MAC address of the AP. &lt;strong&gt;Note&lt;/strong&gt;: Here the format is xx-xx-xx-xx-xx with hyphens. Save the changes and the AP will reboot.&lt;/p&gt;



&lt;h4&gt;SSHing into the AP&lt;/h4&gt;



&lt;p&gt;After the device reboots after setting the MAC address, it should appear in the Cucumber dashboard. Navigate to the device&amp;#8217;s page in Cucumber expand the Network Details menu, and copy the SSH password. Open your SSH client and login to the AP with the username&amp;nbsp;&lt;em&gt;root&lt;/em&gt; and the password that you copied earlier. You will be prompted to connect to the host, select yes. You will be greeted with a Cucumber terminal. &lt;/p&gt;



&lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;aligncenter is-resized&quot;&gt;&lt;img src=&quot;https://ghost.parkercs.tech/content/images/wordpress/2019/11/image-3.png&quot; alt=&quot;&quot; class=&quot;wp-image-16&quot; width=&quot;264&quot; height=&quot;473&quot;/&gt;&lt;/figure&gt;&lt;/div&gt;



&lt;h4&gt;Flashing OpenWRT&lt;/h4&gt;



&lt;p&gt;Copy the sysupgrade URL from earlier, and remove the (s) from http&lt;em&gt;s. &lt;/em&gt;Now, go back to the SSH terminal and type in the following commands. The wget command copies the file to the flash. When issueing the sysupgrade command, do not use the url.&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;cd /tmp&lt;/li&gt;&lt;li&gt;wget &lt;em&gt;url-of-file&lt;/em&gt;&lt;/li&gt;&lt;li&gt;sysupgrade -v &lt;em&gt;filename&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;The device should start flashing OpenWRT.&lt;/p&gt;



&lt;h4&gt;Getting Ready for OpenWRT&lt;/h4&gt;



&lt;p&gt;After the device reboots after issuing the sysupgrade command and the power light is a solid green, you will need to hold down the reset button on the AP until the power button starts flashing. The device will reboot.&lt;/p&gt;



&lt;h4&gt;Navigating to OpenWRT&lt;/h4&gt;



&lt;p&gt;Once the device reboots, it will act as a DHCP server. If you connect your computer to the AP&amp;#8217;s ethernet cable it will obtain an IP address. OpenWRT will then be reachable at http://192.168.1.1&lt;/p&gt;



&lt;h3&gt;Congratulations, OpenWRT should now be on your Meraki MR16!&lt;/h3&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;!--kg-card-end: html--&gt;</content:encoded></item></channel></rss>