Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
fpgas.online
fpgas.online
  • User documentation
    • Sites
      • The welland site
      • The ps1 site
    • Roadmap
    • Using a board
      • Acorn
        • An Acorn on fpgas.online
        • How to load a design onto an Acorn from its board page
      • Tiny Tapeout FPGA demo board
        • A Tiny Tapeout FPGA demo board on fpgas.online
        • How to run a bundled design
        • How to load your own bitstream
        • The bundled designs
      • NeTV2
        • A NeTV2 on fpgas.online
        • How to load a design onto a NeTV2 from its board page
      • Fomu EVT
        • A Fomu EVT on fpgas.online
      • Arty A7
        • An Arty A7 on fpgas.online
        • How to load a design onto an Arty A7 from its board page
      • Tiny Tapeout chip demo boards
        • The Tiny Tapeout chip demo boards on fpgas.online
        • How to select a design on a Tiny Tapeout chip demo board
      • The board page on welland and ps1
      • How to reset a board
      • The camera on a board
    • How to reach a board with your own ssh client
    • How to log in to a host at ps1
  • Admin documentation
    • How the system works
      • Setup
      • Netboot and the NFS root
        • Updating the NFS root
        • A Pi not booting
        • What is in the NFS root
        • The EEPROM lock
        • Historical tooling
        • Sources
      • Network and power
        • Power-cycling a board
        • Converging the switches
        • Checking isolation
        • The PoE scripts
        • Sources
      • What runs on a Pi host
        • Services
        • Units shipped by fpgas-online-setup-pi
        • Boot-time configuration
        • Models and serial consoles
        • Camera
        • Sources
      • The gateways
        • The gateway host
          • Deploying a gateway
          • Rebuilding a gateway
          • Certificates at welland
          • Services
          • Sources
        • The welland gateway
        • The ps1 gateway and switch
        • What a site needs from its upstream network
          • The uplink and inbound IPv4
          • IPv6 and DNS
          • Outbound, from the gateway
      • The web application
      • The Tiny Tapeout stack
    • How to maintain it
      • Accounts and logins at welland
        • The gateway, tweed
        • The Pi NFS root
        • Logging in
        • Adding or removing a person
        • Where the keys come from
        • Verifying access
      • Bootloader EEPROM: upgrade and lock
        • Raspberry Pi 5: check, upgrade, lock
          • Check it
          • Upgrade: what you need
          • Step 1: make the card
          • Step 2: network cable out
          • Step 3: join the WP pads
          • Step 4: card and cable in
          • Step 5: undo, cable back in
          • Step 6: read it back
        • Compute Module in a Compute Blade
      • Orange Pi H3 hosts
        • Reading and recovering
        • Adding and deploying
        • The hub host
        • Why they boot this way
      • Verifying a deployment
    • How to set up sites and devices
      • Boards
        • Digilent Arty A7
          • Overview
            • The Arty A7 board
            • Arty A7 specifications
            • Programming an Arty A7
            • Arty A7 references
          • Set one up
            • Arty A7 wiring to a Raspberry Pi
            • How to load a design onto an Arty A7
            • How to write a design into an Arty A7’s flash
            • How to install the Arty A7 packages
          • Checks
            • How to run the Arty A7 UART test by hand
            • How to run the Arty A7 GPIO loopback test by hand
        • Kosagi NeTV2
          • Overview
            • The NeTV2 board
            • NeTV2 specifications
            • Programming a NeTV2
            • NeTV2 references
          • Set one up
            • NeTV2 wiring to a Raspberry Pi
            • How to install the NeTV2 packages
            • How to load a design into a NeTV2 on a Raspberry Pi 3B+
            • How to load a design into a NeTV2 on a Raspberry Pi 5
            • How to write a design into a NeTV2’s flash
            • How to free a NeTV2’s serial port before a test
          • Checks
        • SQRL Acorn and LiteFury
          • Overview
            • The Acorn card
            • Acorn specifications
            • Programming an Acorn
            • The fpgas.online Acorn design
            • The camera over an Acorn
            • Acorn references
          • Which one do I have
          • Set one up
            • On a Raspberry Pi 5
              • The two cables on a Raspberry Pi 5
                • Parts and tools for the Raspberry Pi 5 cables
                • How to prepare the JTAG cable’s wires (Raspberry Pi 5)
                • How to fill the JTAG cable’s housing (Raspberry Pi 5)
                • How to prepare the UART cable’s wires (Raspberry Pi 5)
                • How to fill the UART cable’s housing (Raspberry Pi 5)
                • How to check the cables on the bench (Raspberry Pi 5)
              • How to fit the cables and the card (Raspberry Pi 5)
              • A Raspberry Pi 5’s settings for an Acorn
              • Acorn wiring on a Raspberry Pi 5
              • The serial port, the console and JTAG on a Raspberry Pi 5
            • On a Compute Blade
              • The two cables on a Compute Blade
                • Parts and tools for the Compute Blade cables
                • How to prepare the JTAG cable’s wires (Compute Blade)
                • How to fill the JTAG cable’s housing (Compute Blade)
                • How to prepare the UART cable’s wires (Compute Blade)
                • How to fill the UART cable’s housing (Compute Blade)
                • How to check the cables on the bench (Compute Blade)
              • How to fit the cables and the card (Compute Blade)
              • A Compute Blade’s pins and settings for an Acorn
              • Acorn wiring on a Compute Blade
              • The line JTAG and the serial port share on a Compute Blade
            • How to install the Acorn packages
            • How to install the fpgas.online images on an Acorn
            • How to update the operational image of an Acorn
            • How to generate multiboot bitstreams by hand
            • Reaching an Acorn’s flash through PCIe
          • Checks
            • How to run the Acorn check on a Raspberry Pi 5
            • How to run the Acorn check on a Compute Blade
              • How to make a Compute Blade boot ready for JTAG
            • Tests by hand
              • How to run JTAG by hand on an Acorn on a Raspberry Pi 5
              • How to run JTAG by hand on an Acorn on a Compute Blade
              • How to check an Acorn’s PCIe link by hand on a Raspberry Pi 5
              • How to check an Acorn’s PCIe link by hand on a Compute Blade
              • How to run the pin ID test on an Acorn on a Raspberry Pi 5
              • How to run the pin ID test on an Acorn on a Compute Blade
              • How to run the Acorn UART and GPIO loopback on a Raspberry Pi 5
            • What the Acorn check tests
              • The Acorn check
              • Acorn tests and their wires on a Raspberry Pi 5
              • Acorn tests and their wires on a Compute Blade
              • The Acorn DDR memory test
              • The Acorn Wishbone bridges test
              • JTAG loads and the PCIe endpoint
          • Troubleshooting
            • A failing Acorn test on a Raspberry Pi 5
            • Other Acorn check messages on a Raspberry Pi 5
            • Acorn wiring faults on a Raspberry Pi 5
            • A failing Acorn test on a Compute Blade
            • Other Acorn check messages on a Compute Blade
            • Acorn wiring faults on a Compute Blade
            • How to recover an Acorn with a bad image
        • Fomu EVT
          • Overview
            • The Fomu EVT board
            • Fomu EVT specifications
            • Programming a Fomu EVT
            • USB analysers for the Fomu EVT
            • Fomu EVT references
          • Set one up
            • Fomu EVT wiring to a Raspberry Pi
            • How to install the Fomu packages
            • How to load a design onto a Fomu EVT with openFPGALoader
          • Checks
            • How to stop the serial login console before a Fomu UART test
          • Troubleshooting
            • Fomu EVT programming faults
            • Fomu EVT test faults
        • Tiny Tapeout FPGA demo board
          • Overview
            • The Tiny Tapeout FPGA demo board
            • Tiny Tapeout FPGA demo board specifications
            • Tiny Tapeout FPGA demo board pin mapping
            • Programming a Tiny Tapeout FPGA demo board
            • Serial port ownership on a Tiny Tapeout FPGA demo board
            • The firmware on a Tiny Tapeout FPGA demo board
            • Tiny Tapeout FPGA demo board references
          • Set one up
            • Tiny Tapeout FPGA demo board wiring to a Raspberry Pi
            • How to install the Tiny Tapeout FPGA packages
            • How to stop the fpgas-tt daemon and start it again
          • Checks
            • Tiny Tapeout FPGA demo board test designs
          • Troubleshooting
            • Tiny Tapeout FPGA demo board faults
            • Tiny Tapeout FPGA demo board faults on the Raspberry Pi
        • Tiny Tapeout chip demo boards
          • Overview
            • The Tiny Tapeout chip demo boards
            • Tiny Tapeout shuttles and their demo boards
            • Tiny Tapeout chip demo board references
          • Set one up
            • Tiny Tapeout chip demo board wiring to a Raspberry Pi
            • How to free a Tiny Tapeout board’s serial port from fpgas-tt
      • fpgas-verify: checking an FPGA board from its Raspberry Pi
        • Installing
        • Running it
        • Identity and labels
        • Reading the result
        • Reading the result: more
        • --help
        • What each check tests
        • TT FPGA
        • Acorn
        • Acorn: power-cycle check
        • JTAG IDCODE and DNA
        • Checking an Acorn's wiring
        • Common failures
        • The report and state
      • Packages
  • Developer documentation
    • About these docs
      • The structure of the documentation
      • What a page contains
      • Review and verification of a page
      • References on writing documentation
      • Where each limit comes from
    • Repositories
    • Contributing to these docs
    • Board identity
    • Open items on these pages
  • Resources
    • PMOD interface
    • Raspberry Pi PMOD HAT
    • Tiny Tapeout PMOD layouts
    • The pin-id design
      • How to scan an Arty A7’s wiring with the pin-id design
      • Pin-id scanner options
      • How to add a board to the pin-id design
