MIDAP · Opencall Dancing Piano II

udptunnelBerlin ⇄ Essen

One network across 500 km. Sensor broadcasts in the UdK Berlin LAN appear in the Folkwang LAN in Essen, and the other way round. Every datagram is forwarded the moment it arrives: authenticated, peer-to-peer where possible, relayed where not.

9.11.
2026
18:00
Milestone

First udptunnel bridge between Berlin and Essen established

For the Opencall Dancing Piano II, the first bridge between the two universities went live on 9 November 2026 at 18:00.

Berlin · UdK Berlin · Prof. HromadaEssen · Folkwang Universität der Künste · Prof. Neuhaus

Live

direct · peer-to-peer rendezvous · relay ESSENFolkwang · 3000–5999 BERLINUdK · 6000–8999 amsel.udk.ai
Essen · Folkwang
…
Berlin · UdK
…
Bridge since 9.11. 18:00
…

Status from the broker, refreshed every 3 s. Direct peer-to-peer traffic doesn't pass the broker, so it isn't counted here.

Ports

3000–5999
Folkwang ports · broadcasts in Essen are re-broadcast in Berlin
6000–8999
UdK ports · broadcasts in Berlin are re-broadcast in Essen

Send to your own LAN broadcast address (e.g. 192.168.1.255 in Berlin, 192.168.71.255 in Essen), never to the other site's addresses.

Download · v1.1.0

SHA256SUMS · README.md · udpprobe.py (test tool)

You also need the shared key. It isn't part of these downloads; get it from the broker admin over a secure channel and save it as udptunnel.key.

Install

curl -LO https://udk.ai/udptunnel/udptunnel-1.1.0-macos-universal.tar.gz
tar xzf udptunnel-1.1.0-macos-universal.tar.gz && cd udptunnel-1.1.0-macos
sudo ./install.sh folkwang --key-file ../udptunnel.key --bcast 192.168.71.255   # Berlin: udk
sudo ./install.sh status      # logs · stop · start · uninstall · diagnose 4000

Starts at boot as a launchd service, keeps the Mac awake, logs to /var/log/udptunnel-edge.log. On macOS 15+, apps that send broadcasts need System Settings → Privacy & Security → Local Network.

Test without sensors

# real latency, measured on one clock (Essen pings Berlin and back)
Berlin:  python3 udpprobe.py echo 4999 8999 --to 192.168.1.255
Essen:   python3 udpprobe.py ping 4999 8999 --to 192.168.71.255

# simple one-way test (number includes the clock offset between the machines)
Essen:   python3 udpprobe.py send 4000 --to 192.168.71.255
Berlin:  python3 udpprobe.py listen 4000

How it works

Capture

The edge machine in each LAN listens on its 3000 ports and picks up every sensor broadcast without blocking other apps on the same port.

Cross

Each datagram is signed (HMAC-SHA256) and sent immediately: directly between the edges through UDP hole punching, or via the broker on amsel.udk.ai when no direct path exists.

Re-broadcast

The edge on the other side verifies it, drops duplicates and replays, and broadcasts it into its LAN on the same port, as if the sensor stood next door.