<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.2">Jekyll</generator><link href="https://blog.liamcottle.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://blog.liamcottle.com/" rel="alternate" type="text/html" /><updated>2025-04-22T04:07:59+00:00</updated><id>https://blog.liamcottle.com/feed.xml</id><title type="html">Liam Cottle’s Blog</title><subtitle>Rambles from a self taught Software Engineer</subtitle><author><name>Liam Cottle</name></author><entry><title type="html">Getting started with Meshtastic</title><link href="https://blog.liamcottle.com/2024/05/01/getting-started-with-meshtastic" rel="alternate" type="text/html" title="Getting started with Meshtastic" /><published>2024-05-01T00:00:00+00:00</published><updated>2024-05-01T00:00:00+00:00</updated><id>https://blog.liamcottle.com/2024/05/01/getting-started-with-meshtastic</id><content type="html" xml:base="https://blog.liamcottle.com/2024/05/01/getting-started-with-meshtastic">&lt;p&gt;&lt;img src=&quot;/assets/images/2024/05/01/meshtastic_node.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Over the last few months, I’ve been playing with &lt;a href=&quot;https://meshtastic.org/&quot;&gt;Meshtastic&lt;/a&gt;, an open-source “mesh” based long-range communications app (and firmware) based on &lt;a href=&quot;https://en.wikipedia.org/wiki/LoRa&quot;&gt;LoRa&lt;/a&gt; that runs on microcontroller development boards that you can pick up pretty cheap on &lt;a href=&quot;https://www.aliexpress.com/&quot;&gt;AliExpress&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I decided to put this blog post together as I’ve been sending out various email replies with my recommendations, but think it will be good to put it all in one place, where it can be easily shared, and I can update it over time.&lt;/p&gt;

&lt;p&gt;Below is a list of the devices I have used with Meshtastic, along with my comments for what they’re good at, and what they’re bad at.&lt;/p&gt;

&lt;p&gt;Note that all my recommendations for frequencies and antennas are based on the New Zealand requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TLDR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you want a cheap, basic device, to use with your phone, grab the Heltec v3.&lt;/li&gt;
  &lt;li&gt;If you want GPS and don’t care for a nice enclosure, get the Heltec Wireless Tracker.&lt;/li&gt;
  &lt;li&gt;If you want to build a low power, solar node powered by batteries, get the RAK Wireless boards.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2024/05/01/heltec_v3.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Heltec v3&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;NZD $35 on AliExpress (add $5 for a plastic case)&lt;/li&gt;
  &lt;li&gt;You will want the 902-928MHz version for New Zealand&lt;/li&gt;
  &lt;li&gt;Max transmit power 22dBm (~150mW)&lt;/li&gt;
  &lt;li&gt;Pro: Has a reasonable case&lt;/li&gt;
  &lt;li&gt;Pro: Cheapest unit you can buy&lt;/li&gt;
  &lt;li&gt;Pro: Supports connecting via Bluetooth and WiFi&lt;/li&gt;
  &lt;li&gt;Pro: You can replace the antenna, the board uses an IPEX connector. This will greatly increase the range&lt;/li&gt;
  &lt;li&gt;Con: Has a terrible stock antenna, you will struggle to send/receive unless you are very close to other devices&lt;/li&gt;
  &lt;li&gt;Con: Has a terrible soldered Bluetooth antenna. Bluetooth range will be poor. You would need to solder the board to replace it&lt;/li&gt;
  &lt;li&gt;Con: Does not have a GPS module, but you can share your position from your mobile phone GPS, or set a fixed position in settings&lt;/li&gt;
  &lt;li&gt;Con: ESP32 based, so it draws ~100mA continuously while idling, even when not transmitting, so it’s too power hungry for using as a solar node&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://s.click.aliexpress.com/e/_Dkn5miP&quot;&gt;Buy from AliExpress&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2024/05/01/heltec_wireless_tracker.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Heltec Wireless Tracker&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;NZD $40 on AliExpress (does not include a case)&lt;/li&gt;
  &lt;li&gt;You will want the 902-928MHz version for New Zealand&lt;/li&gt;
  &lt;li&gt;Max transmit power 22dBm (~150mW)&lt;/li&gt;
  &lt;li&gt;Pro: Includes a GPS module, and can send its own position to the mesh without needing to be connected to any other devices&lt;/li&gt;
  &lt;li&gt;Pro: Supports connecting via Bluetooth and WiFi&lt;/li&gt;
  &lt;li&gt;Pro: Has a reasonable stock antenna, I can send/receive with my &lt;a href=&quot;/assets/images/2024/05/01/meshtastic_node.jpg&quot;&gt;hilltop node&lt;/a&gt; even with the antenna lying sideways on the seat inside my car.&lt;/li&gt;
  &lt;li&gt;Pro: You can replace the antenna, the board uses an IPEX connector.&lt;/li&gt;
  &lt;li&gt;Con: Has a terrible soldered Bluetooth antenna. Bluetooth range will be poor. You would need to solder the board to replace it&lt;/li&gt;
  &lt;li&gt;Con: Does not include a plastic case, and seems to be hard to find any 3D printed cases online&lt;/li&gt;
  &lt;li&gt;Con: ESP32 based, so it draws ~100mA continuously while idling, even when not transmitting, so it’s too power hungry for using as a solar node&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://s.click.aliexpress.com/e/_DEgvwk3&quot;&gt;Buy from AliExpress&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2024/05/01/rak4631_pocket_node.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/assets/images/2024/05/01/rak4631_pocket_nodes.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RAK Wireless: Meshtastic Starter Kit&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;NZD $40 on RAK Wireless website (excluding shipping)&lt;/li&gt;
  &lt;li&gt;You will want the 900MHz (AU915) version for New Zealand&lt;/li&gt;
  &lt;li&gt;Includes 1x WisBlock Base (RAK19007), 1x WisBlock Core (RAK4631), 1x LoRa Antenna, 1x BLE Antenna&lt;/li&gt;
  &lt;li&gt;Max LoRa transmit power 22dBm (~150mW)&lt;/li&gt;
  &lt;li&gt;Max Bluetooth transmit power 4dBm (~2.5mW)&lt;/li&gt;
  &lt;li&gt;Does not include a GPS module by default, buy you can purchase separately and easily clip on to base board&lt;/li&gt;
  &lt;li&gt;Pro: Supports connecting via Bluetooth&lt;/li&gt;
  &lt;li&gt;Pro: Has reasonable stock antennas. The stock bluetooth antenna gets very good range&lt;/li&gt;
  &lt;li&gt;Pro: You can replace both the LoRa and Bluetooth antennas, the board uses IPEX connectors&lt;/li&gt;
  &lt;li&gt;Pro: Not based on ESP32, and only sips ~2mA continuously while idling (excluding transmitting), so it’s perfect for using as a solar node with 18650 lithium cells&lt;/li&gt;
  &lt;li&gt;Pro: Can be put inside &lt;a href=&quot;https://www.printables.com/model/623484-rak-meshtastic-starter-kit-no-additional-hardware&quot;&gt;an awesome 3D printable case&lt;/a&gt;, designed by @pdxlocs on printables.com&lt;/li&gt;
  &lt;li&gt;Con: Does not include WiFi&lt;/li&gt;
  &lt;li&gt;Con: Does not include a plastic case, however there are many enclosures available to buy or 3D print&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/Datasheet&quot;&gt;View Datasheet&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://store.rakwireless.com/products/wisblock-meshtastic-starter-kit?variant=43884034654406&quot;&gt;Buy from RAK Wireless&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://s.click.aliexpress.com/e/_opudIex&quot;&gt;Buy from AliExpress&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.printables.com/model/623484-rak-meshtastic-starter-kit-no-additional-hardware&quot;&gt;Download 3D Printable Case&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Antenna Recommendations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;RAK Wireless: Blade Antenna&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;NZD $10 (excluding shipping)&lt;/li&gt;
  &lt;li&gt;You will want the 902-928MHz version for New Zealand&lt;/li&gt;
  &lt;li&gt;Max Gain: 2.3 dBi&lt;/li&gt;
  &lt;li&gt;VSWR: ≤ 1.5&lt;/li&gt;
  &lt;li&gt;Vertically polarized&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.rakwireless.com/Product-Categories/Accessories/RAKARJ16/Overview/&quot;&gt;View Datasheet&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://store.rakwireless.com/products/blade-antenna?variant=40475440939206&quot;&gt;Buy from RAK Wireless&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://s.click.aliexpress.com/e/_omd8Lpd&quot;&gt;Buy from AliExpress&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Delivery Timeframes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;AliExpress usually has my orders delivered from China to New Zealand within 7-10 days.&lt;/li&gt;
  &lt;li&gt;RAK Wireless delivered from China to New Zealand in 13 days. However, I was not sent a tracking link until 10 days after ordering.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Meshtastic Map&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I have built an open-source web based map for Meshtastic. It shows all the nodes heard on the public MQTT server, and allows for viewing their metrics and status.&lt;/p&gt;

