ADVERTISEMENT

How to create your personal wide area network

Published Apr 25, 2022 06:27 am

Self-hosting your online services is gaining ground, albeit not as fast as it should, as a way to protect your data from being exploited by other companies, or by the likes of Alphabet, Apple, Meta, Tiktok and Twitter. Personally, I do have some services that I self-host, whilst others, like Medium and Micro.blog, are paid for. Part of my self-hosting requires servers at home and on the cloud. Maintaining different servers, across different providers, require a lot of inter-network communications. Wouldn’t it be nice to be able to have different servers, on different networks, on a single wide area network for easier inter-network communications? Well, I stumbled upon Tailscale, a VPN service, built on top of WireGuard, that creates your own wide area network (a mesh network really, according to their documentation), which includes even servers behind firewalls.

Tailscale is free for personal use (1 user, 20 devices/servers), but requires a third-party identity and access management (IAM) provider. For personal use, you can use your Google Workspace, Microsoft or GitHub accounts to create an account. Enterprise users have the added options, such as Okta, OneLogin or their custom SAML services. I chose to use Microsoft for testing to create my Tailscale account.

The on-boarding process guides you through connecting two devices (of course, it is a network after all). Android, iOS/iPadOS, Linux, MacOS and Windows are supported. I chose an iPhone as my first device, which simply required downloading the Tailscale application, allowing it to install a VPN profile and then asks you to login to the same Tailscale account. After you install your first device, it appears on the Tailscale dashboard.

Next is to install a second device to create your network. I chose Linux (Raspberry Pi at home). Adding the repository, updating the apt repository database and then installing it is just like installing any other Linux application. Running it via “sudo tailscale up” will display a URL to authenticate the instance. I VNCed to my Raspberry Pi, launched the Firefox ESR and entered the URL — which asked me to login to the Tailscale account. And that was it. You get the device to appear on the dashboard. On-boarding complete, network established.

Both of my devices, the iPhone and the Raspberry Pi, are now on another network (using a 100.x.x.x subnet) that can see each other even if they are not in the same location. I can ssh from the iPhone to the Raspberry Pi, and it’s really convenient. File-sharing

There are other configurations and settings that you can play with on the Tailscale dashboard, and there are how-tos prepared for you to follow, e.g., creating a secure and private Minecraft server for your family, or deploying Tailscale on AWS or Oracle Cloud VMs, or even making your home Pi-Hole server visible across your personal, private Tailscale-powered wide area network.

I have yet to add my two cloud servers and other iOS/iPadOS/MacOS devices to complete my network. I still trying to read the documents to completely configure the network — would like to use NextDNS.io or ControlD.com DNS servers for the network, but have yet to figure out how (I could use the home Pi-Hole server with Unbound, of course). I am researching how to add Tailscale on AsusWRT-Merlin router as well, so I can share the external drive connected to it. I do wish that there is a FREE how-to to use Simplelogin.io to create a Tailscale account (to keep away from using third-party authentication).

If you have a couple of servers on different networks, then you will find Tailscale heaven-sent to help you manage them. I will revisit it again — once I figure out how to do what I want it to do.

ADVERTISEMENT
.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1561_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1562_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1563_widget.title }}

{{ articles_filter_1564_widget.title }}

.mb-article-details { position: relative; } .mb-article-details .article-body-preview, .mb-article-details .article-body-summary{ font-size: 17px; line-height: 30px; font-family: "Libre Caslon Text", serif; color: #000; } .mb-article-details .article-body-preview iframe , .mb-article-details .article-body-summary iframe{ width: 100%; margin: auto; } .read-more-background { background: linear-gradient(180deg, color(display-p3 1.000 1.000 1.000 / 0) 13.75%, color(display-p3 1.000 1.000 1.000 / 0.8) 30.79%, color(display-p3 1.000 1.000 1.000) 72.5%); position: absolute; height: 200px; width: 100%; bottom: 0; display: flex; justify-content: center; align-items: center; padding: 0; } .read-more-background a{ color: #000; } .read-more-btn { padding: 17px 45px; font-family: Inter; font-weight: 700; font-size: 18px; line-height: 16px; text-align: center; vertical-align: middle; border: 1px solid black; background-color: white; } .hidden { display: none; }
function initializeAllSwipers() { // Get all hidden inputs with cms_article_id document.querySelectorAll('[id^="cms_article_id_"]').forEach(function (input) { const cmsArticleId = input.value; const articleSelector = '#article-' + cmsArticleId + ' .body_images'; const swiperElement = document.querySelector(articleSelector); if (swiperElement && !swiperElement.classList.contains('swiper-initialized')) { new Swiper(articleSelector, { loop: true, pagination: false, navigation: { nextEl: '#article-' + cmsArticleId + ' .swiper-button-next', prevEl: '#article-' + cmsArticleId + ' .swiper-button-prev', }, }); } }); } setTimeout(initializeAllSwipers, 3000); const intersectionObserver = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const newUrl = entry.target.getAttribute("data-url"); if (newUrl) { history.pushState(null, null, newUrl); let article = entry.target; // Extract metadata const author = article.querySelector('.author-section').textContent.replace('By', '').trim(); const section = article.querySelector('.section-info ').textContent.replace(' ', ' '); const title = article.querySelector('.article-title h1').textContent; // Parse URL for Chartbeat path format const parsedUrl = new URL(newUrl, window.location.origin); const cleanUrl = parsedUrl.host + parsedUrl.pathname; // Update Chartbeat configuration if (typeof window._sf_async_config !== 'undefined') { window._sf_async_config.path = cleanUrl; window._sf_async_config.sections = section; window._sf_async_config.authors = author; } // Track virtual page view with Chartbeat if (typeof pSUPERFLY !== 'undefined' && typeof pSUPERFLY.virtualPage === 'function') { try { pSUPERFLY.virtualPage({ path: cleanUrl, title: title, sections: section, authors: author }); } catch (error) { console.error('ping error', error); } } // Optional: Update document title if (title && title !== document.title) { document.title = title; } } } }); }, { threshold: 0.1 } ); function showArticleBody(button) { const article = button.closest("article"); const summary = article.querySelector(".article-body-summary"); const body = article.querySelector(".article-body-preview"); const readMoreSection = article.querySelector(".read-more-background"); // Hide summary and read-more section summary.style.display = "none"; readMoreSection.style.display = "none"; // Show the full article body body.classList.remove("hidden"); } document.addEventListener("DOMContentLoaded", () => { let loadCount = 0; // Track how many times articles are loaded const offset = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Offset values const currentUrl = window.location.pathname.substring(1); let isLoading = false; // Prevent multiple calls if (!currentUrl) { console.log("Current URL is invalid."); return; } const sentinel = document.getElementById("load-more-sentinel"); if (!sentinel) { console.log("Sentinel element not found."); return; } function isSentinelVisible() { const rect = sentinel.getBoundingClientRect(); return ( rect.top < window.innerHeight && rect.bottom >= 0 ); } function onScroll() { if (isLoading) return; if (isSentinelVisible()) { if (loadCount >= offset.length) { console.log("Maximum load attempts reached."); window.removeEventListener("scroll", onScroll); return; } isLoading = true; const currentOffset = offset[loadCount]; window.loadMoreItems().then(() => { let article = document.querySelector('#widget_1690 > div:nth-last-of-type(2) article'); intersectionObserver.observe(article) loadCount++; }).catch(error => { console.error("Error loading more items:", error); }).finally(() => { isLoading = false; }); } } window.addEventListener("scroll", onScroll); });

Sign up by email to receive news.