## Learning about slightly more advanced networking with linux

Paul Warren

Mastodon: @pwarren@mastodon.thewarrens.name

email: paul at thewarrens.name

© 2021 Paul Warren

CC BY-NC-SA

## ! WARNING !

I am not a network engineer, there are gaps in my knowledge

The words I use might not be the correct ones

Please don't blame me if your network stops networking

Maybe don't go and try building an ISP based off this talk :)

## What even is a network

Ethernet?

Token Ring?

IPX?

AX.25?

## What even is a network

ipv4?

ipv6?

tcp?

Allows connections between computers

We are going to mostly focus on Ethernet and IPv6

## Managed network?

Controls connections between computers

Scales connections between computers

Most of us probably work in a managed network

Most of us probably have a pretty flat edge network at home

Diagram is nice, but hides complexities at each layer.

## Layers!

Like an onion!

That 7 layer thing from the OSI

Ethernet -> IP -> ICMP/TCP/UDP

Administrative overlays

VPNs and Tunnels

or a parfait

which you can mostly ignore, as what we generally use doesn't conform to it. But it does provide a good framework for assisting understanding

Like firewalls, web-proxies/SSL MITM, But also access rights etc

## Layers!

This means the Physical layers do not have to match the Logical connections

Networks are also a bit fractal in nature

For the purposes of this talk, we can ignore a lot of complexity

## An easy one!

VLANS

Ethernet layer

Designed to limit broadcast storms

Can also separate IP networks on the same Ethernet

Tagged and Untagged/Default

IEEE 802.1Q

beware of strange implementations, windows seems to take Router Advertisements from all vlans, regardless of tag

## VLANs in linux

Are pretty easy!

    	    ip link add link enp0s2 name enp0s2.2501 vlan id 2501
    	    ip -6 addr add 2001:db8:2501::10/64 dev enp0s2.2501
    	    ip link set dev enp0s2.2501 up

## VLANs in linux

Various different methods of making it go in different distributions

Debian: in /etc/network/interfaces

    	    auto enp1s0.2502
    iface enp1s0.2502 inet dhcp
    iface enp1s0.2502 inet6 auto

OpenWRT has a nice GUI

OpenWRT: can also use the hardware present on most hardware routers to assign vlans to specific ports

## What even is a router?

Two or more interfaces

Some logic to determine where a packet goes

Not necessarily physical

Sounds simple right?

## Linux Routing

    	      net.ipv4.ip_forward = 1
    	      net.ipv6.conf.all.forwarding = 1
    	      net.ipv6.conf.default.forwarding = 1

And we're done!

Yeah, not really :)

## Static Routes!

Manually added, or scripted routes that don't change

    	      ip route add 172.17.0.0/24 via 172.16.0.254 dev wg0

## Static Routes!

Harking back to our vlan

    ip -6 route add 2001:db8:2501::/64 via 2001:db8:2500::1 dev enp0s1
    ip -6 route add 2001:db8:2502::/64 via 2001:db8:2500::1 dev enp0s1
    ip -6 route add 2001:db8:2600::/64 via 2001:db8:2600:beef:face::1 dev enp0s1

As you can imagine this quickly becomes unwieldy with expanding networks

## Enter dynamic routes

As a Router:

Advertise your LANs

Discovering routes to other LANs

Optional: Do some logic

Add them to the routing table

Userspace daemons

talking to the kernel networking stack

## Dynamic Routing

Open Shortest Path First (OSPF)

The algorithm is pretty interesting

RFC2328

RFC5340

For: Dynamic routes inside your networks

## Dynamic Routing

Border Gateway Protocol (BGP)

RF4271

For: Dynamic routes outside your network (and inside sometimes)

## The Userspace Daemons

BIRD: Berkeley Internet Routing Daemon

Quagga: Fork of Zebra

Significant overlap, but they are different

I've not used Quagga

## intro to bird

Powerful

Complex to configure

Use version control

Not quite turing complete

git on /etc/bird or wherever your distor stores it.

## Intro to bird configuration

/etc/bird.conf

Each router needs a unique ID

Set BIRD's router ID. It's a world-wide unique identification of your router, usually one of router's IPv4 addresses. Default: the lowest IPv4 address of a non-loopback interface.

## Intro to bird configuration

KNorries diagram here

more detail on bird
A Simple Network
Multi Host IPs (Authoritative DNS example like in the facebook thing)
Why use a 'real' router

## ¿Por qué no los dos?

OpenWRT is a linux based distribution for real networking hardware

Consumer grade mostly, but some enterprise level routers are supported

## Bonus homework

Why did I use 2001::db8::/32?

Why did I use /64s?

I highly recommend going through KNorrie's network examples: https://github.com/knorrie/network-examples

OSPF Areas

Automatic transfers of internal aggregates to BGP (Something I've not investigated much)

## Resources

These slides: https://gitea.pwarren.id.au/pwarren/SysAdmin2022

bird: https://bird.network.cz

Openwrt: https://openwrt.org/

The OpenWRT IRC channel, currently on the OFTC network

BenEater's "Why was facebook down for five hours"

802.1Q:

## Unused Bits

## What I'm assuming we're familiar with

Diagram showing standard leaf node of a network with a bit cloud containg "The rest of the org"

## What we're familiar with

Diagram showing added storage and server network

## How things evolve

Uh Oh, we've got a new Datacentre

## How things evolve

which has its own lot of storage and servers

## How things evolve

And now people want to work in Tasmania!