2025-07-30 20:29:24 -04:00
2026-03-30 20:01:19 -04:00
2025-07-30 20:29:24 -04:00
2025-07-30 20:29:24 -04:00
2026-03-30 21:11:33 -04:00

infinite-noodle

infinite-noodle is a small Go service that combines:

  • a web UI for viewing configured TCP proxies
  • a Bitcask-backed data store for persisted proxy definitions
  • a TCP proxy runner powered by inet.af/tcpproxy

This README is written for working in a GitHub Codespace.

What It Does

Each "noodle" is a TCP forwarding rule with:

  • a name
  • an allowed source (All or a specific source IP)
  • a listen port
  • a destination host
  • a destination port
  • an expiration duration
  • an up/down state

When the app starts, it loads saved noodles from the local database and starts any active proxy routes. It also serves a web UI for creating, pausing, resuming, and deleting them.

Current State

The project is functional enough to:

  • start the web app
  • load stored proxy definitions from ./infinite.db
  • create new noodles from the UI
  • run active TCP proxies
  • restrict a proxy to a specific source IP
  • update expiration values in the database every second while a proxy is active
  • close and delete expired noodles automatically
  • pause a noodle from the UI without decrementing its expiration
  • delete existing noodles from the UI

Current limitations:

  • there is no REST API; management is currently through the server-rendered UI
  • proxy routing is TCP only in the current code path

Running In A Codespace

This repo expects a Go toolchain to be available in the Codespace. If it is missing, install or add Go first.

Start the app:

go run ./cmd/infinite-noodle

Default runtime settings:

  • host: 0.0.0.0
  • web UI port: 7878
  • database path: ./infinite.db

Open the app in the browser from the forwarded port for 7878.

You can also override the defaults:

go run ./cmd/infinite-noodle -host 0.0.0.0 -port 7878 -data ./infinite.db

Available flags:

  • -host: host/interface to bind the web server to
  • -port: web server port
  • -data: path to the Bitcask database directory
  • -test: seeds the database with sample noodles on startup

UI Behavior

The main table includes an add row for creating a proxy with:

  • Name
  • Allow From: accepts All or a specific IP address, with the current client IP suggested
  • Listen Port
  • Destination Port
  • Destination Host
  • Expiration: parsed as a Go time.Duration such as 30s, 5m, or 1h15m

The Status column is a checkbox:

  • checked: the proxy is active and the expiration counts down
  • unchecked: the proxy is closed and the expiration is paused

The expiration value is shown as a live countdown in the browser. When it reaches zero, the row is removed from the UI and the noodle is deleted from the database.

Codespaces Port Notes

In Codespaces, you will usually need to forward:

  • 7878 for the web UI
  • any listen ports used by active noodles

Example:

  • if a noodle listens on 5555, forward port 5555
  • if it proxies to another service running inside the Codespace on 6666, that destination only needs forwarding if you also want direct browser or external access to it

Quick Local Proxy Demo

The repo includes simple Python test scripts in test/server.py and test/client.py.

Typical flow:

  1. Run the app with go run ./cmd/infinite-noodle
  2. Start the test echo server on 127.0.0.1:6666
  3. Add a noodle in the UI that listens on 5555 and forwards to 127.0.0.1:6666
  4. Run the test client, which connects to 127.0.0.1:5555

Building Binaries

The repo includes build.sh, which builds binaries for:

  • Linux amd64
  • macOS arm64
  • macOS amd64
  • Windows arm64
  • Windows amd64

Run:

sh build.sh

Artifacts are written under ./target/.

To build only the Linux amd64 target:

GOOS=linux GOARCH=amd64 go build -buildvcs=false -o target/infinite-noodle.net-proxy ./cmd/infinite-noodle

Important Files

Verification Note

The reorganized project layout was verified with go test ./... and go build ./... in this workspace.

Description
No description provided
Readme 2.7 MiB
Languages
Go 62.2%
HTML 36.8%
Shell 1%