Skip to content

Give Your Retired PC a Promotion—To Wi-Fi Boss

Because your old PC deserves more than collecting dust—or running Windows XP.


Why Turn Your PC into a Router?

  • You’re in the the market for a Wi-Fi router but realize your old PC could do the job even better. This guide walks you through transforming that old machine into a powerhouse router.
  • Your current router can’t keep up with the load, especially if you’re running a VPN for all devices on your network. While most routers struggle with VPN processing, a PC’s CPU can handle it with ease.
  • You’ve got a homelab with a need for a flexible, customizable network setup to support testing environments, virtual machines, and specialized configurations. Using a PC as a router provides the advanced options you need.

This guide allows you to keep using your PC for other tasks while adding router functionality to its list of features. You can also add features like a photo server, backup and file server, web server, or any other service you can imagine

This guide is mostly practical, but it’s also a learning opportunity allowing you to dive deeper into networking and Linux.

What You’ll Need

  • A PC running a Linux distro for a streamlined, efficient, and customizable homelab foundation that allows additional services to run on your home network.
  • KVM, QEMU and Libvirt for virtualization and efficient network management.
  • OpenWrt for advanced router functionalities, enhanced security, and parental controls.
  • Basic knowledge of the Linux command line.

Windows users interested in this setup, don’t worry—you can still follow along! The principles are the same, but you could also consider switching to Linux—just saying. Moreover, if you’ve ever owned a router, it was probably running a Linux kernel.

Primer on the shell commands

  • When installing software packages, I’ll provide examples for Ubuntu, Fedora, and Arch Linux.
  • Commands assume you are logged in as root user (prefix with sudo if you need)

Let’s get started!

Homelab Server

The first step is not the focus of this article, but we need to address the fact that we need a running Linux distro as a basis for our homelab.

If you already know and use a Linux distro then you know what to do. But if you are new to this then my best recommendation is to install Ubuntu Linux. It’s easy to install, easy to use, well documented and has a great community.

Secondly, we can get everything working with just the command line, so Ubuntu Server is what you can install.

However, if you are newer to this you might want to install Ubuntu Desktop which can give you added flexibility.

Installation Guides

Why Ubuntu? Its accessibility and community support make it an easy choice, but you can use any Linux distro—and you don’t need a graphical desktop environment unless you prefer one.

You might have to adjust a few of the commands we have below, but all the basics are here.

In the examples below we will be using systemd-networkd but if your distro uses another network manager you can easily adapt. They all work in very similar ways and have equivalent configuration features.

Prerequisites

Here we run basic checks. These checks are to avoid issues and they are also educational. You can skip this section and come back if you run into issues.

Virtualization

We need to confirm that your CPU supports virtualization. Here are 3 commands you can try depending on your distro. As long as you see confirmation from any one of those 3 then you’re good to go.

kvm-ok
grep -m 1 -E '(vmx|svm)' /proc/cpuinfo
lscpu | grep Virtualization

The kvm-ok command should tell you that acceleration can be used. The grep on /proc/cpuinfo should show you that vmx or svm which are indications of virtualization have been flagged by the CPU. And the lscpu command should tell you Virtualization is indeed in the features of your CPU.

Next confirm that the KVM module is active in your Linux kernel.

lsmod | grep kvm

This should just show you that, yes, KVM is in the list of active kernel modules. You can see the full list by typing lsmod without grep.

Ethernet & Wi-Fi

Next, confirm you have two Ethernet ports and a Wi-Fi antenna on your PC. One Ethernet port will be used for your home network (LAN) and the other for your internet access (WAN). The Wi-Fi will be connected to your LAN. Finally, confirm that your distro sees the Ethernet and Wi-Fi hardware with the following command:

ip link show

