Skip to main content

A socket proxy with wake-on-lan feature.

Project description

wol-socket-proxy

A socket proxy with wake-on-lan and IPMI power control feature.

It can forward TCP(bidirectional) and UDP(send-only) traffic from local machine to remote machine, and:

  • send a magic packet to wake it (wake-on-lan)
  • invoke IPMI power on to wake it

before forwarding traffic if the remote machine does not respond to ICMP ping or some HTTP URL.

Requirements

Python 3.12+

The remote machine must accept and respond to ICMP ping requests if you use ping method.

Usage

You can install it from PyPI or use a prebuilt docker image.

Install from PyPI

Simply install it:

pip install wolsocketproxy

Then create a config file:

cp wolsocketproxy.conf.example /etc/wolsocketproxy.conf

Modify the config file as your requirements.

Finally, run it:

wolsocketproxy

Use prebuilt docker image

See docker/docker-compose.yml for more details.

Config

The wolsocketproxy.conf has the following structure:

{
    // NOTE: Comments are not allowed in actual config file

    // Define machines
    "machines": {
        "some-server": {
            "ip_address": "192.168.1.124",                              // the IP address of this machine, optional
            "mac_address": "11:22:33:44:55:66",                         // The MAC address of this machine, optional
            "wake_up_method": "ipmi",                                   // How to wake up this machine
                                                                        //   "ipmi" - You must specify "ipmi_config_name"
                                                                        //   "wol" - You must specify "mac_address"
            "ipmi_config_name": "some-server-ipmi",                     // IPMI config of this machine, must match what defined in "ipmi_configs"
            "online_check_method": "http",                              // How to check this machine is online
                                                                        //   "http" - You must specify "online_check_http_url"
                                                                        //   "ping" - You must specify "ip_address"
            "online_check_http_url": "http://192.168.1.124/health",     // The URL used to check if machine is online, optional
            "online_check_timeout": 300,                                // Timeout when checking machine is online, seconds, optional, default is 60
            "online_check_http_expected_code": 200,                     // Expected HTTP status code when using "http" method, optional, default is 200
            "ipmi_force_reset_if_power_up_failed": true,                // Use IPMI power reset if this machine is not online after timeout, optional, default is false
            "ipmi_max_reset_try_count": 3,                              // Max IPMI power reset retry count before giving-up, optional, default is 3
            "keep_alive_mode": true,                                    // Indicates whether this machine has a keep-alive daemon, optional, default is false
                                                                        // If you enable this, wolsocketproxy will send a request when there is any traffic
            "keep_alive_mode_base_url": "http://192.168.1.124:8080"     // Keep-alive daemon provided URL, optional
        },
        // ... more machines ...
    },

    // Define forwarding routes
    "routes": [
        {
            "local_address": "0.0.0.0",              // The local address to listen
            "local_port": 12345,                     // The local port to listen
            "target_machine_name": "some-server",    // The target machine name, must match what defined in "machines"
            "target_address": "192.168.1.124",       // The target address forwarding to
            "target_port": 12345,                    // The target port forwarding to
            "protocol": "tcp"                        // The protocol to use, can choose "tcp" or "udp"
        },
        // ... more routes ...
    ],

    // Define IPMI configs, optional
    "ipmi_configs": [
        {
            "name": "some-server-ipmi",                 // IPMI config name
            "redfish_url": "https://192.168.1.123/",    // IPMI Redfish API base URL (should not contain /redfish/v1)
            "username": "admin",                        // IPMI Redfish API login username
            "password": "123456"                        // IPMI Redfish API login password
        },
        // ... more IPMI configs ...
    ]
}

Additional modes

Keep-alive daemon mode

This mode is used for running on target machine with auto-suspend (e.g. running circadian or similar), to keep the target machine from auto suspending when running tasks.

Use the following command on the target machine to enter this mode:

wolsocketproxy -k

The config file wolsocketproxy.conf should look like the following:

// Keep-alive daemon mode
{
    "listen_address": "0.0.0.0",                // The address to listen for HTTP server, default is 127.0.0.1
    "listen_port": 18080,                       // The port to listen for HTTP server, default is 18080
    "watchdog_feed_interval": 60,               // Watchdog feed interval, seconds, default is 600
    "keep_alive_method": "special_process",     // How to keep target machine alive, default is "special_process"
                                                //   "special_process" - Fork a child process with specified name
    "special_process_name": "wsp-keepalive",    // The display name of the forked child process, default is "wsp-keepalive"
}

You need to periodically send an HTTP GET request to /watchdog/feed at the listen_port in watchdog_feed_interval time, or the special process will be killed. You can combine this mode with circadian's process_block config to keep it from auto-suspending.

If you enable keep_alive_mode in proxy mode's config, the proxy will send requests to /watchdog/feed of this machine whenever there is any traffic towards this machine through it.

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

wolsocketproxy-0.3.1.tar.gz (12.6 kB view details)

Uploaded Source

Built Distribution

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

wolsocketproxy-0.3.1-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file wolsocketproxy-0.3.1.tar.gz.

File metadata

  • Download URL: wolsocketproxy-0.3.1.tar.gz
  • Upload date:
  • Size: 12.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for wolsocketproxy-0.3.1.tar.gz
Algorithm Hash digest
SHA256 ac7434d415e6e1f3f5f405da9ef047efdb6a46a229b63e6c68a70b8273da1bd0
MD5 040b5eb68fbf655665c41ab98d9182a1
BLAKE2b-256 238a6ff9d9b839c3806f69cb4897e9073c7407251ed2e1aabf9f40467f5f710e

See more details on using hashes here.

File details

Details for the file wolsocketproxy-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: wolsocketproxy-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 12.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for wolsocketproxy-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 873f9b7828a4155bdbeeb538ddd8c39b650342ca6ba4e2a0a45529fc77798d5a
MD5 a7515bd48b82f3a48f40e8dfa6f6594c
BLAKE2b-256 af67387dc4efc8463bbb5f833d7f44f1106b71018bbd0e7807266f8a732a0344

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