{"id":24913,"date":"2026-08-27T17:24:28","date_gmt":"2026-08-27T21:24:28","guid":{"rendered":"https:\/\/nuxx.net\/blog\/?p=24913"},"modified":"2026-08-27T18:15:24","modified_gmt":"2026-08-27T22:15:24","slug":"full-dual-stack-ipv4-and-ipv6-connection-from-anywhere","status":"publish","type":"post","link":"https:\/\/nuxx.net\/blog\/2026\/08\/27\/full-dual-stack-ipv4-and-ipv6-connection-from-anywhere\/","title":{"rendered":"Full Dual Stack (IPv4 and IPv6) Connection from Anywhere"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/nuxx.net\/blog\/wp-content\/uploads\/2026\/08\/PXL_20260827_125728829-1-scaled.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"771\" src=\"https:\/\/nuxx.net\/blog\/wp-content\/uploads\/2026\/08\/PXL_20260827_125728829-1-1024x771.jpg\" alt=\"\" class=\"wp-image-24921\" srcset=\"https:\/\/nuxx.net\/blog\/wp-content\/uploads\/2026\/08\/PXL_20260827_125728829-1-1024x771.jpg 1024w, https:\/\/nuxx.net\/blog\/wp-content\/uploads\/2026\/08\/PXL_20260827_125728829-1-300x226.jpg 300w, https:\/\/nuxx.net\/blog\/wp-content\/uploads\/2026\/08\/PXL_20260827_125728829-1-768x578.jpg 768w, https:\/\/nuxx.net\/blog\/wp-content\/uploads\/2026\/08\/PXL_20260827_125728829-1-1536x1157.jpg 1536w, https:\/\/nuxx.net\/blog\/wp-content\/uploads\/2026\/08\/PXL_20260827_125728829-1-2048x1542.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">GL.iNet Beryl AX (GL-MT3000) as a dual-stack network access point.<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">I&#8217;ve been doing some day job stuff where I need to test a device from a <a href=\"https:\/\/en.wikipedia.org\/wiki\/IPv6#Dual-stack_IP_implementation\">full dual stack (IPv4 and IPv6)<\/a> residential network connection, but our house has <a href=\"https:\/\/en.wikipedia.org\/wiki\/Wide_Open_West\">Wide Open West<\/a> service which is unfortunately only IPv4. While there are a bunch of ways to tunnel the IPv6 half of a connection out to the internet (eg: <a href=\"https:\/\/tunnelbroker.net\/\">tunnelbroker.net<\/a> and my <a href=\"https:\/\/opnsense.org\/\">OPNsense <\/a>router) I&#8217;ve previously had issues with path asymmetry (IPv4 going one route, IPv6 going another) making things&#8230; quirky&#8230; so I didn&#8217;t want to do that. I wanted a real dual stack connection but didn&#8217;t want to bring another ISP into the house.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I have a <a href=\"https:\/\/www.gl-inet.com\/en-us\/products\/gl-mt3000\">GL.iNet Beryl AX (GL-MT3000)<\/a> &#8220;travel router&#8221; that I keep around as a just-in-case piece of hardware. They are super useful for if something happens to the main network, I want a VPN gateway for all devices when traveling, or experimentation and testing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Well, here we are, testing time, and it&#8217;s an (almost) perfect platform for building a custom network with full dual stack support that tunnels out via another host with appropriate connectivity; essentially a VPN.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Along the way I ran into a little wrinkle where, after getting the tunnel and everything up, IPv6 didn&#8217;t work. It turns out that the firmware on there (not sure if it&#8217;s vendor specific, or standard for <a href=\"https:\/\/openwrt.org\/\">OpenWRT<\/a>) enables <a href=\"https:\/\/en.wikipedia.org\/wiki\/Network_address_translation\">NAT (IP masquerading)<\/a> for IPv6 with no control to turn it off. Troubleshooting this took a bit, and a script was developed to ensure the setting stuck across reboots.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/nuxx.net\/blog\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-27-171833.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"507\" src=\"https:\/\/nuxx.net\/blog\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-27-171833-1024x507.png\" alt=\"\" class=\"wp-image-24918\" srcset=\"https:\/\/nuxx.net\/blog\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-27-171833-1024x507.png 1024w, https:\/\/nuxx.net\/blog\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-27-171833-300x149.png 300w, https:\/\/nuxx.net\/blog\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-27-171833-768x380.png 768w, https:\/\/nuxx.net\/blog\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-27-171833.png 1115w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\"><code>ipconfig \/all<\/code> output showing full dual stack connectivity.<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">After that, it all just worked. I connect to the device&#8217;s wireless network and have a full dual stack network, which allowed me to test what was needed. I&#8217;ve been working from this connection for a month and it&#8217;s fast enough to be indistinguishable from my home connection, yet provides the extra IPv6 stuff I needed to solve a problem. Beyond IPv6, the only real difference between it and my home connection is that it appears to be in Chicago, and I have to pay $5\/mo for the VM and am limited to 1000GB of network traffic. That&#8217;s both cheap enough to not care about and plenty of traffic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For some (mostly-AI-generated) step-by-step-ish directions for setting this up, here you go: <a href=\"https:\/\/nuxx.net\/files\/Linode_and_GL-MT3000_Dual_Stack_VPN_2026-Jul-22.md\">Linode_and_GL-MT3000_Dual_Stack_VPN_2026-Jul-22.md<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These are basically my notes for doing this again in case I have to set such a thing up in the future. The only real important parts are stepping around the IPv6 Masquerade stuff and the script to persist this setting, but I added the other pieces so it&#8217;d be more useful in a year or three when I next need to do this but have completely forgotten about it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And, I guess it also shows off using <a href=\"https:\/\/caddyserver.com\/\">Caddy<\/a> to render Markdown to HTML using <a href=\"https:\/\/nuxx.net\/blog\/2026\/08\/22\/chroma-syntax-highlighting-via-caddy\/\" data-type=\"post\" data-id=\"24893\">the same Chroma engine that I&#8217;m using for syntax highlighting mentioned in my previous post<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And yes, AI tools were used to troubleshoot the why-didn&#8217;t-IPv6-work part of this. (Which was very welcome, because I had the dual stack tunnel working from a Windows box with the official Wireguard client. Figuring out why it wasn&#8217;t working on the GL-MT3000 was a bit of a pain.)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve been doing some day job stuff where I need to test a device from a full dual stack (IPv4 and IPv6) residential network connection, but our house has Wide Open West service which is unfortunately only IPv4. While there are a bunch of ways to tunnel the IPv6 half of a connection out to\u2026<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,18],"tags":[],"class_list":["post-24913","post","type-post","status-publish","format-standard","hentry","category-computers","category-work"],"_links":{"self":[{"href":"https:\/\/nuxx.net\/blog\/wp-json\/wp\/v2\/posts\/24913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nuxx.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nuxx.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nuxx.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nuxx.net\/blog\/wp-json\/wp\/v2\/comments?post=24913"}],"version-history":[{"count":7,"href":"https:\/\/nuxx.net\/blog\/wp-json\/wp\/v2\/posts\/24913\/revisions"}],"predecessor-version":[{"id":24923,"href":"https:\/\/nuxx.net\/blog\/wp-json\/wp\/v2\/posts\/24913\/revisions\/24923"}],"wp:attachment":[{"href":"https:\/\/nuxx.net\/blog\/wp-json\/wp\/v2\/media?parent=24913"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nuxx.net\/blog\/wp-json\/wp\/v2\/categories?post=24913"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nuxx.net\/blog\/wp-json\/wp\/v2\/tags?post=24913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}