ADVERTISEMENT

Starlink and fiber together: Dual WAN wiFi takes your internet to the stars

Published Mar 23, 2023 05:57 am

Author:

 Hey, have you heard about using Dual WAN WiFi with your Starlink?

WISP Operator:

 No, what’s that?

Author:

 It’s a way to combine multiple internet connections to get faster and more reliable internet. For example, you can use Starlink as your primary internet provider and also have a local fiber provider as a backup. So when Starlink goes offline for any reason, your local fiber provider kicks in to service your users.

WISP Operator:

 That sounds interesting. But being able to use both lines is more important for me. How does it work?

Author:

 Yes, you can also do active load balancing. It’s a networking technology that lets you use two or more internet connections simultaneously. By combining the bandwidth of multiple connections, you get a more bandwidth from your two internet sources. You can also configure how much traffic goes through each of your WAN links:

WISP Operator:

 Oh, I see. So, how does this help with Starlink?

Author:

 Starlink is a satellite-based internet provider that offers fast and reliable internet, but it is serviced by ground stations in Japan. This means that local Philippine traffic will take a longer time to load. By combining it with a local fiber provider, you get the best of both worlds — fast and reliable internet *regardless* of location.
Here let me show you how we configured our Dual WAN router: use our fiber link for our subnet (202.91.160.0/20) and use Starlink for everything else. Smart routing entry page traffic to our own network takes the WAN1 port (202.91.166.65) Traffic to Facebook goes out via the Starlink satellite system: traffic uses WAN0 100.64.0.1 (starlink) to get to facebook

WISP Operator:

 That’s really cool. What are other benefits of dual WAN WiFi?

Author:

 Well, you can configure your network to prioritize certain types of traffic, like video conferencing or online gaming. And, if one of the internet connections fails, the other connection automatically takes over, so you don’t lose your internet connection.

WISP Operator:

 Wow, that’s really useful. I can see how this would be great for businesses that rely on the internet to operate. But would it be difficult to implement a Dual Wan load balancing?

Author:

 Definitely not. It took us a little under an hour to configure our Dual Wan capable wifi router that cost less than PHP 4,000. (btw: Rene Canlas also shares that “RVers (roaming users) often use routers with LTE/5G capability and Starlink in a loadbalancing or failover configuration.” This uses mobile internet as your LOCAL source/backup internet.)
Going back to the Ruijie, I like their “User schedules” feature. I can configure a user (say “James”) to be only able to access the internet on Weekdays. And then configure another user (say “John”) to access only at night (6pm to 12 midnight). And configure other users using a combination of days and hours of days.

WISP Operator:

 I agree. I think I’ll have to look into this technology and see if it’s available in our area.

Author:

 Check this out: [https://www.starlink.com/map](https://www.starlink.com/map). Dual WAN WiFi is a great solution for maximizing multiple internet gateways and getting the most out of your internet connection.

Full Disclosure:

While Author is part owner of Bitstop Inc that distributes the Ruijie Dual Wan Router, Author PAID for the device under testing.




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.