scsipub
Block devices over the internet.
One click. No account. No VPN. No VM.
scsipub serves disk images over iSCSI — the block storage protocol built into Linux, Windows, and macOS. Pick an image, get credentials, mount the remote disk in seconds.
Your writes stay yours
We don't inspect, index, or copy the bytes you put on your block device. Overlays are per-session and discarded when the session ends.
No tracking
No third-party cookies, no ad networks, no Google Analytics. The server logs page views with a daily-rotating hash — your IP is never stored.
Delete means delete
Session ends → overlay gone. Account deletion wipes email, password hash, API keys, and all sessions. Details on /privacy.
Pick an image
Choose from the catalog. Each session gets its own copy-on-write layer.
Get credentials
A unique IQN and CHAP username/secret are generated for your session.
Run iscsiadm --login
The disk appears as /dev/sdX. Mount, boot, or dd.
Netboot & rescue
Boot a rescue ISO or fresh installer on a bricked machine — no USB stick needed.
CI ephemeral disks
Fresh block device per build. Throw it away when the job finishes.
Remote dev environments
Attach your lab disk from anywhere. State persists across machines.
OS testing
Spin up a pristine OS image on real hardware without flashing anything.
Recent writing
all posts →-
2026-04-26
An ESP32 as a network-attached USB stick
ESP32-iSCSI-USB started as a way to wire bizarre lab equipment into the LAN. Plug a $5 board into a benchtop instrument, and the instrument sees a USB mass-storage device whose contents live on iSCSI.
-
2026-04-25
Netboot a Pi fleet from iSCSI
How a small Raspberry Pi 4 lab ended up running CI-built OS images over iSCSI instead of an SD-card flashing loop. PI4-iSCSI-shim is the boot bridge that makes it work — TFTP'd kernel, iSCSI rootfs, and three modes for getting the Pi out of its bootloader's way.
-
2026-04-23
How we run iSCSI over the internet
iSCSI was designed for the SAN inside a rack, not the open internet. Here's the pile of small decisions that makes scsipub work anyway — Ranch 2.x listeners, a BEAM process per session, COW overlays, Caddy-terminated TLS, multi-LUN + SCSI-3 Persistent Reservations for cluster software, and a handful of open-iscsi quirks that cost us a day each.
Available images
4 availablealpine-3.20
61.0 MB
Minimal Linux. Fast boot, busybox + apk. Good for shell access and scripting. Has open-iscsi in repos.
Memtest86plus-7.20
5.9 MB
Memory diagnostics. Boots directly into RAM test — no OS. Classic network boot use case.
Debian-12-Cloud
3.0 GB
Debian 12 cloud image. Cloud-init ready, stable base for development. Same image used in CI testing.
alpine-3.21
63.0 MB
Blank scratch disk
Empty 64.0 MB — reads return zeros, writes fill up to your tier's limit. Good for scratch partitions, filesystem experiments, or dd targets.
No-setup targets
These targets accept AuthMethod=None — the initiator
just connects. Each TCP connection is its own ephemeral session; overlay is discarded on
disconnect. Size cap per session matches the free-unreg tier write limit. open-iscsi doesn't speak TLS natively, so the TLS recipe below terminates it locally with stunnel and has iscsiadm connect to loopback.
Blank disk
iqn.2025-01.pub.scsipub:blank
# One-time: install stunnel
sudo apt install -y stunnel4 # Debian/Ubuntu
# sudo apk add stunnel # Alpine
# Start a local TLS tunnel (keep this shell open, or run as a service)
cat > /tmp/scsipub-stunnel.conf <<EOF
pid =
foreground = yes
[scsipub-tls]
client = yes
accept = 127.0.0.1:3260
connect = scsipub.com:3261
verifyChain = yes
CApath = /etc/ssl/certs
checkHost = scsipub.com
EOF
sudo stunnel /tmp/scsipub-stunnel.conf &
# Point iscsiadm at the local tunnel
iscsiadm -m node -T iqn.2025-01.pub.scsipub:blank -p 127.0.0.1:3260 -o new
iscsiadm -m node -T iqn.2025-01.pub.scsipub:blank -p 127.0.0.1:3260 \
-o update -n node.session.auth.authmethod -v None
iscsiadm -m node -T iqn.2025-01.pub.scsipub:blank -p 127.0.0.1:3260 --login
alpine-3.20
iqn.2025-01.pub.scsipub:image.alpine-3.20
# One-time: install stunnel
sudo apt install -y stunnel4 # Debian/Ubuntu
# sudo apk add stunnel # Alpine
# Start a local TLS tunnel (keep this shell open, or run as a service)
cat > /tmp/scsipub-stunnel.conf <<EOF
pid =
foreground = yes
[scsipub-tls]
client = yes
accept = 127.0.0.1:3260
connect = scsipub.com:3261
verifyChain = yes
CApath = /etc/ssl/certs
checkHost = scsipub.com
EOF
sudo stunnel /tmp/scsipub-stunnel.conf &
# Point iscsiadm at the local tunnel
iscsiadm -m node -T iqn.2025-01.pub.scsipub:image.alpine-3.20 -p 127.0.0.1:3260 -o new
iscsiadm -m node -T iqn.2025-01.pub.scsipub:image.alpine-3.20 -p 127.0.0.1:3260 \
-o update -n node.session.auth.authmethod -v None
iscsiadm -m node -T iqn.2025-01.pub.scsipub:image.alpine-3.20 -p 127.0.0.1:3260 --login
Memtest86plus-7.20
iqn.2025-01.pub.scsipub:image.Memtest86plus-7.20
# One-time: install stunnel
sudo apt install -y stunnel4 # Debian/Ubuntu
# sudo apk add stunnel # Alpine
# Start a local TLS tunnel (keep this shell open, or run as a service)
cat > /tmp/scsipub-stunnel.conf <<EOF
pid =
foreground = yes
[scsipub-tls]
client = yes
accept = 127.0.0.1:3260
connect = scsipub.com:3261
verifyChain = yes
CApath = /etc/ssl/certs
checkHost = scsipub.com
EOF
sudo stunnel /tmp/scsipub-stunnel.conf &
# Point iscsiadm at the local tunnel
iscsiadm -m node -T iqn.2025-01.pub.scsipub:image.Memtest86plus-7.20 -p 127.0.0.1:3260 -o new
iscsiadm -m node -T iqn.2025-01.pub.scsipub:image.Memtest86plus-7.20 -p 127.0.0.1:3260 \
-o update -n node.session.auth.authmethod -v None
iscsiadm -m node -T iqn.2025-01.pub.scsipub:image.Memtest86plus-7.20 -p 127.0.0.1:3260 --login
Debian-12-Cloud
iqn.2025-01.pub.scsipub:image.Debian-12-Cloud
# One-time: install stunnel
sudo apt install -y stunnel4 # Debian/Ubuntu
# sudo apk add stunnel # Alpine
# Start a local TLS tunnel (keep this shell open, or run as a service)
cat > /tmp/scsipub-stunnel.conf <<EOF
pid =
foreground = yes
[scsipub-tls]
client = yes
accept = 127.0.0.1:3260
connect = scsipub.com:3261
verifyChain = yes
CApath = /etc/ssl/certs
checkHost = scsipub.com
EOF
sudo stunnel /tmp/scsipub-stunnel.conf &
# Point iscsiadm at the local tunnel
iscsiadm -m node -T iqn.2025-01.pub.scsipub:image.Debian-12-Cloud -p 127.0.0.1:3260 -o new
iscsiadm -m node -T iqn.2025-01.pub.scsipub:image.Debian-12-Cloud -p 127.0.0.1:3260 \
-o update -n node.session.auth.authmethod -v None
iscsiadm -m node -T iqn.2025-01.pub.scsipub:image.Debian-12-Cloud -p 127.0.0.1:3260 --login
Hardware initiators
for devices that can't speak iSCSI nativelyESP32-iSCSI-USB
Turn an ESP32-S3 into a wireless iSCSI-to-USB bridge. The device logs into a target over WiFi and presents it to any USB host as a flash drive — no drivers on the host side.
Web flasher & docs →PI4-iSCSI-shim
Netboot Raspberry Pi 3/4/5 directly into an iSCSI target — pivot_root, kexec, or USB-disk modes. TFTP kernel + bootstrap SD image; no local OS needed on the Pi.
Downloads & setup →Not ready? Keep in touch.
Occasional updates — new images, feature changes, platform news. No promotional emails, unsubscribe in one click.