Files
ferrix/slides/sections/05-lab.md
T
Rayhaan JaufeerallyandClaude Fable 5.1 1399cbd39f slides: "Hands-on BGP", restructured into five sections
- Title is now "Hands-on BGP"; the AS-path diagram is gone from the cover.
- Sections: IPv6 addresses and prefixes; where AS numbers and prefixes
  come from (IANA, RIRs, the RIPE database, IRR vs RPKI); BGP and the
  bytes of an UPDATE; IP transit vs Internet exchanges (the peering LAN as
  an Ethernet segment, route servers); the lab (ferrix, pr01.rue, SwissIX,
  NL-ix, France-IX, DE-CIX, transit).
- The UPDATE walked through in section 3 is a real 94-byte capture from
  ferrix for 2a0d:d741:1::/48. Vertical slides light up one part at a
  time with its decode; the generator asserted every quoted number
  against the capture. Session counts come from the tracked bird.conf,
  the route6 object from the RPSL file, SwissIX's LAN from PeeringDB.
- New components: focusable bytes, decode table, prefix bits, and SVG
  diagrams drawn in the theme's colours.
- Opening index.html straight from disk used to give a title and empty
  panels, because browsers block the module and the section files there.
  The page now explains that, and also reports a failed reveal.js load.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-20 21:41:31 +02:00

5.0 KiB

The lab

Notes: Section 5. What the students are about to touch, and what stands between a typo and the Internet.


What you are connected to

youa browser ferrixAS4200000001 pr01.rue (BIRD)AS210036 HTTPS BGP web page + BGP speakerfilters, then decides where SwissIX NL-ix France-IX DE-CIX transit

Notes: ferrix is a small BGP daemon written for this course; it runs on the same machine as the router. Both dashed hops are real BGP sessions. Everything to the right of pr01 is the actual Internet.


Your prefix

2a0d:d741:<n>::/48

  • <n> is your number in hex: student 10 is 2a0d:d741:a::/48
  • Put your name in owner: only the owner can withdraw a route
  • One prefix each

Notes: Put the URL and the class password on the board. The page is a snapshot by default; turn on auto-refresh at the top right to watch things change.


What happens when you press Announce

  1. ferrix builds an UPDATE. Click bytes to see it, hover to decode it
  2. pr01 checks it against its import filter
  3. pr01 decides, per neighbour, whether to pass it on
  4. Within a minute or so, the Internet can see your prefix
  5. ping 2a0d:d741:<n>::1 answers, from anywhere

Notes: Step 5: pr01 answers for every address in the lab space, so reachability of your prefix depends only on whether your announcement got out.


What stands between you and an outage

filter ferrix_import {
    if !(net ~ [ 2a0d:d741::/40{48,48} ]) then reject;   # only lab /48s
    if bgp_path.first != 4200000001 then reject;         # only from ferrix

    bgp_community.filter([ (65535, 65281), (65535, 65282) ]);
    bgp_large_community.filter([ (42476, *, *), (210036, 0..3, *) ]);
    bgp_ext_community.empty;                             # drop what we did not offer

    dest = RTD_UNREACHABLE;                              # announce-only
    accept;
}

Notes: This is the router's real import filter. ferrix refuses anything outside the lab /40 before it gets this far, and pr01 takes at most 130 routes from it. Two independent nets, because the web form has no idea who you are.


Steering your route

You add Who acts Effect
nothing announced everywhere
210036:0:0 pr01 announced nowhere
210036:0:0 210036:1:42476 pr01 only to the SwissIX route servers
+ 42476:0:0 42476:1:559 SwissIX …and from there only to SWITCH
NO_EXPORT pr01 accepted, never passed on

Same idea at two hops: never there, only there, nowhere.

Notes: 210036:0: never to that AS, 210036:1: to that AS, 210036:2/3: the same by exchange (1 SwissIX, 2 NL-ix, 3 France-IX, 4 DE-CIX). A "never" always wins. The preset menu next to the field has all of these.


Your turn

  1. Announce your prefix with no options. Find it on a looking glass
  2. Read the bytes: where is your AS number? Where is your prefix?
  3. Restrict it to the SwissIX route servers. Who still sees it?
  4. Narrow it to SWITCH. Can you reach it from the ETH network? From your phone?
  5. Withdraw it and watch it disappear

Notes: Looking glasses: bgp.tools, RIPEstat, and the exchange's own. Global visibility takes a minute or two to settle after each change.