&lt;p&gt;It is optimised for viewing on mobile devices, and allows you to share a direct link to your node.&lt;/p&gt;

&lt;p&gt;You can view my online map here:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://meshtastic.liamcottle.net&quot;&gt;https://meshtastic.liamcottle.net&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’d like to view the source code, or host it yourself, you can find it on GitHub:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/liamcottle/meshtastic-map&quot;&gt;https://github.com/liamcottle/meshtastic-map&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Public Meshtastic Groups&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Facebook: &lt;a href=&quot;https://www.facebook.com/groups/730536684339042&quot;&gt;Meshtastic&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Facebook: &lt;a href=&quot;https://www.facebook.com/groups/731677999061283&quot;&gt;Meshtastic NZ&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discord &lt;a href=&quot;https://discord.com/invite/ktMAKGBnBs&quot;&gt;Meshtastic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.google.com/presentation/d/15zIRD4zakf1HaIG4gyyqWHt6SYz4oter5oT2-RXNtfk/edit?usp=sharing&quot;&gt;Meshtastic Presentation Slides&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.google.com/document/d/18Cs-YXFZI5GWUGDQ_0BT9vXGWsA36sCYyXHMHQG7p3I/edit?usp=sharing&quot;&gt;Meshtastic Quick Start Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;reticulum&quot;&gt;Reticulum?&lt;/h2&gt;

&lt;p&gt;Another interesting project I’m tinkering around with is Reticulum. I may write up a blog post on this sometime in the future.
In the meantime, feel free to check it out.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://reticulum.network/&quot;&gt;https://reticulum.network/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://unsigned.io/rnode&quot;&gt;https://unsigned.io/rnode&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://unsigned.io/private-messaging-over-lora/&quot;&gt;https://unsigned.io/private-messaging-over-lora/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/markqvist/Reticulum&quot;&gt;https://github.com/markqvist/Reticulum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I recently released an open source web chat interface for this project.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/liamcottle/reticulum-webchat&quot;&gt;https://github.com/liamcottle/reticulum-webchat&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Liam Cottle</name></author><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.liamcottle.com/assets/images/2024/05/01/meshtastic.png" /><media:content medium="image" url="https://blog.liamcottle.com/assets/images/2024/05/01/meshtastic.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">UniFi Protect Camera FOV List</title><link href="https://blog.liamcottle.com/2023/12/24/unifi-protect-camera-fov-list" rel="alternate" type="text/html" title="UniFi Protect Camera FOV List" /><published>2023-12-24T14:45:00+00:00</published><updated>2023-12-24T14:45:00+00:00</updated><id>https://blog.liamcottle.com/2023/12/24/unifi-protect-camera-fov-list</id><content type="html" xml:base="https://blog.liamcottle.com/2023/12/24/unifi-protect-camera-fov-list">&lt;p&gt;&lt;a href=&quot;/assets/images/2023/12/25/unifi_protect_camera_fov_list_spreadsheet.png&quot;&gt;&lt;img src=&quot;/assets/images/2023/12/25/unifi_protect_camera_fov_list_spreadsheet.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Over the last few weeks, I’ve been comparing the viewing angles of the UniFi Protect cameras.&lt;/p&gt;

&lt;p&gt;I have a range of these devices installed at various sites, but have wanted a quick way to find the camera with the best FOV for the job.&lt;/p&gt;

