Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

263 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Home router based on AlmaLinux OS or Fedora Linux

GitHub License GitHub Release GitHub Actions Workflow Status Self-hosted

Setup a secure router for home or small office use. Based on a modern open-source foundation using Linux distributions like AlmaLinux OS, Fedora Linux or CentOS Stream. It require no data sharing or persistent cloud connection for being eligible to receive software updates. AlmaLinux OS (ISO Image) is recommended for supported hardware, as it comes with a 10-year lifecycle providing security updates and support. Fedora Linux (Server edition) is recommended for new hardware and latest software features. Create a single Ansible inventory file based on inventory/localhost.yml with your router configuration and you are ready to deploy.

Features:

  • Core router features
    • IPv4 router
    • DHCPv4 server
    • Firewall
  • Maintenance features
    • Automatically system update and reboot if needed
  • Management features
    • SSH server for local on-prem management

Supported OSes:

  • AlmaLinux OS 10 (EoL 2035-05-31)
  • Fedora Linux 44 (EoL 2027-05-19)
  • Fedora Linux 43 (EoL 2026-12-02)
  • Fedora Linux 42 (EoL 2026-05-13)
  • Fedora Linux 41 (EoL 2025-11-26)
  • CentOS Stream 10 (EoL 2030-05-31)

Migrate installations before OS reach End of Life (EoL), see more info below:

Install

Prerequisites:

  • Install Fedora Server or AlmaLinux on bare metal router hardware
    • Architecture: x86_64 or aarch64
    • 2 x Ethernet NICs

Released version:

# Install basic Ansible host dependencies
sudo dnf install -y ansible-core

# Download and extract latest release
curl https://codeload.github.com/baxeno/home-router/tar.gz/refs/tags/v0.6.0 -o home-router-v0.6.0.tar.gz
tar -xvzf home-router-v0.6.0.tar.gz

cd home-router-0.6.0/ansible
# Update `inventory/localhost.yml` with interfaces and maybe some of the optional parameters
ansible-playbook -K -i inventory/localhost.yml home-router.yml

Ansible inventory configuration:

router_lan_subnet and dhcp_router_ip variables are automatically calculated based on router_lan_network, but can still be overridden in an inventory file.

FAQ

What is the best DNS resolver option?

It depends on where in the world you are located, but a general recommendation is to use a DNS resovler that filters domains that are classified as malicious.

Why is there no support for WiFi Access Point (AP) feature?

It is possible to setup WiFi APs using a WiFi client USB dongle, but don't expect more then ~150MBit/s at ~1 meter range with a single WiFi client. WiFi APs require specific WiFi chips with many antennas and they are only sold to big COTS manufactures. Linux kernel upstream support of these chips are typically lacking. This is also why COTS routers with WiFi AP builtin don't receive updates as they are carrying large patch series that require a lot of work to rebase onto a new kernel release.

Recommended action is to have separate hardware for router and WiFi APs.

Why not just use a common Asus, D-Link, Linksys, Netgear home router with WiFi AP?

Commercially available off-the-shelf (COTS) router products typically receive very few security updates during there life-time. This result in them being compromised and used in large botnets and/or as AI scraper proxies which result in slower internet speeds for home users.

Examples:

What IP range should I use?

There are 3 standard private IPv4 ranges:

  • 10.0.0.0 - 10.255.255.255 (10.0.0.0/8)
    • Very large networks
  • 172.16.0.0 - 172.32.255.255 (172.16.0.0/12)
    • Medium-size networks
  • 192.168.0.0 - 192.168.255.255 (192.168.0.0/16) Recommended
    • Home and small offices networks

Avoid special local ranges:

  • 127.0.0.0 - 127.255.255.255 (127.0.0.0/8)
    • Loopback addresses used by localhost.
  • 169.254.0.0 - 169.254.255.255 (169.254.0.0/16)
    • Link-local addresses assigned automatically when no DHCP server is found on the network.

What is a modern open-source foundation?

Vintage Modern Reasoning
SysV Init, Busybox runit systemd Better service management, resource tracking, log tagging, sandboxing with cgroups and namespaces.
iptables, ip6tables firewalld (nftables) Easier firewalling for each interface using zones.
ISC DHCP (dhcpd), dnsmasq Kea DHCP Fully featured DHCPv4 and DHCPv6 server with structured JSON configuration file.
udhcpc, ifconfig NetworkManager Networking that Just Works, DHCPv4 and IPv6 autoconfiguration.
openssh, dropbear openssh A true classic never goes out of style. OpenSSH has been continuously been updated with better ciphers and internal software architecture.
openntpd chrony Full NTS support for authenticated time sync.
avahi systemd-resolved DNS resolver with DNSSEC, DoH, DoT and mDNS support.

Used tools

The following open-source software components are used.

  • AlmaLinux OS - An Open Source, community owned and governed, forever-free enterprise Linux distribution, focused on long-term stability, providing a robust production-grade platform.
  • Fedora Server - Run server workloads on bare metal or virtual machines with the latest open source technologies curated by the Fedora Community.
  • DNF automatic - Package manager - automated upgrades.
  • firewalld - A firewall daemon with D-Bus interface providing a dynamic firewall.
  • NetworkManager - NetworkManager is the standard Linux network configuration tool suite.
  • Kea DHCP - Modern, open source DHCPv4 & DHCPv6 server.
  • OpenSSH - SSH.... keeping your communiqués secret.
  • Chrony - chrony is a versatile implementation of the Network Time Protocol (NTP).
  • systemd-resolved - Network Name Resolution manager.

Documentation links:

Contributing

Feel free to open bug reports or feature requests in Issues section.

Development

Install from git using Ansible:

# Install basic Ansible host dependencies
sudo dnf install -y git ansible-core

# Download latest development version
git clone https://github.com/baxeno/home-router.git

cd home-router/ansible
# Update `inventory/localhost.yml` with interfaces and maybe some of the optional parameters
ansible-playbook -K -i inventory/localhost.yml home-router.yml

Show Ansible facts for localhost:

ansible localhost -m ansible.builtin.setup

Release flow

  • Draft release notes in GitHub
  • Update README.md examples with latest release version
  • Tag git (Ex. git tag -a v0.5.0)
  • Publish release notes in GitHub

About

Home or small office router based on a modern Linux foundation (AlmaLinux OS or Fedora Linux)

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages