Fiery Eagle 90bc37b6ed test
2025-03-03 05:52:07 +00:00

300 lines
23 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Creating a multi access-point home network from scratch | Mihit Mittal</title>
<meta name="keywords" content="">
<meta name="description" content="My home was undergoing reconstruction during 2022, and with a fresh start you get the opportunity to fix problems that plagued you before. The old building was constructed in the 1980s and with the brick and cement walls in India it is impossible to get a good Wi-Fi connection or add cabling to add additional access points. This time, I made sure to have at least one CAT6 cable going to each room, in order to be able to fix any dead spots by simply adding in access points in problem spots, and turning a bundle of wire into a home network system that handles terabytes of data each month has been a learning experience.">
<meta name="author" content="Me">
<link rel="canonical" href="https://mihitmittal.com/posts/3/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.45e028aa8ce0961349adf411b013ee39406be2c0bc80d4ea3fc04555f7f4611a.css" integrity="sha256-ReAoqozglhNJrfQRsBPuOUBr4sC8gNTqP8BFVff0YRo=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://mihitmittal.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://mihitmittal.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://mihitmittal.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://mihitmittal.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://mihitmittal.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" hreflang="en" href="https://mihitmittal.com/posts/3/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--code-block-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
}
.list {
background: var(--theme);
}
.list:not(.dark)::-webkit-scrollbar-track {
background: 0 0;
}
.list:not(.dark)::-webkit-scrollbar-thumb {
border-color: var(--theme);
}
}
</style>
</noscript><meta property="og:url" content="https://mihitmittal.com/posts/3/">
<meta property="og:site_name" content="Mihit Mittal">
<meta property="og:title" content="Creating a multi access-point home network from scratch">
<meta property="og:description" content="My home was undergoing reconstruction during 2022, and with a fresh start you get the opportunity to fix problems that plagued you before. The old building was constructed in the 1980s and with the brick and cement walls in India it is impossible to get a good Wi-Fi connection or add cabling to add additional access points. This time, I made sure to have at least one CAT6 cable going to each room, in order to be able to fix any dead spots by simply adding in access points in problem spots, and turning a bundle of wire into a home network system that handles terabytes of data each month has been a learning experience.">
<meta property="og:locale" content="en-us">
<meta property="og:type" content="article">
<meta property="article:section" content="posts">
<meta property="article:published_time" content="2023-04-05T00:00:00+05:30">
<meta property="article:modified_time" content="2023-04-05T00:00:00+05:30">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Creating a multi access-point home network from scratch">
<meta name="twitter:description" content="My home was undergoing reconstruction during 2022, and with a fresh start you get the opportunity to fix problems that plagued you before. The old building was constructed in the 1980s and with the brick and cement walls in India it is impossible to get a good Wi-Fi connection or add cabling to add additional access points. This time, I made sure to have at least one CAT6 cable going to each room, in order to be able to fix any dead spots by simply adding in access points in problem spots, and turning a bundle of wire into a home network system that handles terabytes of data each month has been a learning experience.">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1 ,
"name": "Posts",
"item": "https://mihitmittal.com/posts/"
},
{
"@type": "ListItem",
"position": 2 ,
"name": "Creating a multi access-point home network from scratch",
"item": "https://mihitmittal.com/posts/3/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Creating a multi access-point home network from scratch",
"name": "Creating a multi access-point home network from scratch",
"description": "My home was undergoing reconstruction during 2022, and with a fresh start you get the opportunity to fix problems that plagued you before. The old building was constructed in the 1980s and with the brick and cement walls in India it is impossible to get a good Wi-Fi connection or add cabling to add additional access points. This time, I made sure to have at least one CAT6 cable going to each room, in order to be able to fix any dead spots by simply adding in access points in problem spots, and turning a bundle of wire into a home network system that handles terabytes of data each month has been a learning experience.\n",
"keywords": [
],
"articleBody": "My home was undergoing reconstruction during 2022, and with a fresh start you get the opportunity to fix problems that plagued you before. The old building was constructed in the 1980s and with the brick and cement walls in India it is impossible to get a good Wi-Fi connection or add cabling to add additional access points. This time, I made sure to have at least one CAT6 cable going to each room, in order to be able to fix any dead spots by simply adding in access points in problem spots, and turning a bundle of wire into a home network system that handles terabytes of data each month has been a learning experience.\nEquipment Rack The first order of business for making this operational was to terminate the cables in order to be able to connect devices between them. According to my research, the recommended way to approach this was using a patch panel. A patch panel takes the 8 conductors on a CAT6 cable and turns them into female connectors that you can attach to your rack and ensures that the solid conductors arent stressed from moving around.\nI then had to determine what switches I would need to handle all the traffic. I wanted a gigabit uplink on the minimum for all devices and had to provide power to 5 IP cameras, preferably over PoE. I ultimately decided to use a Netgear GS108PP switch for gigabit PoE for the cameras and a Netgear GS324 for the non PoE devices.\nThe heart of this setup was the Mikrotik hAP AC2. It has been my router of choice for a few years as it can comfortably NAT a gigabit connection, is extremely customizable due to RouterOS and draws only about 5w due to its quad core ARM CPU. The hAP however does not support being rack mounted, as it is meant for a SOHO setup. I fixed this problem by modeling and 3D printing a tray for the router that could be rack mounted ensuring that the setup stays cleaner overall.\nWith the equipment installed I added an ESP8266 with a DS18B20 temperature sensor to the bottom of the GS324 in order to monitor temperatures in the rack, and noticed that the equipment could reach 40-50C during the summer months. This is an acceptable temperature for the equipment installed and within the operating specifications but I would prefer to have lower temperatures for power savings as well as equipment longevity, so I 3d printed plates with holes and mounting points for 120mm PC case fans that I could attach to the front of the rack in order to maintain positive airflow into the rack and keep things cool.\nThe 3 fans blowing on the equipment temperatures lowered to a much more acceptable 35C, ensuring that the equipment would work reliably and will not cause random issues due to overheating. I unfortunately could not disable the LEDs on the fans as they were wired in series with the motor but functionality comes before form.\nAfter finishing installing everything inside the rack and connecting my server to the hAP, I was able to begin network configuration. I decided upon the following network layout.\n10.0.0.0/23 - LAN - 10.0.0.0/24 - DHCP - 10.0.1.0/24 - Static IPs 10.0.2.0/24 - Cameras 10.1.1.0/24 - Wireguard I decided to make a /23 subnet for the local network. This is because of the high number of static IPs in the network because of the 50 or so smart devices in the house along with other equipment such as printers and the access points. I also decided to put the cameras in their own network that does not have internet access in the interest of privacy. The cameras can be accessed from outside the network by simply connecting to the wireguard tunnel.\nAccess Points The choice of access points was critical for this project. The options available in India were fairly lackluster, with most options being intended for ceiling or wall mounts, which would not work with my setup. I had previous experience with using OpenWRT as my routing platform of choice, and wondered if it could be used for access points as well. Looking around in the documentation, I found this page, which details how an OpenWRT device can be setup in order to act as a WAP. This information along with the usteer package, which uses 802.11v and 802.11v to aid devices to pick the best access point to connect to gave me a fairly stable and well performing wireless network. However, if I were doing another project like this, I would definitely look into enterprise WAPs instead. The OpenWRT APs lack any sort of features for management and updating and can be quite unstable between firmware revisions. The setup also requires far more manual setup and tuning than something like a proper WAP would and with more performance.\nThe final access point collection looked like this:\n1 Xiaomi AX3200 1 Netgear R6350 4 TP-Link Archer C6 V3.2 All devices other than the Xiaomi are MT7621 devices, which is a quite mature target platform for OpenWRT and is quite stable. The Xiaomi AX3200 just obtained stable support for OpenWRT but also performs quite well, reaching near gigabit speeds with 802.11AX\n#Final Thoughts\nCreating this network has been an incredible learning experience that challenged both my hardware and software knowledge, as well as taught me quite a lot about how to plan for infrastructure and to chose suitable hardware. I would definitely recommend taking on a project like this as compared to simply hiring someone to do it for you, as it teaches you the ins and outs of your home network and allows you to quickly and easily modify or fix any problems you may have with it in the future.\n",
"wordCount" : "966",
"inLanguage": "en",
"datePublished": "2023-04-05T00:00:00+05:30",
"dateModified": "2023-04-05T00:00:00+05:30",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://mihitmittal.com/posts/3/"
},
"publisher": {
"@type": "Organization",
"name": "Mihit Mittal",
"logo": {
"@type": "ImageObject",
"url": "https://mihitmittal.com/favicon.ico"
}
}
}
</script>
</head>
<body class="" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://mihitmittal.com/" accesskey="h" title="Mihit Mittal (Alt + H)">Mihit Mittal</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://mihitmittal.com/posts" title="Posts">
<span>Posts</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<article class="post-single">
<header class="post-header">
<div class="breadcrumbs"><a href="https://mihitmittal.com/">Home</a>&nbsp;»&nbsp;<a href="https://mihitmittal.com/posts/">Posts</a></div>
<h1 class="post-title entry-hint-parent">
Creating a multi access-point home network from scratch
</h1>
<div class="post-meta"><span title='2023-04-05 00:00:00 +0530 +0530'>April 5, 2023</span>&nbsp;·&nbsp;5 min&nbsp;·&nbsp;966 words&nbsp;·&nbsp;Me
</div>
</header>
<div class="post-content"><p>My home was undergoing reconstruction during 2022, and with a fresh start you get the opportunity to fix problems that plagued you before. The old building was constructed in the 1980s and with the brick and cement walls in India it is impossible to get a good Wi-Fi connection or add cabling to add additional access points. This time, I made sure to have at least one CAT6 cable going to each room, in order to be able to fix any dead spots by simply adding in access points in problem spots, and turning a bundle of wire into a home network system that handles terabytes of data each month has been a learning experience.</p>
<h1 id="equipment-rack">Equipment Rack<a hidden class="anchor" aria-hidden="true" href="#equipment-rack">#</a></h1>
<p>The first order of business for making this operational was to terminate the cables in order to be able to connect devices between them. According to my research, the recommended way to approach this was using a patch panel. A patch panel takes the 8 conductors on a CAT6 cable and turns them into female connectors that you can attach to your rack and ensures that the solid conductors aren&rsquo;t stressed from moving around.</p>
<p><img alt="Image" loading="lazy" src="/3/patchpanel.jpg"></p>
<p>I then had to determine what switches I would need to handle all the traffic. I wanted a gigabit uplink on the minimum for all devices and had to provide power to 5 IP cameras, preferably over PoE. I ultimately decided to use a Netgear GS108PP switch for gigabit PoE for the cameras and a Netgear GS324 for the non PoE devices.</p>
<p><img alt="Image" loading="lazy" src="/3/switches.jpg"></p>
<p>The heart of this setup was the Mikrotik hAP AC2. It has been my router of choice for a few years as it can comfortably NAT a gigabit connection, is extremely customizable due to RouterOS and draws only about 5w due to its quad core ARM CPU. The hAP however does not support being rack mounted, as it is meant for a SOHO setup. I fixed this problem by modeling and 3D printing a tray for the router that could be rack mounted ensuring that the setup stays cleaner overall.</p>
<p>With the equipment installed I added an ESP8266 with a DS18B20 temperature sensor to the bottom of the GS324 in order to monitor temperatures in the rack, and noticed that the equipment could reach 40-50C during the summer months. This is an acceptable temperature for the equipment installed and within the operating specifications but I would prefer to have lower temperatures for power savings as well as equipment longevity, so I 3d printed plates with holes and mounting points for 120mm PC case fans that I could attach to the front of the rack in order to maintain positive airflow into the rack and keep things cool.</p>
<p><img alt="Image" loading="lazy" src="/3/panels.jpg"></p>
<p>The 3 fans blowing on the equipment temperatures lowered to a much more acceptable 35C, ensuring that the equipment would work reliably and will not cause random issues due to overheating. I unfortunately could not disable the LEDs on the fans as they were wired in series with the motor but functionality comes before form.</p>
<p><img alt="Image" loading="lazy" src="/3/fans.jpg"></p>
<p>After finishing installing everything inside the rack and connecting my server to the hAP, I was able to begin network configuration. I decided upon the following network layout.</p>
<pre><code>10.0.0.0/23 - LAN
- 10.0.0.0/24 - DHCP
- 10.0.1.0/24 - Static IPs
10.0.2.0/24 - Cameras
10.1.1.0/24 - Wireguard
</code></pre>
<p>I decided to make a /23 subnet for the local network. This is because of the high number of static IPs in the network because of the 50 or so smart devices in the house along with other equipment such as printers and the access points. I also decided to put the cameras in their own network that does not have internet access in the interest of privacy. The cameras can be accessed from outside the network by simply connecting to the wireguard tunnel.</p>
<h1 id="access-points">Access Points<a hidden class="anchor" aria-hidden="true" href="#access-points">#</a></h1>
<p>The choice of access points was critical for this project. The options available in India were fairly lackluster, with most options being intended for ceiling or wall mounts, which would not work with my setup. I had previous experience with using OpenWRT as my routing platform of choice, and wondered if it could be used for access points as well. Looking around in the documentation, I found <a href="https://openwrt.org/docs/guide-user/network/wifi/dumbap">this page</a>, which details how an OpenWRT device can be setup in order to act as a WAP. This information along with the <a href="https://openwrt.org/docs/guide-user/network/wifi/usteer">usteer package</a>, which uses 802.11v and 802.11v to aid devices to pick the best access point to connect to gave me a fairly stable and well performing wireless network. However, if I were doing another project like this, I would definitely look into enterprise WAPs instead. The OpenWRT APs lack any sort of features for management and updating and can be quite unstable between firmware revisions. The setup also requires far more manual setup and tuning than something like a proper WAP would and with more performance.</p>
<p>The final access point collection looked like this:</p>
<ul>
<li>1 Xiaomi AX3200</li>
<li>1 Netgear R6350</li>
<li>4 TP-Link Archer C6 V3.2</li>
</ul>
<p>All devices other than the Xiaomi are MT7621 devices, which is a quite mature target platform for OpenWRT and is quite stable. The Xiaomi AX3200 just obtained stable support for OpenWRT but also performs quite well, reaching near gigabit speeds with 802.11AX</p>
<p>#Final Thoughts</p>
<p>Creating this network has been an incredible learning experience that challenged both my hardware and software knowledge, as well as taught me quite a lot about how to plan for infrastructure and to chose suitable hardware. I would definitely recommend taking on a project like this as compared to simply hiring someone to do it for you, as it teaches you the ins and outs of your home network and allows you to quickly and easily modify or fix any problems you may have with it in the future.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
</footer>
</article>
</main>
<footer class="footer">
<span>&copy; 2025 <a href="https://mihitmittal.com/">Mihit Mittal</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>