Unfortunately, I cannot tell you exactly what you will see, but I can give you a few examples of what you could see:

  • eth0, eth1: Legacy style
  • enp3s0, ens33, eno1: Predictable Network Interface Names (systemd based).
  • wlan0, wlx: Wi-Fi interfaces
  • enx001122334455: USB Ethernet adapter name based on MAC address

You should see a full list of all of you PC’s networking links with ip link show not only limited to the examples above.

Now, figure out the name of your Ethernet port 1, Ethernet port 2 and your Wi-Fi and remember them! Mine are eno1, eno2, wlan0 and I will use them in the examples below.

Wi-Fi specifically

You can skip this part if you do not want Wi-Fi.

I should start by saying that a normal desktop PC does not usually have all the Wi-Fi connectivity features of a consumer grade Wi-Fi router. Additionally, PC hardware can differ. I’ll give you some options.

If you want all the connectivity features of a typical consumer-grade Wi-Fi router:

  1. Use your old Wi-Fi router but only for Wi-Fi (requiring a change on your router).
  2. Use the PC’s Wi-Fi, but we need to go through a checklist and possibly buy a Wi-Fi card depending on:
    • what you have
    • what you want

If you choose option 1 then plug your router into the LAN and configure it as an access point (see your manufacturer’s manual). In AP mode it will not act as a router, it will only be there for Wi-Fi connections.

If you choose option 2 then continue reading the next sections.

Check for kernel module

This step is only for good measure because the kernel module is usually already present especially if you know you have Wi-Fi. You can skip to the next section and come back here if there is a problem.

lsmod | grep iwlwifi

The lsmod command displays a list of all the active kernel modules. We need to see if iwlwifi is in the list. Since the list is long we can choose to display only the iwlwifi using grep. If it’s there, it will show up.

If it’s not there you could try adding it with modprobe iwlwifi, but in the case that it’s absent there’s probably a whole other reason:

  • Physical switch that turned your Wi-Fi off
  • Unsupported firmware
  • Bios setting that turned it off
  • You don’t have Wi-Fi

Check for access point mode

iw list | grep -A 10 "Supported interface modes"

Look for AP in the list of supported modes.

Check for valid interface combinations

Now check how many simultaneous access points our motherboard supports, and how many simultaneous band frequencies it supports.

iw list | grep -A 3 "valid interface combinations"

If you see something like #{ AP, P2P-client, P2P-GO } <= 1 you can only have 1 AP at a time and therefore only 1 band at a time (you must choose between 2.4ghz and 5ghz).

Dual-band access will show you something like #{ AP } <= 2 and #channels <= 2.

If you don’t have AP mode or have only 1 AP and absolutely want all the things you can buy a card marketed as dual-band concurrent or simultaneous dual-band.

Overview of the possibilities

  1. Unlikely, but if your motherboard supports all options: use the dual-band setup below.
  2. More likely, your motherboard has AP mode but only 1 concurrent AP: use single-band setup below.
  3. Also possible, your Wi-Fi does not have AP mode: buy a dual-band AP card, use dual-band setup below.
  4. Or, just use your old Wi-Fi router configured for AP mode (best choice)

Networking

As far as I’m concerned this is the most interesting part. Linux networking is plain awesome.

In the following sections we will be creating systemd-networkd configuration files. Those files will be used to create and configure our network connections. I’ll include the equivalent IP commands to provide perspective, but remember that changes made with IP are lost after rebooting. Using systemd-networkd configuration files will give you configuration permanence across reboots.

Network Interfaces

Remember how you took note of your Ethernet and Wi-Fi connections with ip link show? Now we start to work on them!

This is the plan:

LAN

  • Create a bridge device named br-lan and configure it (2 files)
  • Connect the LAN Ethernet port named eno1 to the bridge (1 file)
  • Later: connect the router (the VM) to the bridge (done in Libvirt and inside the VM with eth0)
  • Total files: 3

WAN

  • Create a bridge device (br-wan) and configure it (2 files)
  • Connect the WAN Ethernet port (eno2) to bridge (1 file)
  • Later: connect the router (the VM) to the bridge (done in Libvirt and inside the VM with eth1)
  • Total files: 3

