💾 Archived View for gemini.circumlunar.space › users › kraileth › neunix › 2021 › bsd_router_take_2_… captured on 2022-04-28 at 19:10:14. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2021-12-05)
-=-=-=-=-=-=-
Monday, 10. May 2021
This article includes a lot of pictures. It's easier to read with a Gemini client that has image support built-in (like lagrange).
[This article has been bi-posted to Gemini and the Web]
Since I built my first OPNsense-based router, it had been a secondary router only. Its "WAN" port was connected to my ISP's modem/router box which dealt with establishing the actual Internet connection and acting as the gateway and DHCP server for my OPNsense. In other words: It has only ever been a second line of defense for my LAN network behind it.
Also since I started building said first router of mine I had the goal of eventually _replacing_ my ISP's router with it instead of just adding a secondary device. In retrospect it still was the right choice to start with a first step like I did. It allowed me to play with OPNsense and get familiar with it while I did not fully depend on it working right all the time. It has been fun and the fact that OPNsense never broke for me when updating was a reassuring experience.
The following image shows what my network looked like up until a short while ago (red = my ISP's property, blue = OPNsense, green = transparent networking devices):
Diagram of my network before the change (PNG)
As you can see, my ISP's modem/router was the device directly connected to my ISP's line, forming my primary network behind it (LAN 1). Occasionally I'd plug a laptop or something into that directly. The APU running OPNsense was a secondary router behind which the network for my regular devices began (LAN 2). It meant that I could better tune packet filtering rules than the primary router allowed me. I could do proper QoS and other things. But it only was an additional device and didn't really obsolete the one that I actually wanted to get rid of.
I did a bit of research and finally in early April I went ahead and made the switch. For my network OPNsense is in charge now! But I didn't actually get rid of my ISP's old box just yet. Why? Well... because of IP telephony. This is a topic of its own and I hadn't been inclined to doing too many things at once. So I decided to try out if my phone would still work if I demoted my ISP's router to be the secondary router and would let it manage telephony. I just set the device to operate in client mode, connected the IP phone, tried to call my parents - and was very relieved to find that it just worked!
So this is the new network diagram:
My network after the change (PNG)
The APU is not technically capable of connecting with my ISP; I needed a DSL modem for that. The model that I chose operates in bridge mode so that it's network-transparent but let's OPNsense establish the connection. Directly connected to that additional device is the APU which now also handles a second network segment via its OPT1 interface: My old router is connected to that.
At the end of the day I have one more device involved but packets originating from my main computers no longer have to go through two routers. VoIP packets have to now, but at least the primary router is the box that I control, so that's an improvement as well.
After my research, I settled on the Zyxel VMG1312-B30A which is marketed as a "Wireless N VDSL2 4-port gateway with USB". It's an older device from 2012, but it's still sold. While the specs don't look very impressive today, I don't care about which wireless standard it supports and such. I got it for another feature that it offers: _Bridge mode_.
Zyxel VMG1312-B30A DSL modem top view (PNG)
If I were to simply replace my ISP's device with this one, it'd even be a downgrade - the Zyxel makes an even worse router than what I had. But operating in bridged mode it simply terminates the DSL circuit of the telephone line and communicates using the DMT (Discrete Multitone Modulation) protocol with the ISP's DSLAM (Digital Subscriber Line Access Multiplexer).
Zyxel VMG1312-B30A DSL back and bottom top view (PNG)
Before settling on a modem, _do some research_ on which technology is being used for DSL in your country! For my Zyxel device there are two separate variants of the same model: One for the so-called _Annex-A_ and one for _Annex-B_. The former specifies "DSL over POTS" (= Plain Old Telephone Service) while the latter is for "DSL over ISDN". Both devices are physically different, so be sure to get the right one (in Germany for example it's Annex-B)! Annex-A uses the smaller RJ-11 jacks to connect to the ISP line while Annex-B uses the standard RJ-45 jacks that are also used for ethernet cables.
By default the modem operates in router mode and has the IP 192.168.1.1/24 assigned. Configuration is accessible via a web UI on ports 80 and 443. The user is _admin_ and the password _1234_. Configure a workstation a static IP in the same subnet and connect it to the device, then login.
The modem has a standard overview page called "connection status" and four more sections that offer a menu each. First one is _Network Setting_.
The most important pages in that menu are _Broadband_, _Wireless_, _Home Networking_ and _Power Management_.
Menu number two is called _Security_.
This time there are two interesting pages: _Firewall_ and _MAC filter_.
The third menu is "System Monitor".
There you will find logs, the ARP table, the routing table and so on if you need it.
Finally there's the "Maintenance" section.
The most important pages here are _User Account_, _Remote MGMT_, _Firmware Upgrade_ and _Configuration_.
You should probably start by updating the firmware to the latest available version, but I'll go through some of the pages here in order.
First go to Network Setting -> Broadband. Set the device to operate in _Bridge mode_. Depending on what ISP you are using, you might need to have to set a VLAN tag for the connection to work. In my case choosing VLAN 7 is required. You might need to do some research or try out some possibilities.
Make the modem work in bridge mode (PNG)
Then go to Network Setting -> Wireless. Do yourself a favor and just disable it. It will save you some power and offer additional security. If you need to update the firmware again or make another change, just physically connect a machine to it.
Turning off wireless access (PNG)
Next is Network Setting -> Home Network. Turn off the DHCP server there. And if you're paranoid, assign it a different IP - preferably in a different private address range.
Disabling the DHCP server (PNG)
Lastly for the first section go to Network Setting -> Power Management. Here you can turn off everything that you don't need. I only left the WAN port as well as one LAN port active and chose to unpower the rest.
Unpowering the LED and most ports (PNG)
Next is Security -> Firewall. Since we're not using Router mode, the firewall doesn't make any sense. Off it goes.
Switching off the Firewall (PNG)
For a bit of extra paranoia go to Security -> MAC Filter. Here you can choose to allow access to the modem only from certain NICs. If you consider doing this, make sure that you understand the consequences. Allow a minimal of _two_ MAC addresses to not lose access if the respective NIC / machine should ever get damaged. If you only configure one, make sure to at least write it down and deposit it somewhere safe in case you need to spoof it. Otherwise you'll have to factory-reset the modem when you managed to lock yourself out.
Definitely go to Maintenance -> User Account and change the default password to something stronger.
Pay Maintenance -> Remote MGMT a visit. Turn off everything that you don't need. You definitely don't want Telnet, FTP or plain HTTP. Chances are that you don't want SNMP either (if you do want to have it you know why). Disable ping if that makes you more feel better. And when it comes to SSH, here's the reason I turned it off:
Unable to negotiate with [IP ADDRESS] port 22: no matching exchange method found. Their offer: diffie-hellman-group-sha1
This means that they ship a version of OpenSSH from 2015 or older (and probably never updated it since 2012 - if they even used the most current one back then). You can make your client talk to it anyway, but for me there's generally no need for it.
Definitely go to Maintenance -> Firmware Upgrade and do it now if you haven't done so already.
Finally there's Maintenance -> Configuration. Here you can backup the configuration settings you just made and download an archive to your computer. Doesn't hurt to do that.
So much for the modem. There's more things it can do but they are mostly only relevant in router mode (and sometimes even then only when you have special requirements).
With the modem fully configured and working, it's time to configure OPNsense to do the DSL dialup. I chose to rename the first network interface from WAN to PPPoE, but that's only a name. You need to go to Interfaces -> PPPoE (or whatever yours is called) and change the IPv4 Configuration type from _DHCP_ to _PPPoE_ (unless you have an IPv6-only line of course in which case you'd configure that instead).
OPNsense WAN connection configuration (PNG)
Further down enter the username and password for the PPPoE connection. Check the documents you got from your ISP, they should be on there somewhere. If they aren't, ask for them.
OPNsense PPPoE configuration (PNG)
And that's all. Save your changes and if everything is correct, OPNsense will do the dialup and establish an Internet connection! Much better now that a trusted device does this, isn't it?
My new setup is not perfect. Ideally I'd make my OPNsense machine deal with the IP telephony, too. Before even attempting that I will however need to do a lot of reading upfront. So there's another long-term goal.
Nevertheless this was a change for the better. I made another step in reclaiming my own network. So far I've been running this setup for a month and did not face any problems. There has been a short power outage once: After power was back, the APU and the modem booted and before long OPNsense had re-established the connection and I was online again.
The next article will be about building custom packages on OPNsense (since it's a somewhat involved topic it will probably be split into two posts, though).