I’ve always preferred to use my own router at home when possible, and was pleasantly surprised to learn that the EU actually has rules around router freedom. That is, each user is allowed to use their own hardware at home, rather than being imposed which hardware they can use by their service provider.
Additionally, the Netherlands has local legislation to reflect this, and KPN has a dedicated page explaining that they support this too.
Okay, maybe support is not the right word. They allow it and provide all necessary technical details, but any actual support requests should go to the community forums. Makes sense; they can’t realistically support any random permutation of devices. I can’t imagine trying to train tech support to handle calls from people running OpenBSD on their router.
Why use one’s own router
Running one’s own router for a home network has a few advantages. A big one is security and privacy: rather than have a device managed by a third party on one’s private home network, there’s just yet-another device managed by the owner.
That aside, there’s a few more quite practical usages. Because my own router is the publicly-facing device, I can easily expose services (i.e.: port forwarding), and have no issue with breaking through a black-box NAT. It’s also possible to run any lightweight services on the box itself.
Finally, a nice-to-have is having isolated guest or testing wireless networks. These are isolated from the “main” home network without having to add a second access point into the mix.
What is OpenWrt
OpenWrt is a Linux distribution aimed at routers and access points. It
supports a variety of consumer hardware. It can be configured via SSH like a
traditional Unix-like system, or via LuCI, the web-based graphical interface.
It’s pretty end-user-friendly to be honest, and mostly edits configuration in
/etc/config
under the hood.
Technical details
The page linked above has a link to a PDF with all the technical details, though it’s actually very verbose, since it includes details on using your own fibre modem as well.
The important bits are:
Internet: VLAN = 6 met prioriteit P-bit = 1
Vast Bellen: VLAN = 7 met prioriteit P-bit = 5
TV: VLAN = 4 (DHCP gebaseerd die ook IGMPv2 moet ondersteunen) met prioriteit P-bit = 5
And
Technische details Internet
• PPPoE via VLAN 6 (802.1q).
• PPPoE authenticatie PAP met een gebruikersnaam en wachtwoord (bijv. internet / internet).
• Maximale pakket grote (mtu) 1500 bytes (rfc4638)
• IPv4 adres + DNS servers via PPPoE verkrijgen
• IPv6 adresreeks + DNS servers (IPv6) via DHCPv6-PD verzoek (in PPPoE). Een adres gebruiken uit reeks voor router.
Nothing unusual here, though I do admit I had to re-read on a lot of these
concepts which I hadn’t touched in many years. Basically, it’s just VLAN6 with
PPPOE, the default MTU (1500) and any username and password (e.g.:
internet
/internet
). IPv4, IPv6 and both sets of DNS also come via PPPOE.
VLAN configuration in OpenWrt
VLAN (virtual LAN) is a technique run different networks on a same physical layer by tagging packets. The tag indicates to which VLAN each packet belongs. This is standardised in IEEE 802.1Q. You don’t need to understand much more about VLAN for this setup.
The Network
menu has a Switch
entry which allows configuring the VLAN.
By default there are two VLANs; one will have just the WAN port enabled and the
other will have all the LAN ports enabled. The one with the WAN port needs to
be set to VLAN ID = 6
. This row should be the one which has all LAN ports set
to off
and the WAN port set to tagged
(the CPU port should also remain
tagged
. This mostly covers the VLAN side of things.
After saving in LuCI, it’s possible to check that everything looks in order on
the device. /etc/config/network
should have something like this:
config switch
option name 'switch0'
option reset '1'
option enable_vlan '1'
config switch_vlan
option device 'switch0'
option vlan '1'
option ports '1 2 3 4 6t'
config switch_vlan
option device 'switch0'
option vlan '2'
option vid '6'
option ports '0t 5t'
PPPOE configuration in OpenWrt
In the Network
menu pick Interfaces
. If there are any existing WAN
configurations that are not PPPoE (e.g.: from previous configurations), you
probably want to delete them at this point.
Add a new interface, pick Protocol=PPPoE
and Device=eth0.6
. eth0
is the
actual device, and 0.6
means “VLAN6 on eth0”. You probably want to leave
Bring up on boot
enabled and set username
and password
to “internet”. Any
value should work, but leaving them empty does not work!
The relevant bits in /etc/config/network
should have something like this:
config interface 'pppoe'
option device 'eth0.6'
option proto 'pppoe'
option username 'internet'
option password 'internet'
option ipv6 'auto'
option mtu '1500'
If you ever need to configure anything for the IPv6 aspect of this, it needs to
be in a config interface 'pppoe_6'
block.
Configuring custom DNS
By default, OpenWrt will pick up advertised DNS and use these as upstream. I don’t want this since I run my own DNS which does some basic adware filtering (mostly for “smart” devices which can’t run proper ad blockers).
The simplest way to disable using upstream DNS is to head over to Network
menu, DHCP and DNS
and in the Resolv and Hosts Files
tab uncheck Ignore resolv file
.
This is equivalent to editing /etc/config/dhcp
with:
config dnsmasq
# ... lots of other options ...
option noresolv '1'
Make sure to configure the actually desired DNS in the DHCP and DNS
section.