&lt;p&gt;Instead of searching for the datasheets over and over, I’ve compiled this handy spreadsheet as a quick reference.&lt;/p&gt;

&lt;h2 id=&quot;view-full-spreadsheet&quot;&gt;View Full Spreadsheet&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.google.com/spreadsheets/d/19gWNBV_4kvnsmdj-uHUA7X1D9HkFqJnvlsn1I7_AbX4/edit?usp=sharing&quot;&gt;https://docs.google.com/spreadsheets/d/19gWNBV_4kvnsmdj-uHUA7X1D9HkFqJnvlsn1I7_AbX4/edit?usp=sharing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://dl.ubnt.com/datasheets/unifi/UniFi_Video_G3_DS.pdf&quot;&gt;https://dl.ui.com/datasheets/unifi/UniFi_Video_G3_DS.pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dl.ubnt.com/ds/uvc-g4-bullet-ds.pdf&quot;&gt;https://dl.ui.com/ds/uvc-g4-bullet-ds.pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dl.ubnt.com/ds/uvc-g4-dome-ds.pdf&quot;&gt;https://dl.ui.com/ds/uvc-g4-dome-ds.pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dl.ui.com/ds/uvc-g4-doorbell-ds.pdf&quot;&gt;https://dl.ui.com/ds/uvc-g4-doorbell-ds.pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dl.ui.com/ds/uvc-g4-ins_ds.pdf&quot;&gt;https://dl.ui.com/ds/uvc-g4-ins_ds.pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dl.ubnt.com/datasheets/unifi/UVC-G4-PRO_DS.pdf&quot;&gt;https://dl.ui.com/datasheets/unifi/UVC-G4-PRO_DS.pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dl.ui.com/ds/uvc-g5-bullet_ds.pdf&quot;&gt;https://dl.ui.com/ds/uvc-g5-bullet_ds.pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dl.ui.com/ds/uvc-g5-dome_ds.pdf&quot;&gt;https://dl.ui.com/ds/uvc-g5-dome_ds.pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dl.ui.com/ds/uvc-g5-flex_ds.pdf&quot;&gt;https://dl.ui.com/ds/uvc-g5-flex_ds.pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dl.ui.com/ds/uvc-g5-pro_ds.pdf&quot;&gt;https://dl.ui.com/ds/uvc-g5-pro_ds.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Liam Cottle</name></author><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.liamcottle.com/assets/images/2023/12/25/unifi_protect_camera_fov_list_spreadsheet.png" /><media:content medium="image" url="https://blog.liamcottle.com/assets/images/2023/12/25/unifi_protect_camera_fov_list_spreadsheet.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Adopting old UniFi Video cameras into UniFi Protect</title><link href="https://blog.liamcottle.com/2023/11/30/adopting-old-unifi-video-camera-into-unifi-protect" rel="alternate" type="text/html" title="Adopting old UniFi Video cameras into UniFi Protect" /><published>2023-11-30T09:30:00+00:00</published><updated>2023-11-30T09:30:00+00:00</updated><id>https://blog.liamcottle.com/2023/11/30/adopting-old-unifi-video-camera-into-unifi-protect</id><content type="html" xml:base="https://blog.liamcottle.com/2023/11/30/adopting-old-unifi-video-camera-into-unifi-protect">&lt;p&gt;&lt;img src=&quot;/assets/images/2023/11/30/unifi_video_upgrade_to_protect.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A few days ago, I was contacted by a friend who had just purchased 4 brand new &lt;a href=&quot;https://store.ui.com/us/en/products/uvc-g3-flex&quot;&gt;UniFi G3 Flex&lt;/a&gt; cameras from a &lt;a href=&quot;https://www.pbtech.co.nz/product/CCTUBI80313/Ubiquiti-UniFi-Protect-UVC-G3-FLEX-1080p-IndoorOut&quot;&gt;New Zealand based supplier&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;He told me he couldn’t get any of them to show up in UniFi Protect, despite them powering up and showing a solid white LED indicating they were ready to adopt.&lt;/p&gt;

&lt;p&gt;This was puzzling as he already had several other G3 Flex cameras, purchased a week before, connected to the same CloudKey Gen2+ all running without any issues.&lt;/p&gt;

&lt;p&gt;I had a similar issue in the past with a few G3 Bullet cameras I picked up second hand, which were on older UniFi Video firmware, and UniFi Protect refused to see them as well…&lt;/p&gt;

&lt;p&gt;After scanning his network with &lt;a href=&quot;https://angryip.org/&quot;&gt;Angry IP Scanner&lt;/a&gt;, (I couldn’t access his WiFi router to check the DHCP reservations), I found the IP addresses for the cameras, and logged in with the default credentials.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Username: ubnt
Password: ubnt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The login page was a dead give away that these cameras were in fact running older firmware as they showed the UniFi Video logo instead of the UniFi Protect logo. Let’s look at the system information to see the specific version it was running. Wow, v4.2.59! As of this post, the latest firmware is v4.64.150&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2023/11/30/uvc_g3_flex_firmware_v4.2.59.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Okay, so I determined these cameras needed to be updated to the latest firmware. I went over to the &lt;a href=&quot;https://www.ui.com/download/software/uvc-g3-flex&quot;&gt;Software Downloads&lt;/a&gt; page for the UVC-G3-Flex on the Ubiquiti website, and saw the latest firmware listed was v4.30.0 released on 25th September 2020. That’s over 3 years ago!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2023/11/30/uvc_g3_flex_firmware_download.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I downloaded the firmware anyway, with the hopes it would resolve the issue, and flashed it via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;System&lt;/code&gt; &amp;gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Firmware&lt;/code&gt; section of the camera web interface. Flashing was successful, and the camera was now running UniFi Protect firmware. I could tell as the logo was now updated and the system information showed the new firmware version.&lt;/p&gt;

&lt;p&gt;Then I waited for the camera to show up for adoption in UniFi Protect… and then I waited some more… and then I factory reset it a few times, but still, nothing…&lt;/p&gt;

&lt;p&gt;According to a few posts in the forums (linked at the bottom), this old v4.30.0 UniFi Protect firmware was also too old to be detected by the latest version of UniFi Protect v2.8.35 (UniFi OS v3.1.14)…&lt;/p&gt;

