Overview

Ethernet Gateway is a standalone, retro-themed server written in Rust that bridges vintage and modern computing. It provides telnet and SSH access to a full-featured gateway with XMODEM file transfer, SSH and telnet proxying, an AI chat client, a text-mode web browser, weather reports, and Hayes-compatible serial modem emulation.

Designed to work with hardware as old as the Commodore 64 and CP/M machines while remaining fully functional on modern ANSI terminals, Ethernet Gateway adapts its display automatically to the capabilities of each connected client.

Download: Pre-built binaries are available on the GitHub Releases page.

Features
[F] File Transfer Upload, download, and delete files via XMODEM, XMODEM-1K, YMODEM, or ZMODEM (batch).
[S] SSH Gateway Proxy connections to remote SSH servers with host key verification.
[T] Telnet Gateway Proxy connections to remote telnet servers.
[A] AI Chat Conversational AI powered by Groq (llama-3.3-70b-versatile). Free API key.
[B] Simple Browser Text-mode web browser supporting HTTP, HTTPS, and Gopher with forms and bookmarks.
[W] Weather Current conditions and 3-day forecast by US zip code via Open-Meteo.
[C] Configuration Full server configuration from the terminal. Changes are saved immediately.
Additional Features: GUI configuration console with live log output, Hayes AT-compatible serial modem emulation, optional authentication with per-IP lockout, Ed25519 SSH server, and POSIX signal handling for graceful shutdown.

Getting Started
Build from Source

Prerequisites

A C toolchain and a few system libraries are required to build from source. On Debian/Ubuntu:

sudo apt install -y build-essential pkg-config cmake curl libudev-dev

See the README for Fedora, Arch, macOS, and Windows instructions.

Compiling

  1. Install Rust: rustup.rs
  2. Clone the repository
  3. Build a release binary: cargo build --release
  4. The binary is at target/release/ethernet-gateway

An AppImage is also available for x86_64 Linux systems.

First Run

When launched for the first time, Ethernet Gateway creates a configuration file (egateway.conf) and the transfer/ directory automatically.

$ ./ethernet-gateway
Ethernet Gateway v0.4.0
Author: Ricky Bryce

Created default configuration: egateway.conf
Config: telnet=true, port=2323, security=false, transfer_dir=transfer
Tip: The GUI console window opens by default. Closing it does not stop the server — press Ctrl-C to stop. Set enable_console = false for headless operation.
Connecting

Telnet (default port 2323)

  1. Ensure telnet is installed on your system
  2. Connect: telnet localhost 2323
  3. Press backspace when prompted (terminal auto-detection)
  4. Answer the color prompt (Y/N)

SSH (default port 2222, disabled by default)

  1. Enable SSH in the configuration
  2. Connect: ssh -p 2222 admin@localhost
  3. Enter the SSH password (default: changeme)

Terminal Types

Terminal type is auto-detected by examining the byte sent when the user presses backspace.

PETSCII

Commodore 64/128. 40 columns, 25 rows. Backspace = 0x14. Escape: or _ key. Automatic case-swapping for the PETSCII charset.

ANSI

Modern terminals. 80 columns, 24 rows. Backspace = 0x08 or 0x7F. Full ANSI color and formatting. Escape: Esc key.

ASCII

Generic terminals. 80 columns, 24 rows. Any other backspace byte. No color output. Escape: Esc key.

Color: After terminal detection, you are asked whether your terminal supports color. No default is assumed — you must answer Y or N. All menus and text fit within the 40-column limit for PETSCII terminals.


File Transfer

Upload, download, and manage files on the server using XMODEM, XMODEM-1K, YMODEM, or ZMODEM. The gateway supports the full Forsberg ZMODEM spec including batch sends, batch receives, and ZSKIP.

Uploading a File

Steps

  1. Press U to begin an upload
  2. Enter the filename when prompted (max 64 characters; letters, digits, dots, hyphens, underscores; cannot start with a dot; cannot contain ..)
  3. If the file already exists, confirm overwrite with Y
  4. On the SELECT UPLOAD PROTOCOL screen press X (XMODEM/YMODEM, block size + CRC mode + YMODEM block-0 header auto-detected) or Z (ZMODEM)
  5. The server waits up to 45 seconds for your terminal to begin sending — tunable per protocol via xmodem_negotiation_timeout (XMODEM / XMODEM-1K / YMODEM) or zmodem_negotiation_timeout (ZMODEM)
  6. In your terminal client, start the matching send — e.g. ExtraPutty's File Transfer › Zmodem › Send, SyncTerm's Ctrl-PgUp, or any XMODEM/YMODEM “Send File” dialog
  7. For a ZMODEM batch, the first file is saved under the name you entered; any additional files the sender transmits are saved under the sender's own filename (after path-safety validation — colliding names are auto-skipped via ZSKIP)
