{"id":41,"date":"2026-04-11T09:41:07","date_gmt":"2026-04-11T09:41:07","guid":{"rendered":"https:\/\/alwaysbenoobing.com\/?p=41"},"modified":"2026-04-14T13:02:05","modified_gmt":"2026-04-14T13:02:05","slug":"uh-oh-something-went-wrong","status":"publish","type":"post","link":"https:\/\/alwaysbenoobing.com\/index.php\/2026\/04\/11\/uh-oh-something-went-wrong\/","title":{"rendered":"Uh oh, something went wrong . . ."},"content":{"rendered":"\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"832\" height=\"1248\" src=\"https:\/\/alwaysbenoobing.com\/wp-content\/uploads\/2026\/04\/robo_brick.jpg\" alt=\"\" class=\"wp-image-58\" style=\"width:258px;height:auto\"\/><\/figure>\n\n\n\n<p>You bricked your router . . . now what? &nbsp;The first time I updated my router to use OpenWRT I wrote a guide and published it to the OpenWRT Forums so that when I wanted to do it over again, it would be a simple matter of looking up my notes and going through the process. &nbsp;Sounds pretty simple.<\/p>\n\n\n\n<p>Then they updated the firmware. The notes I had written no longer applied and I was sitting there without a router or a plan. &nbsp;The following is my updated guide on what to do the next time I lock myself out of a device.<\/p>\n\n\n\n<p>I ran into trouble by trying to use Fedora to set up the TFTP server and serve files, but SELinux did not like that and was fighting me the whole way. &nbsp;I ended up using a Live Boot of Pop!_OS to complete this task. &nbsp;After booting from a USB, I downloaded Wireshark, the TFTP server, and UFW (Uncomplicated Firewall). &nbsp;I captured network traffic, downloaded firmware, and stood up the TFTP server all from the USB boot.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Overview of Steps<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Connect to the proper Ethernet ports and start recording traffic with Wireshark<\/li>\n\n\n\n<li>Discover what IP address range your router is trying to reach<\/li>\n\n\n\n<li>Manually set the IP address of your NIC<\/li>\n\n\n\n<li>Discover what file the router is trying to pull from the TFTP server<\/li>\n\n\n\n<li>Install and configure the TFTP server<\/li>\n\n\n\n<li>Rename firmware to what the router is requesting<\/li>\n\n\n\n<li>Transfer files and install to the router<\/li>\n\n\n\n<li>Renew DHCP address and connect normally<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Router Reset via TFTP<\/h2>\n\n\n\n<p>Router Model TP-Link Archer v7 with OpenWRT.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">IP Address Discovery<\/h2>\n\n\n\n<p>First, with the router off, connect the Ethernet to switch port 1. Open Wireshark and select the NIC that is attached to the router at switch port 1. While holding in the reset button, power on the router until ARP requests start populating the screen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1306\" height=\"294\" src=\"https:\/\/alwaysbenoobing.com\/wp-content\/uploads\/2026\/04\/router-reset-notes_image.jpg\" alt=\"\" class=\"wp-image-46\"\/><\/figure>\n\n\n\n<p>We can see ARP requests being broadcast across the network. Who has 192.168.0.66? Tell 192.168.0.86. This is the router broadcasting to the network looking for 192.168.0.66. Manually set your NIC IP address to 192.168.0.66 to be able to communicate to the router.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ip addr add 192.168.0.66\/24 dev &lt;YOUR DEVICE&gt;\n\nsudo ip addr add 192.168.0.66\/24 dev enxf8e43bbce345<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">TFTP Filename Discovery<\/h2>\n\n\n\n<p>Power off the router and restart the Wireshark capture. Again hold in the reset button and power on the router, waiting for traffic.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1328\" height=\"234\" src=\"https:\/\/alwaysbenoobing.com\/wp-content\/uploads\/2026\/04\/1_router-reset-notes_image.png\" alt=\"\" class=\"wp-image-42\"\/><\/figure>\n\n\n\n<p>Packet 1 is the ARP Request broadcasting to the entire network looking for which device is 192.168.0.66<\/p>\n\n\n\n<p>Packet 2 is the ARP response from the NIC telling the router, I&#8217;m 192.168.0.66!<\/p>\n\n\n\n<p>Now we can see TFTP protocol traffic. There is a Read Request originating from 192.168.0.86 to 192.168.0.66 in Packet 3, 5, and 9. &nbsp;The request is querying our machine for a file named &#8220;ArcherC7v5_tp_recovery.bin&#8221;<\/p>\n\n\n\n<p>This is what the OpenWRT image must be named in order for the router to pull the firmware via TFTP. This is the &#8220;Factory&#8221; type image.<\/p>\n\n\n\n<p>Download the &#8220;Factory&#8221; image and rename the file to &#8220;ArcherC7v5_tp_recovery.bin&#8221;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Install the TFTP Server<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install tftpd-hpa<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Configure TFTPd directory. Make directory and set permissions.<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/var\/lib\/tftpboot\nsudo chown -R nobody:nogroup \/var\/lib\/tftpboot   # or tftp:tftp on some setups\nsudo chmod -R 777 \/var\/lib\/tftpboot              # allows read\/write (be careful on production)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Configure TFTP server.<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/default\/tftpd-hpa\n\nTFTP_USERNAME=\"tftp\"\nTFTP_DIRECTORY=\"\/var\/lib\/tftpboot\"\nTFTP_ADDRESS=\":69\"                  # listens on all interfaces, port 69\nTFTP_OPTIONS=\"--secure --create\"    # --create allows uploads from clients<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Restart service with new configuration.<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart tftpd-hpa<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Allow Port 69\/UDP through firewall<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw allow 69\/udp<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Move Factory binary to TFTPd directory<\/h2>\n\n\n\n<p>If your firmware is named anything other than what the router is requesting, it will not be transferred. &nbsp;Rename the file now.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cp ~\/Downloads\/ArcherC7v5_tp_recovery.bin \/var\/lib\/tftpboot\/<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Begin File Transfer to Router<\/h2>\n\n\n\n<p>Power down router, restart Wireshark capture. Hold down the reset button and power router on until transfer traffic is observed (6-10 seconds) If the entire file has been transferred, the last TFTP Data Packet will have (last) noted in the packet info. The firmware will begin installing and the router will reboot when complete (3-5 minutes)<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1346\" height=\"197\" src=\"https:\/\/alwaysbenoobing.com\/wp-content\/uploads\/2026\/04\/3_router-reset-notes_image.jpg\" alt=\"\" class=\"wp-image-44\"\/><\/figure>\n\n\n\n<p>The conversation in this file transfer is as follows:<\/p>\n\n\n\n<p><strong>Router: Who has 192.168.0.66?<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-right\"><strong>NIC: I do, I am 192.168.0.66<\/strong><\/p>\n\n\n\n<p><strong>Router: Can I have the file ArcherC7v5_tp_recovery.bin?<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-right\"><strong>NIC: Here you go!<\/strong><\/p>\n\n\n\n<p>The final packet of data should include \u2018last&#8217; in the packet info. &nbsp;If it does not, it could be an incomplete file transfer, or there are numerous other reasons such as the size of the file is divided completely evenly between the number of packets that are sent. &nbsp;Without the \u2018last\u2019 packet, the router may not realize that the entire file has been transferred.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1346\" height=\"171\" src=\"https:\/\/alwaysbenoobing.com\/wp-content\/uploads\/2026\/04\/4_router-reset-notes_image.jpg\" alt=\"\" class=\"wp-image-45\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Remove manual IP address assignment for your NIC and receive DHCP assignment.<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ip addr del 192.168.0.66\/24 dev enxf8e43bbce345<\/code><\/pre>\n\n\n\n<p>Set Ethernet settings to DHCP. A new IP address will be assigned on the 192.168.1.0\/24 network.<\/p>\n\n\n\n<p>Connect to Luci web GUI at 192.168.1.1 and configure router as desired.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Closing Thoughts<\/h2>\n\n\n\n<p>How did I come by this project, you ask? Yeah, I tried loading the wrong firmware and locked myself out. &nbsp;Thankfully my router model had the feature to load firmware via TFTP for this reason. &nbsp;Some models do not have this feature and a locked out router may be properly bricked without maybe rewriting the firmware directly onto the flash chip.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You bricked your router . . . now what? &nbsp;The first time I updated my router to use OpenWRT I wrote a guide and published it to the OpenWRT Forums so that when I wanted to do it over again, it would be a simple matter of looking up my notes and going through the [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-41","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/alwaysbenoobing.com\/index.php\/wp-json\/wp\/v2\/posts\/41","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alwaysbenoobing.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alwaysbenoobing.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alwaysbenoobing.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alwaysbenoobing.com\/index.php\/wp-json\/wp\/v2\/comments?post=41"}],"version-history":[{"count":4,"href":"https:\/\/alwaysbenoobing.com\/index.php\/wp-json\/wp\/v2\/posts\/41\/revisions"}],"predecessor-version":[{"id":59,"href":"https:\/\/alwaysbenoobing.com\/index.php\/wp-json\/wp\/v2\/posts\/41\/revisions\/59"}],"wp:attachment":[{"href":"https:\/\/alwaysbenoobing.com\/index.php\/wp-json\/wp\/v2\/media?parent=41"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alwaysbenoobing.com\/index.php\/wp-json\/wp\/v2\/categories?post=41"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alwaysbenoobing.com\/index.php\/wp-json\/wp\/v2\/tags?post=41"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}