&lt;p&gt;So I followed a suggestion from one of the forum users, which was to pull the firmware from the CloudKey Gen2+ as it has the latest firmware it flashed to the other cameras cached in the downloads folder.&lt;/p&gt;

&lt;p&gt;I pulled the latest firmware from the CloudKey to my Mac using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scp&lt;/code&gt; command, and then uploaded and flashed this firmware to the G3 Flex cameras via their web interface.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scp root@cloudkey-ip:/srv/unifi-protect/downloads/aef8-s2l-4.64.150-44b9a1b475574adbb5c3f47b4ebf743e.bin .
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Flashing success, the cameras were now running UniFi Protect v4.64.150! Again, I factory reset the units and they still did not show up in UniFi Protect…&lt;/p&gt;

&lt;p&gt;The last thing to try, other than to send them back to the supplier for an exchange, was to manually input the IP address of the CloudKey into the UniFi Protect Server field.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2023/11/30/unifi_protect_server_ip.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After clicking Save Changes, the cameras immediately showed up for adoption. Maybe if I had tried this from the start they would have shown up without the need to flash new firmware, but if I remember correctly I tried this on my G3 Bullet cameras and they did not show up…&lt;/p&gt;

&lt;p&gt;Who knows, but that was a painful time for brand new units! Seems they were old stock being cleared out, and we were the unlucky recipients.&lt;/p&gt;

&lt;p&gt;If only UniFi Protect could detect and update cameras with UniFi Video firmware automatically!&lt;/p&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/Ubiquiti/comments/kmgbmp/uvc_g3_dome_not_able_to_adopt&quot;&gt;https://reddit.com/r/Ubiquiti/comments/kmgbmp/uvc_g3_dome_not_able_to_adopt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://community.ui.com/questions/where-I-can-find-the-latest-firmware-version/edfffa83-b954-4fd8-ade3-0a806ce45565&quot;&gt;https://community.ui.com/questions/where-I-can-find-the-latest-firmware-version&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://community.ui.com/questions/New-G3-camera-doesnt-get-adopted-to-UniFi-Video-Server/aa955bfd-86d6-45c5-8982-6e41f4d8d8a7&quot;&gt;https://community.ui.com/questions/New-G3-camera-doesnt-get-adopted-to-UniFi-Video-Server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Liam Cottle</name></author><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.liamcottle.com/assets/images/2023/11/30/unifi_video_upgrade_to_protect.png" /><media:content medium="image" url="https://blog.liamcottle.com/assets/images/2023/11/30/unifi_video_upgrade_to_protect.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">My first QSO via the ISS</title><link href="https://blog.liamcottle.com/2023/08/16/my-first-qso-via-the-iss" rel="alternate" type="text/html" title="My first QSO via the ISS" /><published>2023-08-16T10:00:00+00:00</published><updated>2023-08-16T10:00:00+00:00</updated><id>https://blog.liamcottle.com/2023/08/16/my-first-qso-via-the-iss</id><content type="html" xml:base="https://blog.liamcottle.com/2023/08/16/my-first-qso-via-the-iss">&lt;p&gt;&lt;a href=&quot;https://images.nasa.gov/details-s132e012208&quot;&gt;&lt;img src=&quot;/assets/images/2023/08/16/s132e012208~large.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After obtaining my amateur radio license at the ham cram back in November last year, taught by Warren Harris, &lt;a href=&quot;https://qrz.com/db/zl2aj&quot;&gt;ZL2AJ&lt;/a&gt;, I had a goal of making a QSO through the &lt;a href=&quot;https://www.amsat.org/amateur-radio-on-the-iss/&quot;&gt;International Space Station Amateur Radio repeater&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In recent months, I was attempting this with my &lt;a href=&quot;https://techoman.co.nz/collections/amateur-mobile-radios/products/baofeng-uv-5r-5w-ham-walkie-talkie-dual-vhf-uhf&quot;&gt;Baofeng UV5R&lt;/a&gt; that was kindly donated by Aidan Kirk, &lt;a href=&quot;https://qrz.com/db/zl2abk&quot;&gt;ZL2ABK&lt;/a&gt;. I had upgraded it from the standard rubber ducky antenna it came with, to a longer &lt;a href=&quot;https://techoman.co.nz/products/techoman-na-771-antenna-black-sma-f-dual-band-144-430mhz-flexi-antenna&quot;&gt;Nagoya whip antenna from Techoman&lt;/a&gt;. After numerous attempts over several passes, I still wasn’t able to get into the repeater, but I was able to hear other radio operators crystal clear.&lt;/p&gt;

&lt;p&gt;I decided to upgrade from the 5W UV5R to an 8W &lt;a href=&quot;https://techoman.co.nz/collections/amateur-mobile-radios/products/baofeng-uv-82-8-watt-ham-walkie-talkie-dual-vhf-uhf&quot;&gt;UV82&lt;/a&gt;, thinking maybe a little extra power would help as I’d heard other radio operators were able to get through on an HT with a whip antenna. However, this was not the case for me…&lt;/p&gt;

&lt;p&gt;I’ve been keeping an eye on the &lt;a href=&quot;https://apps.apple.com/us/app/satellite-tracker-by-star-walk/id1248172706&quot;&gt;Satellite Tracker&lt;/a&gt; app on my phone which sends notifications when the ISS is about to rise and pass over Gisborne, New Zealand. On my way to the radio direction finding course that was being taught at the local club, I received a notification from the app saying the ISS was about to rise. Since I was already grabbing my equipment and heading out, I decided to have a go at getting into the repeater with the new &lt;a href=&quot;/assets/images/2023/08/16/diy-yagi-antenna.jpeg&quot;&gt;DIY Yagi antenna&lt;/a&gt;, made from tape measures and PVC pipe that Steve Main, &lt;a href=&quot;https://qrz.com/db/zl2ri&quot;&gt;ZL2RI&lt;/a&gt; had shown and helped us to build over the previous weeks.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2023/08/16/diy-yagi-antenna.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Within a few moments of powering on my radio and pointing the Yagi antenna into the sky, and seeing the glowing white dot, known as the space station flying across the sky, I was able to hear Charles, &lt;a href=&quot;https://qrz.com/db/zl1rko&quot;&gt;ZL1RKO&lt;/a&gt; calling over the ISS. I put out a reply, “ZL1RKO from ZL2DEV”. A few moments later, I heard “ZL2DEV” coming back from ZL1RKO.&lt;/p&gt;