Wi-Fi

  • Single-Band Mode: configure an AP and connect it to the LAN (1 file)
  • Dual-Band Mode: create and configure 2 APs and connect them to the LAN (7 files)
  • Total files: 1 or 7

The LAN (comprised of br-lan, eno1, eth0) and WAN (comprised of br-wan, eno2, eth1) are almost identical with only 1 configuration difference concerning DHCP you will see below.

The first step on our list is to create new bridge device.

Important: A bridge device is like a network switch. Imagine a little box that you plug network cables into. Each thing that connects to it can have an IP address. The bridge device itself can also have an IP address. The bridge allows communication between all things connected including itself.

You can use the ip command to create a bridge and add a first connection:

ip link add name br-lan type bridge
ip link set eno1 master br-lan # a master is a connection

But as previously mentioned the ip command does not create a permanent configuration, the next steps do.

LAN

Create and Configure a Bridge for the LAN Network

nano /etc/systemd/network/br-lan.netdev

Add these contents and save:

# This file creates a bridge interface called br-lan
[NetDev]
Name=br-lan
Kind=bridge

Create an additional file to configure the LAN bridge:

nano /etc/systemd/network/br-lan.network

Add these contents (minus the comments if you don’t want them) and save:

# This file configures the bridge created with the NetDev directive
[Match]
Name=br-lan

[Network]
# The router (OpenWrt) runs dnsmasq which serves as both DHCP and DNS server
# The directive below (DHCP=yes) tells br-lan to request an IP address
# The request will be sent by br-lan to the router and will contain the hostname of our PC
# The DHCP server (OpenWrt) takes note of the hostname-ip paring for the DNS server
# Our PC can be contacted using its hostname like `ping my_pc` or `ssh root@my_pc`
# The hostname is set during installation and can be found in `/etc/hostname`
DHCP=yes

Create a file to configure our Ethernet port eno1 (we need to connect it to the LAN bridge):

nano /etc/systemd/network/eno1.network

Add these contents and save:

# This file connects eno1 to br-lan
[Match]
Name=eno1

[Network]
Bridge=br-lan # Connect eno1 to br-lan (become master of)
DHCP=no # No IP address needed, the IP is on br-lan

WAN

Create a file that will create a bridge (a connecting box) for the WAN network:

nano /etc/systemd/network/br-wan.netdev

Add these contents and save:

# This file creates a bridge interface called br-wan
[NetDev]
Name=br-wan
Kind=bridge

Create an additional file to configure the WAN bridge:

nano /etc/systemd/network/br-wan.network

Add these contents and save:

# This file configures the bridge created with the NetDev directive
[Match]
Name=br-wan

[Network]
# No IP address needed for this interface
# There is no reason to connect to br-wan
DHCP=no

Create a file to configure our second Ethernet port eno2:

nano /etc/systemd/network/eno2.network

Add these contents and save:

# This file connects eno2 to br-wan
[Match]
Name=eno2

[Network]
Bridge=br-wan # connect to bridge (become master of)
DHCP=no # same as br-wan

Wi-Fi

This will only serve as an example because I do not know what you’ve decided for your Wi-Fi nor do I know your PC hardware.

Single-Band Setup

Start by installing the package we need for creating an access point:

apt install hostapd # Ubuntu
pacman -S hostapd # Arch linux
dnf install hostapd # Fedora

Edit the default hostapd.conf file:

nano /etc/hostapd/hostapd.conf

You could use the following values but read the notes below:

# hostapd content for 2.4ghz
interface=wlan0
driver=nl80211
ssid=TheInternetisLava
hw_mode=g
channel=11
wpa=2
wpa_passphrase=YourPassword
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
bridge=br-lan