Downloading a File

Steps

  1. Press D to begin a download
  2. A paginated list of files is displayed — enter the file number
  3. On the SELECT PROTOCOL screen press X (XMODEM, 128-byte blocks), 1 (XMODEM-1K, 1024-byte blocks with SOH fallback), Y (YMODEM, filename + size header), or Z (ZMODEM, auto-starts in most modern terminals)
  4. Start the matching receive in your terminal and choose where to save the file locally
  5. The file is transmitted and the server reports bytes / blocks / elapsed time on completion
Directory Navigation

Press C to change directories. Subdirectories within the configured transfer directory are listed. Enter .. to go up one level. All paths are canonicalized to prevent symlink escapes.

XMODEM Protocol Details
ParameterValue
Block size128 bytes
Error detectionCRC-16 (preferred) with checksum fallback
CRC polynomialCCITT 0x1021
Maximum file size8 MB
Negotiation timeout45 seconds (configurable, 1–300s)
Block timeout20 seconds (configurable, 1–120s)
Max retries per block10 (configurable, 1–100)
Padding byte0x1A (SUB), stripped on receive
IAC & CR-NUL Transforms

Telnet NVT (RFC 854) reserves byte 0xFF as the IAC command marker and requires bare CR (0x0D) to be sent as CR-NUL. Strict clients (PuTTY / ExtraPuTTY, Tera Term, C-Kermit) follow these rules; many retro clients (IMP8, CCGMS, StrikeTerm, AltairDuino firmware) just blast raw bytes. We can't tell for sure which one you're running, so the default is set from the detected terminal type — ASCII and PETSCII get escaping off, ANSI gets it on. That's right for the overwhelming majority of real-world combinations, but if a transfer fails repeatedly with bad-block / CRC errors, press I in the File Transfer menu to flip it the other way and retry.

Quick check: if you see consistent block-CRC failures in one direction, the two sides disagree on escaping. Toggle I and retry.

SSH & Telnet Gateways
SSH Gateway

Connect to remote SSH servers through Ethernet Gateway. Press S from the main menu.

Connecting

  1. At the first prompt, press K to view the gateway's public key (see Public-Key Authentication below), or any other key to continue
  2. Enter the remote server hostname or IP address
  3. Enter the port (default: 22)
  4. Enter your username for the remote server
  5. If the host key is unknown, confirm the SHA-256 fingerprint; if it has changed, review the warning carefully before accepting
  6. The gateway attempts public-key authentication first; if the remote accepts the gateway's key, you skip straight to the shell
  7. If the pubkey is not accepted, you are prompted for a password
  8. Once authenticated, you have a full interactive shell on the remote server
  9. Press Esc twice to disconnect and return to the main menu

Public-Key Authentication

  1. On first outbound dial, the gateway auto-generates an Ed25519 client keypair and stores it as ethernet_gateway_ssh_key (0o600 on Unix)
  2. From the SSH Gateway menu, press K — the public key is displayed in OpenSSH ssh-ed25519 AAAA… format
  3. Copy that single line into the remote server's ~/.ssh/authorized_keys
  4. Future dials to that host skip the password prompt entirely