&lt;p&gt;Success! I had achieved my goal, and made my first contact via the International Space Station Amateur Radio repeater!&lt;/p&gt;

&lt;p&gt;This clearly reinforces the fact that you don’t necessarily need more power, you probably just need a better antenna!&lt;/p&gt;

&lt;p&gt;Charles sent me a follow-up message via my email listed on &lt;a href=&quot;https://qrz.com/db/zl2dev&quot;&gt;QRZ.com&lt;/a&gt;, confirming the contact and this also included that he was located in Waiheke Island, near Auckland, New Zealand.&lt;/p&gt;

&lt;p&gt;I’m looking forward to making more contacts via the &lt;a href=&quot;https://www.amsat.org/amateur-radio-on-the-iss/&quot;&gt;ISS&lt;/a&gt;, and hopefully next time I’ll be able to make an international contact, potentially to Australia? Who knows!&lt;/p&gt;

&lt;p&gt;73, Liam &lt;a href=&quot;https://qrz.com/db/zl2dev&quot;&gt;ZL2DEV&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;ul&gt;
    &lt;li&gt;Originally published in the &lt;a href=&quot;https://drive.google.com/file/d/1bPhBaj613T8cwE0W3NBS0yySvkmW34w0/view?usp=drive_link&quot;&gt;May 2023 newsletter&lt;/a&gt; of &lt;a href=&quot;https://zl2aa.nz&quot;&gt;Gisborne Amateur Radio Club&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;Also published in the July/August 2023 edition of &lt;a href=&quot;https://www.nzart.org.nz/news/break-in/&quot;&gt;NZART’s Break-In magazine&lt;/a&gt;.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;</content><author><name>Liam Cottle</name></author><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.liamcottle.com/assets/images/2023/08/16/s132e012208~large.jpeg" /><media:content medium="image" url="https://blog.liamcottle.com/assets/images/2023/08/16/s132e012208~large.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">A new ham’s opinion on entry level gear</title><link href="https://blog.liamcottle.com/2023/06/20/a-new-hams-opinion-on-entry-level-gear" rel="alternate" type="text/html" title="A new ham’s opinion on entry level gear" /><published>2023-06-20T00:30:00+00:00</published><updated>2023-06-20T00:30:00+00:00</updated><id>https://blog.liamcottle.com/2023/06/20/a-new-hams-opinion-on-entry-level-gear</id><content type="html" xml:base="https://blog.liamcottle.com/2023/06/20/a-new-hams-opinion-on-entry-level-gear">&lt;p&gt;&lt;img src=&quot;/assets/images/2023/06/20/IMG_2501.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Recently, I was asked by Cam &lt;a href=&quot;https://qrz.com/db/zl1dks&quot;&gt;ZL1DKS&lt;/a&gt; if I would be willing to share my thoughts on entry level gear. As I’m a relatively new ham, having obtained my amateur radio licence in late November 2022, this would be a good opportunity to show newbies looking at getting into the hobby what you could expect from cheaper, entry level gear.&lt;/p&gt;

&lt;p&gt;I started off with a &lt;a href=&quot;https://techoman.co.nz/collections/amateur-mobile-radios/products/baofeng-uv-5r-5w-ham-walkie-talkie-dual-vhf-uhf&quot;&gt;Baofeng UV5R&lt;/a&gt; with the standard rubber ducky antenna, upgraded to a &lt;a href=&quot;https://techoman.co.nz/collections/amateur-mobile-radios/products/baofeng-uv-82-8-watt-ham-walkie-talkie-dual-vhf-uhf&quot;&gt;UV82&lt;/a&gt; with a &lt;a href=&quot;https://techoman.co.nz/products/techoman-na-771-antenna-black-sma-f-dual-band-144-430mhz-flexi-antenna&quot;&gt;Nagoya whip antenna&lt;/a&gt; and more recently purchased a &lt;a href=&quot;https://techoman.co.nz/products/tyt-th-9800-plus-50w-mobile-transceiver-vhf-uhf-quad-band-ham-radio-with-airband&quot;&gt;TYT TH-9800&lt;/a&gt; that I use as a 2m/70cm base station.&lt;/p&gt;

&lt;p&gt;Depending on what you’re interested in, entry level gear might be all you need. I personally enjoy making QSOs via the &lt;a href=&quot;https://www.amsat.org/amateur-radio-on-the-iss/&quot;&gt;FM repeater on the International Space Station&lt;/a&gt;. To date, I have made 5 successful contacts through the ISS with a &lt;a href=&quot;/assets/images/2023/06/20/IMG_2501.jpg&quot;&gt;DIY Yagi antenna&lt;/a&gt; and the UV5R. It puts out a little under 5W, but the signal reports indicate I’m a clear copy.&lt;/p&gt;

&lt;p&gt;I don’t have a mobile rig in my car, so when I’m out and about, I take the UV82 handheld with me. Using the Nagoya whip antenna instead of the rubber ducky antenna, and putting out under 8W, I’m able to receive the local repeaters from quite a fair distance away, and usually hit them with a reasonable signal. While with the rubber ducky antenna, signals weren’t so good at the same distances.&lt;/p&gt;

&lt;p&gt;Inside my house, using the handhelds, it’s a bit of a struggle. I can receive very well standing in specific spots of the kitchen, however my signal out is reported as very noisy although still somewhat readable. When in the office, where I spend most of my time, I can barely receive anything, and getting a signal out seems to be impossible. To solve this, I purchased a &lt;a href=&quot;https://techoman.co.nz/products/tyt-th-9800-plus-50w-mobile-transceiver-vhf-uhf-quad-band-ham-radio-with-airband&quot;&gt;TYT TH-9800&lt;/a&gt;. It puts out up to 50W on VHF and 40W on UHF. Paired with a &lt;a href=&quot;https://techoman.co.nz/products/techoman-vhf-uhf-complete-base-station-antenna-tm770b-770r-antenna-20-metres&quot;&gt;TM770B-770R&lt;/a&gt; antenna on the roof, I’m able to easily hit repeaters over 60KM away. Signal reports from contacts over the repeaters as well as over simplex indicate that my signal is impressive.&lt;/p&gt;

