45 comments

[ 2.7 ms ] story [ 90.6 ms ] thread
Can someone please ELI5?

I don't really get what dynamic IP routing is, or what this project means to solve at internet scale?

BIRD is a BGP daemon. Autonomous Systems exchange routing information via BGP and calculate the best route to a given destination. It’s dynamic because routes are updated via the protocol and the preferred route selection algorithm, instead of managed manually with, say, the route command.

BGP can also be used inside an AS and some container networking solutions (e.g. kube-router for kubernetes) also use it.

BIRD is not just BGP daemon, it also support OSPF, RIP and Babel routing protocols.
short description: dynamic routing (as opposed to static routing) allows routers to select forwarding paths based on current topology of a network that they are part of. change in network topology automatically (automagically?) updates routing information and better paths for forwarding are recomputed.

this is primarily accomplished by running a routing protocol which allows ‘adjacent’ routers to exchange routing information, f.e rip, ospf, bgp etc.

with static routing, a more ‘hands on’ approach is required...

The internet "works" because, ultimately, core routers have adjacency to other core routers. Everyone propagates knowledge of their adjacency, and you end up having complete paths to every other network.

A routing daemon speaks one or more routing protocol to build a table of routes. That can be used for various purposes, including programming the host's own routing table (bird runs on UNIX-like OSes) or other implementations can update a special kind of memory called a CAM (think something like a hashtable in silicon) an ASIC on a router/route switch uses.

Check wikipedia for BGP and peering and you should have what you desire.

Big ISPs connecting their core routers directly together with PNIs absolutely still happens, but in the modern era you see a lot more dedicated purpose aggregation and peering routers that are the AS-to-AS bgp neighbor relationship between ISPs that are in the same carrier hotel/same IX point.

Often in a setup where the aggregation router has dual links to a pair of big core routers. The cores only speak bgp within their own AS.

Or in a particularly big POP, a twin pair of agg routers connected in a X shaped topology to a pair of core routers.

Internet is inter-network. I have network at my home. My internet service provider (ISP) has their own network. That giant internet searching services has their own network. How are they interconnected? BGP (Border Gateway Protocol) is one of routing protocol used by those different networks to connect to each other. Internet formed. Bird is a software that implement BGP. You can run it on a pc instead of buying specific routing device (Cisco, juniper, Mikrotik, etc).
I would love to know if there is a stand-alone RIPng or Ospf daemon or better, kernel module which can be deployed to hosts with minimal effort

having to deploy whole zebra to just be able to announce local docker routes is a bit too much for my liking

Well, you can run BIRD for that purpose. It is one daemon with support of multiple routing protocol.
Context: cz.nic are the producers of the Turris Omnia WiFi router, an OpenWRT-based SOHO router. ~US$300 buys you 2.4 & 5 Ghz wifi, 5x 10/100/1000 ethernet, 2 GB RAM, 8 GB flash, 2x USB, 500 MHz ARM CPU, lots of blinkenlights, automatic updates (not otherwise included with OpenWRT), and numerous hardware modular expansions including internal mSata disk, SIM card capacity, and a NAS enclosure. That's pricier than a proprietary router but considerably more powerful, versatile, and performant. I'm a happy owner.

https://www.turris.cz/omnia/

The recently announced Mozilla WebThings gateway also runs on the Turris:

https://news.ycombinator.com/item?id=20532763

The BIRD Internet Routing Daemon, a BGP routing service you can run yourself, is included in the available OpenWRT packages:

https://openwrt.org/packages/pkgdata/bird4

No, I don't run BIRD myself, though it could be fun to play with.

Ah, nothing says "Gigabit Ethernet Routing" like a iPhone 3G processor.
I route gigabit with a much slower processor than that.

Good routers are built for reliability, and most of them seem to opt for slowish CPUs and a fast-path for routing that doesn't involve the CPU at all. The CPU is there to update the routing table and do other supporting chores.