Back to top
View this page
Edit this page

The uplink and inbound IPv4¶

You are setting up a site’s upstream and need the uplink it must give the gateway, and the IPv4 ports it must let through to it. Each requirement says whether it is built (the deployed gateway relies on it now) or designed (a design, merged or in draft, needs it and no code uses it yet), as on the landing page.

The uplink¶

Requirement

State

Notes

One Ethernet link from the gateway’s uplink interface to the upstream network, a standard 1500-byte link

built

The fleet’s VLANs never appear on this link.

A fixed IPv4 address, a default route and a DNS resolver for the gateway, given in the inventory

built

eth_uplink_static_* and eth_uplink_dns_server. The inventory has no working DHCP uplink: the firewall and the web application use eth_uplink_static_address unconditionally.

Outbound IPv4 from that address to the internet

built

The gateway masquerades the whole fleet behind its uplink address, so the upstream sees one source address. Behind a NAT gateway, the upstream NATs it once more.

The address must not change

built

The gateway’s firewall forwards per-board ports addressed to eth_uplink_static_address, and the web application lists it among its allowed host names.

ICMP and ICMPv6 are not filtered

built

Path MTU discovery needs them.

Inbound IPv4¶

“Reaches the gateway” means: on a public address, the port is simply open to the internet; behind a NAT gateway, the upstream forwards the port on the public IPv4 address to the gateway’s uplink address, on the same port number except where a row says otherwise.