&lt;p&gt;The biggest pain point with these radios is programming them. If you don’t have a programming cable, you’re going to have a wild time saving favourite frequencies as well as setting any appropriate CTCSS tones. For communications over simplex frequencies, it’s as easy as entering the frequency and then holding the PTT button. You’ll most certainly want to invest in a programming cable, and then download &lt;a href=&quot;https://chirp.danplanet.com/&quot;&gt;CHIRP&lt;/a&gt;. This program lets you easily add in favourite channels, offsets and tones. If you decide to buy another radio, and it’s supported by CHIRP, you can copy the same channels over in a few seconds.&lt;/p&gt;

&lt;p&gt;With all of that said, my first 50 contacts were all made possible by cheap, entry level equipment. If you’ve just read this article and are looking at getting into the hobby, you can have some serious fun with entry level gear without breaking the bank.&lt;/p&gt;

&lt;p&gt;73, Liam &lt;a href=&quot;https://qrz.com/db/zl2dev&quot;&gt;ZL2DEV&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;equipment&quot;&gt;Equipment&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Portable&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://techoman.co.nz/collections/amateur-mobile-radios/products/baofeng-uv-5r-5w-ham-walkie-talkie-dual-vhf-uhf&quot;&gt;Baofeng UV5R - 5 Watt Handheld&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://techoman.co.nz/collections/amateur-mobile-radios/products/baofeng-uv-82-8-watt-ham-walkie-talkie-dual-vhf-uhf&quot;&gt;Baofeng UV82 - 8 Watt Handheld&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://techoman.co.nz/products/techoman-na-771-antenna-black-sma-f-dual-band-144-430mhz-flexi-antenna&quot;&gt;Nagoya NA-771 Whip Antenna&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Base Station&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://techoman.co.nz/products/tyt-th-9800-plus-50w-mobile-transceiver-vhf-uhf-quad-band-ham-radio-with-airband&quot;&gt;TYT TH-9800 - 50 Watt Base Station&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://techoman.co.nz/products/techoman-vhf-uhf-complete-base-station-antenna-tm770b-770r-antenna-20-metres&quot;&gt;VHF/UHF Base Station Antenna&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;software&quot;&gt;Software&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://chirp.danplanet.com/&quot;&gt;CHIRP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Liam Cottle</name></author><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.liamcottle.com/assets/images/2023/06/20/IMG_2501.jpg" /><media:content medium="image" url="https://blog.liamcottle.com/assets/images/2023/06/20/IMG_2501.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">DNS Tunnel for free internet?</title><link href="https://blog.liamcottle.com/2022/10/14/dns-tunnel-for-free-internet" rel="alternate" type="text/html" title="DNS Tunnel for free internet?" /><published>2022-10-14T09:30:00+00:00</published><updated>2022-10-14T09:30:00+00:00</updated><id>https://blog.liamcottle.com/2022/10/14/dns-tunnel-for-free-internet</id><content type="html" xml:base="https://blog.liamcottle.com/2022/10/14/dns-tunnel-for-free-internet">&lt;p&gt;&lt;img src=&quot;/assets/images/2022/10/14/dns-tunnel.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This blog post explains how I connected to the internet through a 4G/LTE sim card that has no credit or data allowance by setting up a &lt;a href=&quot;https://en.wikipedia.org/wiki/SOCKS&quot;&gt;socks5 proxy&lt;/a&gt; on a remote server and creating a DNS tunnel between my local device and that remote server.&lt;/p&gt;

&lt;h2 id=&quot;what&quot;&gt;What?&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;We can use &lt;a href=&quot;https://www.inet.no/dante&quot;&gt;Dante&lt;/a&gt; as a socks5 proxy on a remote server.&lt;/li&gt;
  &lt;li&gt;We can use &lt;a href=&quot;https://github.com/yarrick/iodine&quot;&gt;Iodine&lt;/a&gt; to create a DNS tunnel between our local device and the remote server.&lt;/li&gt;
  &lt;li&gt;We can connect to the remote server’s socks5 proxy via the DNS tunnel to access the internet.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;why&quot;&gt;Why?&lt;/h2&gt;

&lt;p&gt;I don’t know really… Just for fun?&lt;/p&gt;

&lt;p&gt;Who knows, you might be in a scenario where you have a 4G connection, and have no credit or data allowance, and just really want to check out &lt;a href=&quot;https://twitter.com/liamcottle&quot;&gt;my latest tweets&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If your connection allows you to make DNS queries for arbitrary domain names without needing to have credit on your account, you can use a DNS tunnel to access any other server on the internet.&lt;/p&gt;

&lt;p&gt;I want to let you know upfront, before you try this, that &lt;a href=&quot;https://github.com/yarrick/iodine#performance&quot;&gt;it will be extremely slow&lt;/a&gt;. You’re not going to see gigabit network speeds, let alone megabit speeds. You’ll probably only see a few kilobytes per second, at best. Either way, this network connection could be useful in some situations.&lt;/p&gt;

&lt;h2 id=&quot;how&quot;&gt;How?&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/yarrick/iodine&quot;&gt;Iodine&lt;/a&gt; creates a network tunnel by acting as a domain name server.&lt;/p&gt;

&lt;p&gt;When your local device sends a DNS request for a domain name, it will be sent to your carriers’ DNS server, which will then look up the name server associated with the domain being queried.&lt;/p&gt;

&lt;p&gt;Your carriers’ DNS server will then query that name server and return the result. This is known as a recursive DNS server.&lt;/p&gt;

&lt;p&gt;We will configure the name server for our domain to be our Iodine server. This will make the carriers’ DNS server query our remote server when we ask it for DNS records.&lt;/p&gt;