Their website says "1.6 GHz dual-core ARM", which sounds decidedly more powerful than an iPhone 3G
Thanks, I thought the GHz was higher, though /proc/cpuinfo doesn't state, and dmesg has rolled off the startup CPU specs. Can confirm two cores.
You can find much slower machines able to route gigabit, the limitations are mostly on the bus and ability for the driver/chip to efficiently process notifications. We're only talking about 125MB/sec, and if any of that is bulk data utilizing the full MTU, as few as 81k packets/sec, represented in (modulo driver/chip/config) far fewer than 81k interrupts/sec
You have to look at the architecture. They are using a dedicated switching chip that has multiple gigabit lanes. While routing is a different path in software most home and SOHO implementations have very few routes to deal with. That being said the switching can offload the majority of those lookups. It's far more than powerful enough to handle what it states given its architecture.
Does Turris Omnia support VPN proxying?
Could you clarify what specifically you mean?

Both VPNs and proxies are supported. "VPN proxying" isn't a familiar term.

Generally, Turris has any OpenWRT capability. Possibly helpful:

https://openwrt.org/docs/guide-user/services/vpn/openvpn/cli...

https://openwrt.org/docs/guide-user/services/tor/create-tor-...

https://openwrt.org/docs/guide-user/services/proxy/overview

I was vague, but I think I just meant VPN. Dunny why I wrote proxying. Thank you!
If you're going to spend $300 on a home router and know what you're doing, I strongly recommend you don't buy this. Not because it's a bad product, but in that price category you should be separating the functions of router and wifi into their own discrete devices.

A ubnt edgerouter-x is good for up to about 800Mbps of NAT and runs an os derived from Debian and vyatta. Or something like a mikrotik rb4011.

Then buy a dedicated purpose wifi ap like a ubnt uap pro that does dual band 802.11ac.

A router should be a thing that has 1000baseT ports on it, maybe an sfp or sfp+ cage and no wireless. A wifi ap should be a thing with no routing functionality that serves the purpose to bridge a wifi client device at layer 2 onto some specific section of Ethernet fabric.

>you should be separating the functions of router and wifi into their own discrete devices

Just curious, why? (You just mentioned "shoulds" and "dos", not "whys")

Ability to make changes to one segment of the network without affecting the other. Upgrade your gateway device/router separately from wifi. Put multiple APs all controlled by a single unifi controller around your house, rather than mess with half duplex csma hell wifi extender devices.

Have a router supporting weird configurations like CenturyLink gigabit gpon service, which if you don't want to use their terrible gateway device, requires a unique vlan tag on the wan interface.

Ability to have a router that is Debian under the hood.

> you should be separating the functions of router and wifi into their own discrete devices

Why?

If you need a media converter, router, and wireless access point anyway, there are obvious space and power advantages to combining these functions into a single device.

I could see a concern about performance, but from scanning online reviews, it seems like the Turris Omnia performs just fine.

> A router should ... > A wifi ap should ...

Instead of just stating your beliefs as if their truth is self-evident, please offer some rationale.

Network engineer with 20 years experience: Routers that have wireless interfaces on them are toys. Carrier grade routers have wired interfaces only. Introducing binary blobs of atheros/Qualcomm chipset support into a router is a recipe for instability.

In my field, "toy" is anything that costs under 500 bucks. If we want a wireless interface for OOB, we'll add an opengear LTE gateway device.

The router I mentioned in the earlier post consumes 5W of power and is the size of a pack of cigarettes. It looks like a toy, and is under $50, basically disposable, but is much more stable and bug free than home routers you can buy from $85-275 at Best buy which integrate wifi capability.

The consumer market for cool looking multi band $200 routers with spiky antennas coming out of the top is, in my opinion, ridiculous.

As for the dedicated wifi side, ask any professional who uses (on the cheap side, ubnt) or xirrus, ruckus APs in environments with thousands of clients whether wifi aps should also be routers. They'll have a good laugh at the idea.