Notes:

  • hw_mode can be g for 2.4ghz or a for 5ghz
  • Channel values are based on hw_mode
  • Use iw list to print valid channels
  • They are under Band 1 (g) and Band 2 (a) Frequencies
  • The bridge value of br-lan connects Wi-Fi clients to our LAN (wlan0 becomes master of br-lan)

This should provide enough information if you’ve decided to use your PC’s Wi-Fi as an access point.

In the case where you want a dual-band access point, follow the next steps, or you can skip.

Dual-Band Setup

These files will create 2 new Wi-Fi devices and disable the default Wi-Fi:

nano /etc/systemd/network/wlan_g.netdev
nano /etc/systemd/network/wlan_a.netdev
nano /etc/systemd/network/wlan0.network

Contents of the first file wlan_g.netdev:

# This file creates the wlan_g wifi interface
[NetDev]
Name=wlan_g
Kind=wlan

Contents of the second file wlan_a.netdev:

# This file creates the wlan_a wifi interface
[NetDev]
Name=wlan_a
Kind=wlan

Contents of the last file wlan0.network:

# This file disables the default wlan0 wifi interface
[Match]
Name=wlan0

[Link]
Unmanaged=yes

Here’s a Quick Sequence of Commands to Complete the Setup:

nano /etc/hostapd/hostapd_wlan_g.conf # Add hostapd content above adjusted for 2.4ghz
nano /etc/hostapd/hostapd_wlan_a.conf # Add hostapd content above adjusted for 5ghz
cp /lib/systemd/system/hostapd.service /etc/systemd/system/hostapd@wlan_g.service
cp /lib/systemd/system/hostapd.service /etc/systemd/system/hostapd@wlan_a.service
nano /etc/systemd/system/hostapd@wlan_g.service # modify ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd_wlan_g.conf
nano /etc/systemd/system/hostapd@wlan_a.service # modify ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd_wlan_a.conf
systemctl daemon-reload # tells systemd we have new service files
systemctl restart systemd-networkd # creates wlan_g and wlan_a network interfaces
systemctl enable --now hostapd@wlan_g # activates hostapd_wlan_g configuration
systemctl enable --now hostapd@wlan_a # activates hostapd_wlan_a configuration

Pay close attention to the comments. You should end up with 2 new Wi-Fi devices wlan_g, wlan_a, and wlan0 should be DOWN.

ip link show # confirm wlan_g UP, wlan_a UP, wlan0 DOWN
systemctl status hostapd@wlan_g # confirm active (running)
systemctl status hostapd@wlan_a # confirm active (running)

Enable the Network

We are using systemd-networkd for all our networking purposes. We need to be sure that other services are not running.

systemctl disable --now systemd-resolved
systemctl disable --now NetworkManager
systemctl disable --now dhcpcd

A static resolv.conf file is needed:

nano /etc/resolv.conf

This file only concerns our Homelab (i.e., is not involved in name resolution for the network). However, it’s practical having working name resolution directly on the Homelab.

# contents of /etc/resolv.conf
# only one line needed, adjust IP accordingly
nameserver 192.168.1.1

Notice: Avoid using tools like dhclient and dhcpcd on the server because they will request IP addresses for all the network interfaces and will overwrite /etc/resolv.conf with DNS instructions. To renew IP addresses on our Homelab use systemctl restart systemd-networkd. The reason we should only use the systemd-networkd service is that it will respect the DHCP=no directive. Only the br-lan interface should have an IP address.

The ip command creates and activates in one step, but configuration files require activation:

# Enable and start the hostapd service in one command
systemctl enable --now hostapd
# Restart networkd to activate changes, networkd is already enabled and started
systemctl restart systemd-networkd

The 2 commands above will read our configuration files and make it all happen!

When you bring changes to your configuration files be sure to activate your (respective) changes:

systemctl restart hostapd
systemctl restart systemd-networkd