Host Key Verification: Known remote-server host keys are stored in gateway_hosts (in the gateway's working directory, 0o600 on Unix). This is independent of any OpenSSH ~/.ssh/known_hosts you may have. Trust decisions (first-time accept, key update, key rejection) are written to the server log for auditability.
Three SSH key files exist, do not confuse them:
  • ethernet_ssh_host_key — this gateway's own SSH server host key (used when clients connect to us over SSH)
  • ethernet_gateway_ssh_key — this gateway's outgoing client keypair (used when we dial out to remote SSH servers)
  • gateway_hosts — trusted remote-server fingerprints (analogous to OpenSSH's known_hosts)

Per-IP lockout is shared with the telnet server: after 3 failed authentication attempts in 5 minutes, the source IP is blocked for 5 minutes across both protocols.

ANSI escape sequences from the remote server are automatically stripped when connected from a PETSCII or ASCII terminal, ensuring readable output on vintage hardware. The PTY is sized 40×25 for PETSCII and 80×24 for ANSI/ASCII.

Telnet Gateway

Connect to remote telnet servers through Ethernet Gateway. Press T from the main menu.

Connecting

  1. At the mode prompt, press T to toggle between Telnet protocol and Raw TCP mode (see Protocol Modes below), or any other key to continue
  2. Enter the remote host and port (default 23)
  3. Session bytes are proxied between your terminal and the remote
  4. Press Esc twice to disconnect

Protocol Modes

  • Telnet protocol (default) — the gateway parses IAC framing, unescapes IAC IAC to literal 0xFF data, accepts peer-initiated WILL ECHO cooperatively, and refuses other options with DONT/WONT. Works with any RFC-compliant telnet server.
  • Cooperative (telnet_gateway_negotiate = true) — adds proactive offers of WILL TTYPE, WILL NAWS, and DO ECHO at connect, plus mid-session NAWS forwarding when you resize. Makes modern BBSes (Synchronet, Mystic) render at your actual window size.
  • Raw TCP (toggled with T, persisted to egateway.conf) — disables the telnet IAC layer entirely. Use this when dialing destinations that aren't really telnet: some MUDs, hand-rolled BBS software, or custom services on port 23. Bytes to your local client are still IAC-escaped so a stray 0xFF doesn't confuse your telnet client.
RFC compliance: In telnet-protocol mode the gateway uses the full RFC 1143 six-state Q-method for option negotiation and caps subnegotiation bodies at 8 KiB to prevent malicious remotes from exhausting memory. It never stalls waiting for a reply, so silent or partially-compliant remotes still work.

AI Chat

Conversational AI powered by Groq's llama-3.3-70b-versatile model.

Setup

Getting an API Key

  1. Visit console.groq.com and create a free account
  2. Generate an API key from the Groq dashboard
  3. In Ethernet Gateway, go to Configuration > Other Settings
  4. Enter your API key when prompted
Usage

Chatting

  1. Press A from the main menu
  2. Type your question and press Enter
  3. The response is displayed with pagination
  4. Use P/N to page through long responses
  5. Ask follow-up questions or press Q to exit
Details: Responses are word-wrapped to fit your terminal width (40 columns for PETSCII, 80 for ANSI/ASCII). The API timeout is 30 seconds per request. Maximum response size is 1 MB.

Simple Browser

Text-mode web browser supporting HTTP, HTTPS, and Gopher.

[G] Go / Search Enter a URL or search term to navigate.
[P/N] Page Nav Previous / Next page of the current document.
[T] Top Jump to the top of the current page.
[E] End Jump to the end of the current page.
[S] Find Search within the current page.
[L] Links List numbered links on the page and follow one by number.
[F] Forms Interact with HTML forms (text, dropdown, checkbox, radio, textarea).
[K] Bookmarks Save and load bookmarks (up to 100, stored in bookmarks.txt).
[B] Back Navigate back through browsing history.
[H] Help Display browser help.
[Q] Quit Exit the browser and return to the main menu.
Limits: Maximum response body is 1 MB. HTTP timeout is 15 seconds. Maximum rendered lines per page is 5000. Page width adapts to terminal (33 columns for PETSCII, 73+ for ANSI/ASCII). HTTPS falls back to HTTP automatically if TLS fails.

Weather

Current conditions and 3-day forecast for any US zip code.

Press W from the main menu. Weather data is provided by the Open-Meteo API (free, no API key required). Your last-used zip code is saved for convenience.

Display Includes

  • Current: Temperature (°F), "feels like", humidity %, wind speed and 16-point compass direction
  • Forecast: 3-day outlook with daily high/low temperatures and conditions

Configuration

Press C from the main menu. Changes are saved to egateway.conf immediately.

Security Settings

Authentication is disabled by default. When disabled, only private/loopback IPs are allowed, and gateway addresses (*.*.*.1) are rejected.

SettingDefaultDescription
Security enabledfalseRequire login authentication
Telnet usernameadminTelnet login username
Telnet passwordchangemeTelnet login password
SSH usernameadminSSH login username (independent)
SSH passwordchangemeSSH login password (independent)
Important: The default password is changeme. If you enable security, change the password immediately. After 3 failed login attempts from the same IP, that address is locked out for 5 minutes.
Server Configuration
SettingDefaultDescription
Telnet enabledtrueEnable/disable the telnet server
Telnet port2323TCP port for telnet connections
SSH enabledfalseEnable/disable the SSH server
SSH port2222TCP port for SSH connections
Max sessions50Maximum concurrent connections
Idle timeout900s (15 min)Disconnect after inactivity (0 = disabled)
File Transfer Settings

In the telnet menu, Configuration › F File Transfer opens a submenu with the shared transfer directory plus per-protocol pages for X XMODEM, Y YMODEM, and Z ZMODEM. In the GUI, the same fields live under the File Transfer frame's More... popup.

Shared
SettingDefaultRange
Transfer directorytransfer
XMODEM / XMODEM-1K / YMODEM

These three protocols share the same xmodem_* config keys because they use the same send/receive code path. The XMODEM and YMODEM settings pages edit the same values; the page calls out the shared-family behavior so operators aren't surprised when editing either page changes the other.

SettingDefaultRange
Negotiation timeout45s1–300 seconds
Retry interval7s1–60 seconds (C / NAK poke cadence; XMODEM/YMODEM spec suggests ~10)
Block timeout20s1–120 seconds
Max retries101–100
ZMODEM

Independent tunables. These values used to be hardcoded constants in the ZMODEM implementation; they now live in egateway.conf so operators can tune them per environment.

SettingDefaultRange
Negotiation timeout45s1–300 seconds (ZRQINIT / ZRINIT handshake)
Retry interval5s1–60 seconds (ZRINIT / ZRQINIT re-send gap)
Frame timeout30s1–120 seconds (per header / subpacket read)
Max retries101–100 (ZRQINIT / ZRPOS / ZDATA caps)
Modem Emulator Settings
SettingDefaultDescription
Serial port(none)Device path (e.g. /dev/ttyUSB0, COM3)
Baud rate9600Serial line speed
Data bits85, 6, 7, or 8
ParityNoneNone, Odd, or Even
Stop bits11 or 2
Flow controlNoneNone, Software, or Hardware
Other Settings
SettingDefaultDescription
Groq API key(empty)API key for AI Chat (free at console.groq.com)
Browser homepagehttp://telnetbible.comDefault URL for the Simple Browser
Weather zip code(empty)5-digit US zip code for weather
Verbose loggingfalseEnable detailed XMODEM protocol logging
GUI consoletrueShow the GUI window on startup
Configuration File

The file egateway.conf uses a simple key = value format. Lines beginning with # are comments. The file is auto-created if missing and rewritten to ensure all keys are present.

# Ethernet Gateway Configuration
telnet_enabled = true
telnet_port = 2323
security_enabled = false
username = admin
password = changeme
transfer_dir = transfer
max_sessions = 50
idle_timeout_secs = 900
ssh_enabled = false
ssh_port = 2222
ssh_username = admin
ssh_password = changeme
groq_api_key =
browser_homepage = http://telnetbible.com
weather_zip =
verbose = false
enable_console = true
serial_enabled = false
serial_port =
serial_baud = 9600
serial_databits = 8
serial_parity = none
serial_stopbits = 1
serial_flowcontrol = none
xmodem_negotiation_timeout = 45
xmodem_block_timeout = 20
xmodem_max_retries = 10
xmodem_negotiation_retry_interval = 7
zmodem_negotiation_timeout = 45
zmodem_frame_timeout = 30
zmodem_max_retries = 10
zmodem_negotiation_retry_interval = 5

SSH Server

Optional encrypted access providing the same features as the telnet interface.

DetailValue
Default port2222
Host key algorithmEd25519
Host key fileethernet_ssh_host_key
Key formatOpenSSH
File permissions0600 (Unix)
AuthenticationPassword only
CredentialsIndependent from telnet

The Ed25519 host key is automatically generated on first use. The SSH server has its own username and password, configured separately from the telnet credentials.


Serial Modem Emulator

Hayes AT-compatible modem emulation on a physical serial port.

Connect vintage computers with serial interfaces to Ethernet Gateway. The emulator accepts standard AT commands and "dials" TCP connections to remote hosts. Enable it in Configuration > Modem Emulator Settings.

AT Command Reference
CommandDescription
ATConnection test (returns OK)
A/Repeat last command (no AT prefix, no CR required)
ATZReset to stored configuration
AT&FFactory reset (gateway-friendly defaults)
AT&WSave current settings to config file
AT&VDisplay current modem configuration
ATI / ATI0ATI7Identification variants: product code, ROM checksum, ROM test, firmware, OEM, country, diagnostics, product info
ATE0 / ATE1Disable / enable command echo
ATV0 / ATV1Numeric / verbose result codes
ATQ0 / ATQ1Enable / suppress result codes (quiet mode)
ATX0ATX4Result-code verbosity (X4 default: full extended set with baud in CONNECT)
AT&C0 / AT&C1DCD always on / DCD reflects carrier (default)
AT&D0AT&D3DTR handling (0 = ignore, gateway default)
AT&K0AT&K4Modem-layer flow control (0 = none, gateway default)
ATHHang up / close connection
ATOReturn to online mode (after +++ escape)
ATAAnswer incoming call
ATDT host:portDial (tone) — TCP connect to host
ATDP host:portDial (pulse) — TCP connect to host
ATD host:portDial (generic) — TCP connect to host
ATDLRedial last number
ATDS / ATDSnDial stored number from slot n (0–3; default 0)
AT&Zn=sStore phone number or host s in slot n (0–3). Persisted with AT&W.
AT?Show AT command help
ATS?Show S-register help
ATSn?Query S-register n (range S0–S26)
ATSn=vSet S-register n to value v
Dial-string modifiers (phone-number context only): , pauses for S8 seconds, W adds S6 seconds (wait for dial tone), ; returns to command mode after connect, * and # are preserved as DTMF digits, P/T/@/! are accepted and ignored. Hostnames like pine.example.com are not stripped because they don't match the phone-digit pattern.
Unrecognized commands (ATB, ATC, ATL, ATM, AT&B, AT&G, AT&J, AT&S, AT&T, AT&Y, etc.) return OK so legacy init strings don't halt mid-setup on commands we can't implement in a software emulator.
Escape Sequence: While connected (online mode), send +++ with appropriate guard time pauses to return to command mode without disconnecting. The escape character and guard time are configurable via S-registers S2 and S12. Use ATO to return to online mode.
S-Register Reference
RegDefaultDescription
S05Auto-answer ring count (0 = disabled)
S10Ring counter (read-only)
S243Escape character (ASCII 43 = '+')
S313Carriage return character
S410Line feed character
S58Backspace character
S62Wait for dial tone (seconds)
S715Wait for carrier (seconds) — Hayes default is 50; reduced here so failed TCP dials return quickly. Capped internally at 60s.
S82Comma pause time (seconds)
S96Carrier detect response (1/10 sec)
S1014Carrier loss disconnect (1/10 sec)
S1195DTMF tone duration (milliseconds)
S1250Escape guard time (1/50 sec; 50 = 1 second)
S13–S240Reserved. Stored and persisted so legacy init strings that probe these registers don't halt with ERROR, but they have no effect on the emulator.
S255DTR detect time (1/100 sec). Reserved — we don't drive DTR.
S261RTS-to-CTS delay (1/100 sec). Reserved — we don't drive RTS/CTS.
Keep S3, S4, and S5 at distinct values. Command-mode line editing dispatches on the raw byte: the CR branch is checked before BS, so setting S3 = 8 would cause backspace to terminate the line. Leaving S3/S4/S5 at their Hayes defaults (13/10/8) avoids this.

GUI Console

Graphical configuration and monitoring window built with egui.

When enable_console = true, the GUI window opens automatically on startup. It provides a retro amber-on-dark theme with real-time server management.

Configuration Editor Modify all server settings in real time with immediate save to egateway.conf.
Console Output Scrolling log display (up to 2000 lines) showing connections, transfers, and server activity.
Serial Port Detection Automatically discovers available serial ports on the system.
Server Info Displays local IP addresses and active services.
Settings Sync Configuration changes from telnet/SSH sessions are reflected in the GUI.
Tip: Closing the GUI window does not stop the server. It continues running in headless mode. Press Ctrl-C in the terminal to stop.

Security & Networking
IP Restrictions (Security Disabled)

When security is disabled (the default), Ethernet Gateway restricts access to private and loopback IP ranges only:

Allowed IP Ranges

  • 10.0.0.0/8 — Private (Class A)
  • 172.16.0.0/12 — Private (Class B)
  • 192.168.0.0/16 — Private (Class C)
  • 127.0.0.0/8 — Loopback
  • 169.254.0.0/16 — Link-local

Gateway addresses (*.*.*.1) are rejected except for loopback, preventing accidental exposure on network edges.

Authentication Lockout
PolicyValue
Max failed attempts3 per IP address
Lockout duration5 minutes
Protocol scopeShared across telnet and SSH — an attacker can't bounce between the two to reset the counter
Counter resetAfter lockout expires or successful login
Credential comparisonConstant-time (timing attack resistant)
File Path Security

All file operations are restricted to the configured transfer directory. Filenames are validated to prevent path traversal. Directory changes are canonicalized to prevent symlink escapes.

Sensitive File Protection

On Unix, the following files are written with mode 0o600 (owner read/write only) so other local users can't read them:

  • egateway.conf — contains telnet/SSH passwords and the Groq API key
  • ethernet_ssh_host_key — the gateway's SSH server private host key
  • ethernet_gateway_ssh_key — the gateway's outgoing SSH client key
  • gateway_hosts — remote-server host keys (privacy: reveals dial history)
  • dialup.conf — phone-to-host mapping

On Windows, NTFS ACLs are inherited from the parent directory. For multi-user Windows boxes, place the binary in a per-user folder (e.g. under %USERPROFILE%) so the ACL inherits owner-only access.

Telnet Gateway DoS Protection

Subnegotiation (IAC SB … IAC SE) bodies from remote servers are capped at 8 KiB to prevent a malicious peer from exhausting memory by sending a huge SB without a terminating IAC SE. The state machine still resyncs on the eventual terminator so the session isn't corrupted.

Signal Handling

Graceful Shutdown

  • SIGINT (Ctrl-C) — Graceful shutdown
  • SIGTERM — Graceful shutdown
  • SIGHUP — Graceful shutdown (Unix only)

Connected sessions receive a shutdown notification before the server stops.


Troubleshooting
Terminal Detection

If your terminal is detected as the wrong type, the troubleshooting feature (press R from the main menu) diagnoses input issues by showing exactly what bytes your terminal sends.

File Transfer Problems
SymptomSolution
Transfer times out before starting Pick the same protocol on both sides: the gateway's upload menu expects either XMODEM/YMODEM or ZMODEM, and the download menu lets you select XMODEM, XMODEM-1K, YMODEM, or ZMODEM explicitly. If your terminal takes a while to open its Send/Receive dialog, increase xmodem_negotiation_timeout (XMODEM / XMODEM-1K / YMODEM, default 45 s) or zmodem_negotiation_timeout (ZMODEM, default 45 s) in egateway.conf.
Transfer fails partway through For XMODEM/XMODEM-1K/YMODEM raise xmodem_block_timeout and xmodem_max_retries. For ZMODEM raise zmodem_frame_timeout and zmodem_max_retries. Check for a noisy or slow connection.
Consistent block-CRC failures in the same direction The two sides disagree on IAC / CR-NUL escaping. Press I in the File Transfer menu to flip and retry. Not a concern on SSH.
File exceeds size limit XMODEM is limited to 8 MB. Use a different method for larger files.
Connection Problems
SymptomSolution
"Connection refused" from non-private IP Enable security for public IP access, or connect from a private network.
Locked out after failed logins Wait 5 minutes for the lockout to expire.
Disconnected unexpectedly Check idle timeout setting. Set to 0 to disable auto-disconnect.
AI Chat: "No API key configured" Set up a Groq API key in Configuration > Other Settings.
Verbose Logging

Enable verbose mode in Configuration > Other Settings to see detailed XMODEM protocol diagnostics. Useful for debugging file transfer issues.


About the Author
Ricky Bryce

Ricky Bryce

Creator and sole developer of Ethernet Gateway. A lifelong enthusiast of retrocomputing and telecommunications, Ricky built this project to bridge the gap between vintage hardware and modern network services.

Ethernet Gateway is released under the GNU General Public License v3.0 (or later).


Screenshot

The Ethernet Gateway GUI console in action.

Ethernet Gateway GUI Console