&lt;p&gt;By using Iodine as our custom domain name server;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Your local device can send data to your remote server by encoding network packets in the domain name it requests the DNS records for.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The Iodine server can then send data back to your local device by responding to the DNS queries with encoded network packets in the DNS result.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A two-way connection is established by sending ping packets from the local device to the remote server every so often. This allows the remote server to send packets to the local device.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Iodine will create a network and assign an IP address to your local device and remote server. Packets sent between these IP addresses will travel through the DNS tunnel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To set this up, you will need a few things;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A domain name, such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mydnstunnel.com&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;An Ubuntu 22.04 server with a public IP address to act as the Iodine and socks5 server.&lt;/li&gt;
  &lt;li&gt;A device that will allow you to query a DNS server for free. You could use one of the following;
    &lt;ul&gt;
      &lt;li&gt;A 4G/LTE USB Modem.&lt;/li&gt;
      &lt;li&gt;A mobile phone with a sim card that can act as a WiFi hotspot.&lt;/li&gt;
      &lt;li&gt;I’m using a &lt;a href=&quot;https://mikrotik.com/product/ltap_mini_lte_kit&quot;&gt;MikroTik LtAp Mini&lt;/a&gt; with a sim card as it gives me full control of all routing.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Domain Name&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once you have registered a domain name, you will need to configure a couple of DNS records. These are the subdomain records that Iodine will communicate through.&lt;/p&gt;

&lt;p&gt;If you registered the domain &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mydnstunnel.com&lt;/code&gt;, configure the following DNS records;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Create an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NS&lt;/code&gt; record for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t1.mydnstunnel.com&lt;/code&gt; that points to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t1ns.mydnstunnel.com&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Create an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;A&lt;/code&gt; record for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t1ns.mydnstunnel.com&lt;/code&gt; that has the Public IP of your remote server.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t1&lt;/code&gt; stands for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Tunnel 1&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t1ns&lt;/code&gt; stands for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Tunnel 1 Name Server&lt;/code&gt;. You can use anything, as long as it has the format &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{any}.mydnstunnel.com&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{any}ns.mydnstunnel.com&lt;/code&gt; and both records have the same value as each other for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{any}&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before proceeding further, you should check that your 4G/LTE connection is able to fetch the DNS records you just configured. Try with your carrier DNS server, probably used by default, otherwise try through Cloudflare or Google’s DNS servers to see if your carrier allows access to arbitrary DNS servers.&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# check that your carriers' DNS server will return your DNS records&lt;/span&gt;
dig t1ns.mydnstunnel.com

&lt;span class=&quot;c&quot;&gt;# check if your carrier allows you to access other DNS servers&lt;/span&gt;
dig t1ns.mydnstunnel.com @1.1.1.1
dig t1ns.mydnstunnel.com @8.8.8.8
dig t1ns.mydnstunnel.com @208.67.220.220
dig t1ns.mydnstunnel.com @208.67.222.222
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If you are able to see the public IP address that you configured for your domain, then Iodine should work for you.&lt;/p&gt;

&lt;p&gt;If you can’t see the DNS records for your custom domain, your carrier might block DNS traffic when you don’t have any credit or data allowance. In this case, Iodine will likely not work for you at all. But feel free to continue and see if it does anyway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remote Server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We need a remote server to run the Iodine Domain Name Server, and also a socks5 proxy. I’m going to use an Ubuntu 22.04 server with Dante as the socks5 proxy.&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# install dante&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt update
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-y&lt;/span&gt; dante-server

&lt;span class=&quot;c&quot;&gt;# remove default dante config&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo rm&lt;/span&gt; /etc/danted.conf

&lt;span class=&quot;c&quot;&gt;# add dante config&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;nano /etc/danted.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Add the below config to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/danted.conf&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;logoutput: syslog
user.privileged: root
user.unprivileged: nobody
socksmethod: none
clientmethod: none

# This only allows traffic to our DNS tunnel IP.
internal: 192.168.99.1 port=1080

# This is the interface for outbound proxy traffic.
external: eth0

client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After saving the dante config, restart the service.&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl restart danted
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Next we need to download and build &lt;a href=&quot;https://github.com/yarrick/iodine&quot;&gt;Iodine&lt;/a&gt; on the remote server.&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# install iodine dependencies&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt update
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-y&lt;/span&gt; cmake net-tools pkg-config zlib1g zlib1g-dev

&lt;span class=&quot;c&quot;&gt;# download iodine&lt;/span&gt;
git clone https://github.com/yarrick/iodine

&lt;span class=&quot;c&quot;&gt;# build iodine and move to bin&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;iodine
make
&lt;span class=&quot;nb&quot;&gt;chmod&lt;/span&gt; +x ./bin/iodined
&lt;span class=&quot;nb&quot;&gt;sudo cp&lt;/span&gt; ./bin/iodined /usr/local/bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iodined&lt;/code&gt; is installed on the remote server, you can run it with the following command;&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;iodined &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-DD&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-P&lt;/span&gt; password &lt;span class=&quot;nt&quot;&gt;-c&lt;/span&gt; 192.168.99.1/24 t1.mydnstunnel.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is what the flags do;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-f&lt;/code&gt; will run Iodine in the foreground.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-DD&lt;/code&gt; will output verbose logging so you can diagnose any issues.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-P password&lt;/code&gt; sets the password for the DNS tunnel. Use the same password on the client and server.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-c&lt;/code&gt; will disable checking the IP/port of the client on each request. Only use this if your network is unstable.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;192.168.99.1/24&lt;/code&gt; is the network where the DNS tunnel will run on the remote server. You can change this, but make sure to update the IP in the Dante config aswell.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t1.mydnstunnel.com&lt;/code&gt; is the domain name you chose, including the tunnel name prefix you added in your DNS records.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll want to run Iodine in the background to keep it running when you disconnect from the remote server, but while testing you can use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-f&lt;/code&gt; flag to run in the foreground. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+C&lt;/code&gt; will stop the Iodine server.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Note: the server executable is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iodined&lt;/code&gt;, and the client executable is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iodine&lt;/code&gt; (&lt;em&gt;without&lt;/em&gt; the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;d&lt;/code&gt;).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Local Device&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next step is to connect your local device to your carrier network through your 4G/LTE modem (or whatever device you chose to use).&lt;/p&gt;

&lt;p&gt;Then download and build Iodine for your local device. I am using macOS, and didn’t need to install any dependencies, but your setup might be different.&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# download iodine&lt;/span&gt;
git clone https://github.com/yarrick/iodine