When you restart systemd-networkd it will enable your changes and also refresh the DHCP address on all interfaces configured with DHCP=yes (only br-lan in our case). You may need to restart systemd-networkd if you do not see an IP address on br-lan. To see your IP addresses use ip addr show. More on this later since we have not yet activated our router and there won’t be an IP address.

Virtualization

Now we bring our router to life!

These are the software packages we need:

apt install qemu-kvm libvirt-daemon-system virtinst # Ubuntu
pacman -S qemu-base libvirt virt-install # Arch Linux
dnf install qemu libvirt virt-install # Fedora

You can find the router software here:

  • Navigate to OpenWrt Downloads
  • Click on the link under Stable Release
  • Click on x86
  • Click on 64
  • Download generic-ext4-combined.img.gz

But you might only have access to the command line in which case, type this:

wget -qO- https://downloads.openwrt.org/releases/23.05.0/targets/x86/64/openwrt-23.05.0-x86-64-generic-ext4-combined.img.gz | gunzip -c > /var/lib/libvirt/images/openwrt.img

Be sure to change the URL to the latest stable release at the time you are doing this. Also, notice that we download, move and rename to /var/lib/libvirt/images/openwrt.img all in one step.

If you’re missing wget or gunzip just install and start again:

apt install wget gzip # Ubuntu
pacman -S wget gzip # Arch Linux
dnf install wget gzip # Fedora

Create the VM

We’re almost done. This is how we create our VM:

virt-install \
  --name openwrt \
  --memory 512 \
  --vcpus 2 \
  --cpu qemu64,+x2apic,+hypervisor,+lahf_lm,-svm \
  --disk path=/var/lib/libvirt/images/openwrt.img,format=raw,bus=virtio \
  --network bridge=br-lan,mac=52:54:00:aa:cc:01,model=virtio,target=eth0 \
  --network bridge=br-wan,mac=52:54:00:aa:cc:03,model=virtio,target=eth1 \
  --console pty,target_type=serial \
  --noautoconsole \
  --import

Notes:

  • Notice the 2 network directives
  • The first connects eth0 to br-lan
  • The second connects eth1 to br-wan
  • When connecting anything to a bridge the thing becomes master of
  • Inside the VM the 2 new connections (masters) are known as eth0 and eth1
  • Outside the VM (on the host) they have another name:
    • On the host they are VNet interfaces (e.g., vnet0, vnet1)
    • See virsh domiflist --domain openwrt and ip link show

Here are other helpful commands you need:

  • Start the VM: virsh start --domain openwrt
  • List the active VM(s): virsh list
  • List inactive and active VM(s): virsh list --all
  • Console into the VM: virsh console --domain openwrt

OpenWrt Overview

OpenWrt has a default config that works out of the box. But let’s go over a few of the basics.

Step 1: start the VM with virsh start --domain openwrt Step 2: enter the VM with virsh console --domain openwrt

Once inside:

ls /etc/config # configuration files
ls /etc/init.d # services

The first command above ls /etc/config lists all the configuration files. Generally, the most edited files are /etc/config/network, /etc/config/dhcp, and /etc/config/firewall.

When you edit a file you must restart its service in init.d:

/etc/init.d/network restart
/etc/init.d/dnsmasq restart # corresponds with /etc/config/dhcp
/etc/init.d/firewall restart

Changing configuration can also be done with the uci command, it’s up to you. Here below, an example of how to change your LAN subnet which may be required. In this example we change the subnet from ‘1’ to ‘33’. You can choose any number between 0 and 254, but before you do read the warning below.

uci show network.lan
uci set network.lan.ipaddr='192.168.33.1'
uci commit
/etc/init.d/network restart

The subnet is defined with uci show network.lan.netmask which is 255.255.255.0 which means that the second to last number in the IP address defines the subnet.

WARNING: Your ISP will provide you with a modem. It will be configured with a static IP address and will have a DHCP server running at that address. Make sure the ISP modem has a different subnet than that of your LAN. The modification above although not necessarily required, may be required.