The router you mention uses a cpu originally designed for the home wifi router market and was in fact heavily used in them. It also requires binary blobs to accelerate NAT to that 800Mbs and to accelerate IPsec. EdgeOS also tends to be a buggy mess. The rollout of the 2.x train for the er-x has been a fiasco.
> A ubnt edgerouter-x is good for up to about 800Mbps of NAT and runs an os derived from Debian and vyatta. Or something like a mikrotik rb4011.

Personally, I was thinking to configure network with ER-X for myself, but I quickly started to reconsider to take ER-4/ER-6 or Omnia, which seems to be few magnitudes better. Omnia is great SOHO router, it has better transfer over the air (5GHz on Turris it's between 900-950 [0]) than ER-X in eth-eth (700-800 [1]). If you aren't scarred of having a all-in-one device[6], then it might a great choice if you would like more possibilities, e.g. to setup few more services directly on Turris (i.e. PiHole, Syncthing) with mSATA disk, instead of using RaspberryPi with SD card (:scream:) for this purpose. In terms of pricing (for EU customers) pricing does not sound that bad (if you also looking to have a WLAN network), because ubnt ER-4/RaspberryPi 3B+/UAP Lite (note, it's slower MIMO 2x2) [2][3][4] is about 260+ pounds, for Omnia 270+ pounds.

[0]: https://bluegadgettooth.com/best-openwrt-router/

[1]: https://www.mbreviews.com/ubiquiti-edgerouter-x-review/

[2]: https://skinflint.co.uk/ubiquiti-edgerouter-4-er-4-a1749252.... (~160)

[3]: https://skinflint.co.uk/raspberry-pi-3-model-b-a1785657.html (~30)

[4]: https://skinflint.co.uk/ubiquiti-unifi-ap-ac-lite-uap-ac-lit... (~70)

[5]: https://skinflint.co.uk/turris-omnia-2gb-a1520592.html (~270)

[6]: I have heard following rule of thumb, that networks should be organized to have dedicated devices per given resposibility instead of having such router-switch-nas-godzillas, because of easier replacement in case of failure, maintenance, etc. etc. (just like in microservices architecture).

Note that in many configurations, the Turris sits behind a DSL or cable modem already (mine also running OpenWRT. SIM +4/5GL on the Turris would be an exception.

That 800Mbps won't do much for a 10 Mbps ADSL circuit, or even 100 Mbps cable. Though if you can saturate that, props to you.

>cz.nic are the producers of the Turris Omnia WiFi router

Well yeah, they also have a little side business managing the .cz TLD and coordinating Czech ISPs /wrt infrastructure roll-outs, security incidents, etc...

As I'd hope is obvious from their name.

For most of the HN crowd, the Turris / OpenWRT angle likelely has more immediate "what does this mean for me / what can I do with this" significance.

The Turris Omnia is not a good use of money if you want a WiFi router, since more powerful options exist for less than half the price. It’s a fancy box for techies to buy with some extra disposable income.
Do you have any suggestions? I'm in the market for something like this at the moment.
The Turris Omnia is actually a very good choice, because it is well supported by security updates.

The number one flaw of commercial routers/security devices is that they don't get updated or can't get updated.

If you don't want an Omnia, I would strongly advise building a low power computer that runs a mainstream Linux distro with excellent security support -- Debian is an excellent choice -- and spending a few days setting it up properly.

Yeah, that's what I was thinking. To me the computing power and the software support makes it better than a lot of the alternatives, and I don't see anything more powerful without going x86.
There are numerous systems that will run OpenWRT, which for dedicated networking gear I'd generally prefer to Debian (otherwise my first choice). Most annoying downside so far is no manpages. Low-power kit will shave a few bills off your ower budget (Turris draws about 12W).

As you mention, Turris updates automatically. For stock OpenWRT you've got to manage upgrades (and add'l pckg install and configs) yourself. The generous storage means you can add additional OpenWRT packages and apps as desired.

The Turris Omnia does update automatically but it runs an insanely old version of OpenWRT. Once TurrisOS 4 comes out it should fix that but it's taking a very long time to happen.

Auto-updating a plain OpenWRT installation is not hard to implement and allows you to stay up-to-date.

That said, the Omnia's hardware is pretty great and the fact that you can plug eMMC storage to run LXC containers is absolutely fantastic.

You can also install plain OpenWRT on it these days.

Auto-updating if you have storage space for opkg installs is reasonably sane, via opkg. Building a new firmware image is not. Updating via stock builds (LuCI or sysupgrade) leaves the matter of local configurations and package installs ... at best unclear.

A major set of problems are:

- Minuscule rewriteable storage on consumer networking kit.

- The need to create a firmware image, and not merely select and configure packages on disk.

- Bootloader fuckwittedness.

None of these are OpenWRT's fault. They do define the operating theatre, however. Unfortunately, in light of this, OpenWRTs tools and documentation are not up to the task. Yes, free software, volunteer project, etc., etc. I'm hoping my criticisms may be useful.

Many consumer devices (my ADSL modem comes to mind) have nanoscopic writable storage: 8 MB is not atypical.

OpenWRT's other upgrade opions are ... neither clearly stated nor readily achieved.

One of the higher-ranked HN OpenWRT submissions concerns why there is no autoupdate:

https://web.archive.org/web/20160206204329/http://prpl.works... (https://news.ycombinator.com/item?id=10870294)

The OpenWRT user guide does not clearly address system upgrades, though there's otherwise good coverage of many topics:

https://openwrt.org/docs/guide-user/start

The most applicable section appears to be "Installing Additional Software", with sections:

- Beginners guide to building your own firmware

- Extroot configuration

- Managing packages

- Opkg Package Manager

- Saving firmware space

- Show available package upgrades after SSH login

- Using the Image Builder

Only the last directly addresses upgrading. A dedicated "System UpgradinG" document would be extremely useful.

The sysupgrade docs are not in the user guide but the technical reference:

https://openwrt.org/docs/techref/sysupgrade

I've tried compiling from source. There's a hell of a lot of menuconfig, and my build failed after 9+ hours. Not newbie-friendly at all. (FWIW I don't consideer mysef a newbie.)

I've not yet tried the imagebuilder.

I'm very familiar (20+ years) with Febian, and both the familiarity and its APT package management make the process highly predictable (with much help from ample storage and open bootloader standards). OpenWRTx is a long way from that, yet.

If you've any illumination or advice to add beyond "Auto-updating a plain OpenWRT installation is not hard to implement and allows you to stay up-to-date", I'm all ears.

I really like BIRD. Having no prior experience with that sort of thing, we became a LIR at work and set up announcing our IP space to three different transit providers in three different sites. By using regular familiar looking config files it felt way more accessible than the standard stuff by/for traditional network engineers most of which seem to lean on model of configuring by entering commands in a CLI and then persisting the current state.
I used bird to build our companies network. At the time I couldn't reason about how to manage Quagga with configuration management and I disliked how it tried to emulate a Cisco CLI. Bird solves my problems nicely for BGP and OSPF.
I had a terrible experience with my Omnia and support willfully ignored me despite repeated requests for help.

It’s now sitting in my closet with a burnt out chip. Long story short, I put the same network cards in it all the enthusiasts were. Those slots were meant to be user upgradeable. It starts smoking, I open it up and send some pics to the company. They don’t get back to me. Two weeks later I do what anyone does in this position and post on their forums. That gets their attention, they write me back. Immediately they’re on the defensive and after another week of bartering agree to take a look at it only if I ship it to them at my expense and pay for the repairs. At this point I’ve already sunk 5 hundred dollars into it so I agree and ask for a shipping address. They never get back to me. Over the next month I send them follow up emails literally begging to pay them to fix my router. I never got a response.

Between CZ.nic and Purism, I’ve sworn off small hardware shops. It’s been my experience they often don’t stand behind their products when they fail or simply lack the customer service bigger firms can afford.

I ended up buying a few mesh routers from Synology which have been purring away ever since.