&lt;span class=&quot;c&quot;&gt;# build iodine&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;iodine
make
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now that you have Iodine on your local device, try to establish a DNS tunnel to the remote server.&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo&lt;/span&gt; ./bin/iodine &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-P&lt;/span&gt; password t1.mydnstunnel.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-f&lt;/code&gt; will run Iodine in the foreground.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-P password&lt;/code&gt; sets the password for the DNS tunnel. Use the same password on the client and server.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t1.mydnstunnel.com&lt;/code&gt; is the domain name you chose, including the tunnel name prefix you added in your DNS records.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If all goes well, you should now have a DNS tunnel running. Try pinging the remote server through the tunnel.&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ping 192.168.99.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then, try pinging your local device from the remote server.&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ping 192.168.99.2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Note: Your local and remote device IPs might be different. Check the output after running Iodine for the correct IP addresses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;now-what&quot;&gt;Now what?&lt;/h2&gt;

&lt;p&gt;Now you have a DNS tunnel established to your remote server. You could use curl to make http requests through the socks5 proxy via the command line, or you could configure your local device to use the socks5 server as a global proxy so all traffic goes through it.&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl &lt;span class=&quot;nt&quot;&gt;-x&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;socks5h://192.168.99.1&quot;&lt;/span&gt; http://canhazip.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;troubleshooting&quot;&gt;Troubleshooting&lt;/h2&gt;

&lt;p&gt;If you’re having trouble pinging the remote server from the local device when the connection is established, make sure any intermediate DNS servers aren’t caching the query results.&lt;/p&gt;

&lt;p&gt;For example, in my setup I have MikroTik RouterOS as the main DNS server. You should configure this to have a low TTL for DNS caching, or change your local device DNS servers to your carrier DNS servers to remove the extra DNS server.&lt;/p&gt;

&lt;p&gt;The maintainers of the Iodine server also have a &lt;a href=&quot;https://code.kryo.se/iodine/check-it&quot;&gt;handy tool&lt;/a&gt; to check that your Iodine server is configured correctly.&lt;/p&gt;

&lt;h2 id=&quot;handy-snippets&quot;&gt;Handy Snippets&lt;/h2&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# SSH into the Remote Server via DNS Tunnel&lt;/span&gt;
ssh root@192.168.99.1

&lt;span class=&quot;c&quot;&gt;# SSH into any server via the socks5 proxy through the DNS tunnel&lt;/span&gt;
ssh &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ProxyCommand&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'nc -x 192.168.99.1 %h %p'&lt;/span&gt; user@server
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;future-research&quot;&gt;Future Research&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Maybe investigate running &lt;a href=&quot;https://www.wireguard.com/&quot;&gt;wireguard&lt;/a&gt; on the remote server instead of using a socks5 proxy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/yarrick/iodine&quot;&gt;https://github.com/yarrick/iodine&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://code.kryo.se/iodine/check-it&quot;&gt;https://code.kryo.se/iodine/check-it/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-set-up-dante-proxy-on-ubuntu-20-04&quot;&gt;https://www.digitalocean.com/community/tutorials/how-to-set-up-dante-proxy-on-ubuntu-20-04&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Liam Cottle</name></author><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.liamcottle.com/assets/images/2022/10/14/dns-tunnel.png" /><media:content medium="image" url="https://blog.liamcottle.com/assets/images/2022/10/14/dns-tunnel.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The start of a new blog</title><link href="https://blog.liamcottle.com/2022/05/18/the-start-of-a-new-blog" rel="alternate" type="text/html" title="The start of a new blog" /><published>2022-05-18T11:30:00+00:00</published><updated>2022-05-18T11:30:00+00:00</updated><id>https://blog.liamcottle.com/2022/05/18/the-start-of-a-new-blog</id><content type="html" xml:base="https://blog.liamcottle.com/2022/05/18/the-start-of-a-new-blog">&lt;p&gt;I’ve always wanted to start a blog, but have never actually made the effort to put one together. So here we are, the first post on a fresh new blog!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;What can you expect from this blog?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nothing really, but occasionally I may share my thoughts on what’s going on in the world, publish write-ups on security vulnerabilities that I have discovered or even just share something that I find interesting to save for future reference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Why am I even starting a blog?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the past, I’ve run multiple forum sites with software such as &lt;a href=&quot;https://www.phpbb.com/&quot;&gt;phpBB&lt;/a&gt;. These were mainly used as message boards for users of my apps that needed help. Users could find existing posts or chat with other members that could likely help them out without me having to repeatedly write the same information over and over in direct messages - which was painful for me, and didn’t help anyone else in the future with the same questions.&lt;/p&gt;

&lt;p&gt;These forums were discontinued several years ago now, but as of recently, I have created a &lt;a href=&quot;https://discord.gg/APQSQZNV7t&quot;&gt;Community Discord Server&lt;/a&gt; which as of writing, has over 800 members.&lt;/p&gt;

&lt;p&gt;Discord is nice for interacting with the community in real-time, and the forums were useful for providing a place of support for users of my apps, however these platforms, along with others such as Facebook and Twitter don’t really feel like the right place for me to share longer write-ups that probably aren’t really relevant to anyone idling in the chat or asking for support.&lt;/p&gt;

&lt;p&gt;I’m wanting a place that I can share my ideas and knowledge with the world in a more persistent kind of way. With real-time platforms, content is quickly lost to the endless scrolling canvas of the internet. However, with a blog, all of my posts will be available to see in one place without being lost amongst the content of everyone else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;What now?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re interested in following along with whatever I decide to write here, feel free to add my &lt;a href=&quot;/feed.xml&quot;&gt;Atom Feed&lt;/a&gt; to your favourite reader app, or add the site to your bookmarks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;How else can I follow you?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I mainly hang out in my &lt;a href=&quot;https://discord.gg/APQSQZNV7t&quot;&gt;Discord Server&lt;/a&gt;, but you can find me on &lt;a href=&quot;https://twitter.com/liamcottle&quot;&gt;Twitter&lt;/a&gt; or browse through my open source code on &lt;a href=&quot;https://github.com/liamcottle&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;So, let’s try this blogging thing, huh?&lt;/p&gt;</content><author><name>Liam Cottle</name></author><summary type="html">I’ve always wanted to start a blog, but have never actually made the effort to put one together. So here we are, the first post on a fresh new blog!</summary></entry></feed>