Reviewing OpenWrt Network Configuration

root@OpenWrt:/$ uci show network.lan
network.lan=interface
network.lan.device='eth0'
network.lan.proto='static'
network.lan.ipaddr='192.168.1.1'
network.lan.netmask='255.255.255.0'
network.lan.ip6assign='60'

root@OpenWrt:/$ uci show network.wan
network.wan=interface
network.wan.device='eth1'
network.wan.proto='dhcp'

root@OpenWrt:/$ uci show dhcp.lan.start
dhcp.lan.start='100' # 192.168.1.100

root@OpenWrt:/$ uci show dhcp.lan.limit
dhcp.lan.limit='150' # start + limit = 250 | 192.168.1.250

The first command uci show network.lan displays the configuration that defines your LAN. It attributes a static IP address of 192.168.1.1 to your router. Your router has a DHCP and DNS server running at that address and the router is the default gateway for the entire LAN. All devices on the LAN will get an IP address in a range starting with 192.168.1.100 and ending with 192.168.1.250. All devices on the LAN can communicate via their IP addresses or their hostnames. You can see all the DHCP leases by running cat /tmp/dhcp.leases.

The second command uci show network.wan displays the configuration defining your WAN connection. By default, it is a client of your internet service provider’s modem/subnet. It will receive an IP from the ISP’s modem.

Any client requesting an internet resource will be routed from the LAN to the WAN. This is permitted by the default forwarding rule that you can see by running uci show firewall.@forwarding[0]

root@OpenWrt:/$ uci show firewall.@forwarding[0]
firewall.cfg0fad58=forwarding
firewall.cfg0fad58.src='lan'
firewall.cfg0fad58.dest='wan'

An additional verification you might add is to confirm access to the LuCI Web interface for configuring OpenWrt in your browser. You can check this by running curl localhost from within the OpenWrt VM or curl openwrt from the host. You should also visit http://openwrt or http://192.168.1.1 in your browser.

It may be necessary to install curl in the VM. This requires that you have internet access:

opkg update
opkg install curl

OpenWrt deserves an article of its own. But as previously mentioned, OpenWrt is already configured and good to go with one possible exception being your subnet.

You may want to refer to the OpenWrt Documentation if you have any questions.

Troubleshooting

In an ideal world everything is working perfectly, but this is the real world. In this section we troubleshoot in different places.

Run the 2 commands below on the Homelab host, the OpenWrt VM and another PC you may have on the network. You can check against the notes below.

ip addr show
ip route

Notice:

  • WAN subnet may be 192.168.0.0/24 (defined by ISP modem)
  • LAN subnet is 192.168.1.0/24 (defined by OpenWrt)
  • The /24 is CIDR notation that is equivalent to a network mask of value 255.255.255.0
  • OpenWrt (guest VM) has access to both subnets for routing between them
  • Homelab (host) and other devices should only have access to the LAN subnet

Homelab (host):

  • eno1, eno2, br-wan should not have an IP address
  • eno1 and vnet0 are master of br-lan
  • eno2 and vnet1 are master of br-wan
  • run virsh domiflist openwrt for actual vnet indexes
  • br-lan should get an IP address like 192.168.1.123 (this is provided by OpenWrt)
  • ip route output should be similar to:
default via 192.168.1.1 dev br-lan proto dhcp src 192.168.1.163 # for internet
192.168.1.0/24 dev br-lan proto kernel scope link src 192.168.1.163 # for LAN

OpenWrt (guest VM):

  • Connect with virsh console --domain openwrt
  • eth0 should have a static IP address of 192.168.1.1 (unless you changed the subnet)
  • eth1 should have a dynamic IP address like 192.168.0.16 (this is provided by the ISP modem)
  • ip route output should be similar to:
default via 192.168.0.1 dev eth1 proto static src 192.168.0.16 # for internet on WAN subnet
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1 # for LAN on LAN subnet

