Skip to main content

Port checking service for VM on Golem - Verify network connectivity for Golem providers

Project description

VM on Golem Port Checker Server

The Port Checker Server provides a critical network verification service for the Golem Network, ensuring providers have proper port accessibility before joining the network. It verifies both local and external port accessibility through a simple REST API.

System Architecture

graph TB
    subgraph Port Checker
        API[FastAPI Service]
        Check[Port Checker]
        Rate[Rate Limiter]
    end
    
    subgraph Providers
        P1[Provider 1]
        P2[Provider 2]
    end
    
    P1 & P2 -->|Verify Ports| API
    API --> Check
    Rate -->|Protect| API

How It Works

Port Verification Flow

sequenceDiagram
    participant P as Provider
    participant PC as Port Checker
    
    P->>PC: Request Port Check
    PC->>PC: Verify Local Binding
    PC->>PC: Test External Access
    PC-->>P: Verification Results
    Note over PC: Multiple retries with delay

The port checker service verifies port accessibility through:

  1. TCP connection attempts to specified ports
  2. Retry mechanism with configurable attempts
  3. Detailed error reporting
  4. Concurrent port checking

Installation

# Clone the repository
git clone https://github.com/golem/vm-on-golem.git
cd vm-on-golem/port-checker-server

# Install dependencies
poetry install

Configuration

The server can be configured through environment variables:

# Server Settings
PORT_CHECKER_HOST="0.0.0.0"
PORT_CHECKER_PORT=9000
PORT_CHECKER_DEBUG=false

# Port Check Settings
PORT_CHECK_RETRIES=3
PORT_CHECK_RETRY_DELAY=1.0
PORT_CHECK_TIMEOUT=5.0

API Reference

Check Ports

POST /check-ports

Request:

{
    "provider_ip": "192.168.1.100",
    "ports": [7466, 50800, 50801]
}

Response:

{
    "success": true,
    "results": {
        "7466": {
            "accessible": true,
            "error": null
        },
        "50800": {
            "accessible": true,
            "error": null
        },
        "50801": {
            "accessible": false,
            "error": "Connection refused"
        }
    },
    "message": "Successfully verified 2 out of 3 ports"
}

Health Check

GET /health

Response:

{
    "status": "ok"
}

Technical Details

Port Verification Process

  1. Request Validation

    • Valid IP address format
    • Port numbers within range (1-65535)
    • Maximum ports per request
  2. Verification Steps

    • TCP connection attempt
    • Configurable timeout
    • Multiple retry attempts
    • Delay between retries
  3. Response Details

    • Per-port accessibility status
    • Detailed error messages
    • Overall success indicator
    • Summary message

Error Handling

The API uses standardized error responses:

{
    "detail": {
        "code": "ERROR_CODE",
        "message": "Human readable message"
    }
}

Common error codes:

  • INVALID_IP: Invalid IP address format
  • INVALID_PORT: Port number out of range
  • CHECK_FAILED: Port check operation failed

Running the Server

Manual Start

# Start the server
poetry run python run.py

# The server will be available at:
# - API: http://localhost:9000
# - Health Check: http://localhost:9000/health
# - OpenAPI Docs: http://localhost:9000/docs

Running as a Systemd Service

The port checker can run as a systemd service for automatic startup and restart:

  1. Install the service file:
sudo cp golem-port-checker.service /etc/systemd/system/
sudo systemctl daemon-reload
  1. (Optional) Configure environment variables:
# Create environment file if you need custom settings
sudo mkdir -p /etc/golem
sudo nano /etc/golem/port-checker.env

# Example environment variables:
PORT_CHECKER_HOST=0.0.0.0
PORT_CHECKER_PORT=9000
PORT_CHECKER_DEBUG=false
  1. Enable and start the service:
sudo systemctl enable golem-port-checker
sudo systemctl start golem-port-checker
  1. Check service status:
sudo systemctl status golem-port-checker
  1. View service logs:
# View all logs
sudo journalctl -u golem-port-checker

# Follow new logs
sudo journalctl -u golem-port-checker -f

The service is configured to:

  • Start automatically on system boot
  • Restart automatically if it crashes
  • Log output to systemd journal

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run the tests
  5. Submit a pull request

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

golem_port_checker-0.1.16.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

golem_port_checker-0.1.16-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file golem_port_checker-0.1.16.tar.gz.

File metadata

  • Download URL: golem_port_checker-0.1.16.tar.gz
  • Upload date:
  • Size: 5.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.9.21 Linux/6.8.0-1021-azure

File hashes

Hashes for golem_port_checker-0.1.16.tar.gz
Algorithm Hash digest
SHA256 5bc0c5804c4f41360cfb61046ad69e51b38bd8cd1dccd4f22f5812491b233743
MD5 6e52dc320df13569b6f947a38976da70
BLAKE2b-256 30bfc2fc5ddfc47df433a39a9975828e2ddbac7c2c5f3f62d798f8aba8d17e60

See more details on using hashes here.

File details

Details for the file golem_port_checker-0.1.16-py3-none-any.whl.

File metadata

  • Download URL: golem_port_checker-0.1.16-py3-none-any.whl
  • Upload date:
  • Size: 5.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.9.21 Linux/6.8.0-1021-azure

File hashes

Hashes for golem_port_checker-0.1.16-py3-none-any.whl
Algorithm Hash digest
SHA256 dd71ad482d3e068958e3aede19383a3a89d9446578a2335cc80f05d04aab8625
MD5 5d5e191f598b34b3e27c5effe8005dc5
BLAKE2b-256 cef14d65d516c008a4ed028ce064e27657b988acae60a6a37d96321b34c89aed

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page