Public port

What it is for

State

tcp 80

The web site, and Let’s Encrypt http-01 challenges (/.well-known/acme-challenge/) for every public name of the site

built

tcp 443

The web site, the web terminal and the camera players. TLS ends on the gateway: an upstream that proxies must pass TLS through untouched (route on the SNI name), not terminate it

built

udp and tcp webrtc_media_port (8189)

WebRTC camera media. Signalling rides on 443; the media does not, and cannot go through an HTTP or TLS proxy

built at Welland

tcp <s><pp>22 and <s><pp>44 for switch s, port pp

Per-board ssh and the per-board auxiliary port. The gateway forwards each to its board. See Network and power for the formula

built

tcp 22

Logging in to a board by name (ssh pi-sw2-p47@…) without a port number: a username-routing ssh proxy on the upstream gateway forwards logins under board names (pi…) to the site gateway’s ssh proxy, and other names stay with the upstream gateway

designed (decided 2026-10-04)

tcp 2222

The upstream gateway’s own sshd (backup)

designed (decided 2026-10-04)

tcp 2223

Forwarded to the site gateway’s own sshd on port 22 (backup): operators and deploys over IPv4

designed (decided 2026-10-04)

tcp 2224

Forwarded to the site gateway’s ssh proxy, which listens on a port of its own beside the gateway’s sshd; that port is not fixed yet (backup)

designed (decided 2026-10-04)

Notes on the table:

  • The WebRTC media port is built at Welland only. The firewall opens it only on a host that defines webrtc_media_port, and the web tier runs the WebRTC role only on a host that defines webrtc_additional_hosts. PS1 defines neither, so PS1 does not run WebRTC.

  • The gateway forwards the per-board ports to the boards (built, in its firewall). Whether a site’s upstream forwards them on to the gateway is the upstream’s part; at Welland it did not when last checked, on 2026-09-06 (an earlier note in fpgas.online-docs; not re-checked since), so per-board ssh from outside over IPv4 may not work there. Note that the per-board port scheme differs between sites: Welland uses <s><pp>22 and <s><pp>44 with the forward policy set to drop, and PS1’s legacy scheme uses <100+N>22 and <100+N>44.

  • The tcp 22 and 2222 to 2224 rows are from the ssh proxy design (Design: per-board SSH names and a username-routing SSH proxy, which recommends them; the design is on hold) for Welland, which is behind an upstream router. The tcp 22 and 2222 rows end on the upstream gateway and do not reach the site gateway directly. A site whose gateway is directly on a public address has no upstream proxy; how its port 22 is shared between sshd and the ssh proxy is not decided.

  • At Welland none of those four rows is built (the design is on hold). Operators and deploys reach the site gateway’s sshd over IPv6 (ansible_host: gw.welland.fpgas.online in host_vars/fpgas.online.yml).

  • If the upstream is an HTTP reverse proxy for port 80 rather than a plain port forward, it must pass the Host header on: the gateway’s virtual hosts are selected by it.

Note

A comment in ansible/web.yml (main, read 2026-10-07) says ps1 sits behind CGNAT. The ps1 gateway read on 6 October 2026 found its uplink on the public address 76.227.131.147/25, as its host_vars say (The ps1 gateway and switch), so the web.yml comment is out of date.

Clients inside the site¶

A client on the upstream’s own LAN usually cannot reach the public address and be forwarded back in (“hairpin”). Such clients need a route to the gateway’s uplink address, and the site’s names must resolve to it for them (DNS). At Welland the gateway offers its uplink address as a WebRTC candidate for the same reason (webrtc_additional_hosts).

Next
IPv6 and DNS
Previous
What a site needs from its upstream network
Copyright © 2026, Tim 'mithro' Ansell
Made with Sphinx and @pradyunsg's Furo
On this page
  • The uplink and inbound IPv4
    • The uplink
    • Inbound IPv4
      • Clients inside the site