Another PC on your LAN:

  • eno1 or similar should get an IP address like 192.168.1.114 (this is provided by OpenWrt)
  • ip route output should be similar to:
default via 192.168.1.1 dev eno1 proto dhcp src 192.168.1.114 # for internet
192.168.1.0/24 dev eno1 proto kernel scope link src 192.168.1.114 # for LAN

Here are even more tools to help you double and triple check that nothing is interfering. Sometimes funny business is happening in the background. These commands can help you find out.

journalctl -b -u NetworkManager # we disabled NM, but we can double check
journalctl -b -u systemd-resolved # double check this as well
journalctl -b | grep dhclient
ps -o pid,ppid,cmd -C dhclient # dhclient can have an active process
pkill dhclient # if you need to
journalctl -b | grep DHCP # you should see DHCPxxxx but only from systemd-networkd

LuCI Web Interface

curl localhost # from within the VM
curl 192.168.1.1 # from anywhere, should work if IP addresses are attributed
curl openwrt # from anywhere, should work is name resolution is working

Visit http://openwrt or http://192.168.1.1 in your browser. This will test that DHCP, DNS and the LuCI Web server are all working.

Physical Network Connections

We have not discussed physical connections. Here are a few scenarios:

  1. You want a wired connection for multiple PCs and you are using Wi-Fi router as AP:
    • You’ll need a network switch, or a Wi-Fi router in AP becomes a switch with added Wi-Fi
    • Connect all PC’s Ethernet to the switch
    • Connect the Wi-Fi AP’s Ethernet uplink (usually separate and colored) to the switch
    • Connect the Homelab’s Ethernet port 1 to the switch, and port 2 to the ISP modem
  2. You do not have Ethernet connections, and you are using a Wi-Fi router as AP:
    • Connect the Wi-Fi AP’s uplink to the Homelab’s Ethernet port 1
    • Connect our Homelab’s Ethernet port 2 to the ISP modem
  3. You only have Wi-Fi and you are using the PC’s Wi-Fi:
    • Connect our Homelab’s Ethernet port 2 to the ISP modem

Here is an example of how data could go from a PC’s Ethernet to the internet via our Homelab in scenario 1:

  • PC Ethernet: port 1
  • Network switch Ethernet: port 2 > port 3
  • Homelab Ethernet: port1
  • Homelab Linux: eno1 > br-lan > vnet0
  • Homelab OpenWrt VM: eth0 > eth1
  • Homelab Linux: vnet1 > br-wan > eno2
  • Homelab Ethernet: port 2
  • ISP modem Ethernet: port 1
  • ISP modem Ethernet Uplink: port 1
  • Internet

Hopefully by now you have enough knowledge and tools to get this working.

Expand Your Knowledge

Once you’ve set up your PC as a powerful router, why not dive deeper into Linux and networking skills? Here are two free courses to get you started:

  • Introduction to Linux on Codecademy: This beginner-friendly course covers Linux basics, perfect for those new to the OS.
  • Introduction to Linux by the Linux Foundation: Offered by the Linux Foundation, this comprehensive course gives you a solid grounding in Linux essentials, with the option to pursue globally recognized certifications down the road.
  • Linux Network Administration by Packt on Coursera: This focused course is ideal for learners interested in Linux networking. It covers essential topics like virtual environment setup, secure file transfer protocols, and network troubleshooting, all geared toward building strong Linux networking skills.

These courses will enhance your skills, making it easier to maintain your new setup. Happy learning!

Disclaimer: This post contains affiliate links, which means I may earn a small commission if you decide to make a purchase through them—at no additional cost to you. By making a purchase, you help support my work and enable me to continue creating helpful content. I provide links to free resources to support your learning journey. You are not obligated to make a purchase, and I encourage you to explore all available options that best fit your needs.

If you would like to leave a comment about this page, you can do that on its dedicated Discourse thread. Follow the link below.