{"id":31817612,"url":"https://github.com/kumassy/ownserver","last_synced_at":"2025-10-11T10:19:18.276Z","repository":{"id":58381283,"uuid":"371372858","full_name":"Kumassy/ownserver","owner":"Kumassy","description":"Expose your local game server to the Internet.","archived":false,"fork":false,"pushed_at":"2025-08-31T11:39:56.000Z","size":1488,"stargazers_count":56,"open_issues_count":8,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-10T03:26:13.577Z","etag":null,"topics":["factorio","factorio-server","minecraft","minecraft-server","ngrok","rust","rust-lang"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Kumassy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"Kumassy","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2021-05-27T12:53:57.000Z","updated_at":"2025-10-04T14:18:12.000Z","dependencies_parsed_at":"2023-01-29T17:00:36.120Z","dependency_job_id":"53e952da-e987-4583-b5f2-dec85ed4e76b","html_url":"https://github.com/Kumassy/ownserver","commit_stats":{"total_commits":189,"total_committers":1,"mean_commits":189.0,"dds":0.0,"last_synced_commit":"63664012ee6966126f53bb913a15add827d9e844"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/Kumassy/ownserver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kumassy%2Fownserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kumassy%2Fownserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kumassy%2Fownserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kumassy%2Fownserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kumassy","download_url":"https://codeload.github.com/Kumassy/ownserver/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kumassy%2Fownserver/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006840,"owners_count":26084204,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["factorio","factorio-server","minecraft","minecraft-server","ngrok","rust","rust-lang"],"created_at":"2025-10-11T10:19:16.902Z","updated_at":"2025-10-11T10:19:18.271Z","avatar_url":"https://github.com/Kumassy.png","language":"Rust","funding_links":["https://github.com/sponsors/Kumassy"],"categories":[],"sub_categories":[],"readme":"# OwnServer\n\n![screen shot](docs/img/screenshot.png)\n\nExpose your local game server to the Internet.\n\nThis software aims to minimize cost and effort to prepare local game server like Minecraft, Factorio, RUST and so on.\n\n- Cost you'll save\n   - You can utilize any redundunt compute resource for game server as long as they can connect *to* the Internet.\n   - You can save cost for Cloud, VPS.\n\n- Effort you'll save\n   - No firewall, NAT settings is required.\n   - [GUI application](https://github.com/Kumassy/ownserver-client-gui) is also available.\n\n## Features\n\n- Expose your local TCP/UDP endpoint to the Internet\n- Offer GUI client for game server for Minecraft, factorio, RUST, etc.\n\n## Installation\n\n### Recommended\n\ninstall it by [cargo](https://doc.rust-lang.org/cargo/getting-started/installation.html)\n\n```sh\ncargo install ownserver\n```\n\nIf you dont have cargo installed, please install [rustup](https://rustup.rs/) beforehand\n\n### Download binary\n\nDownload binary for your OS:  \nhttps://github.com/Kumassy/ownserver/releases\n\n### cargo build\n\nOptionally, you can build ownserver by yourself:\n\n```sh\ngit clone https://github.com/Kumassy/ownserver.git\ncd ownserver\ncargo build --release\n```\n\n## Usage\n\n:warning: This software has not yet reach stable release. Use with caution! :warning:\n\nWe also offer GUI. visit [ownserver-client-gui](https://github.com/Kumassy/ownserver-client-gui)\n\n```sh\n% ownserver -h\nExpose your local game server to the Internet\n\nUsage: ownserver [OPTIONS] --endpoint \u003cENDPOINT\u003e\n\nOptions:\n      --endpoint \u003cENDPOINT\u003e\n          Port and protocol of your local game server e.g.) `25565/tcp` for Minecraft\n      --api-port \u003cAPI_PORT\u003e\n          Advanced settings. You can inspect client's internal state at localhost:\u003capi_port\u003e.\n      --control-port \u003cCONTROL_PORT\u003e\n          Advanced settings [default: 5000]\n      --token-server \u003cTOKEN_SERVER\u003e\n          Advanced settings [default: https://auth.ownserver.kumassy.com/v2/request_token]\n      --periodic-ping-interval \u003cPERIODIC_PING_INTERVAL\u003e\n          [default: 15]\n  -h, --help\n          Print help\n  -V, --version\n\n# listen on local port\n% nc -kl 3000\n\n% ownserver --endpoint 3010/tcp\nYour Client ID: client_17638595-be9d-41b9-89bf-c678c1e98d10\nEndpoint Info:\n+------------------------------------------------------------------------+\n| tcp://localhost:3010 \u003c--\u003e tcp://shard-2509.ownserver.kumassy.com:15335 |\n+------------------------------------------------------------------------+\n\n# you can send any TCP packet to local port!\n% nc shard-7924.ownserver.kumassy.com 17974\nhello\n```\n\nvia cargo\n\n```sh\n% cargo run --release --bin ownserver -- -h\n```\n\n### Run Minecraft Server\n\n```sh\n# run minecraft server\njava -Xmx1024M -Xms1024M -jar server.jar nogui\n\n# run ownserver client\nownserver  -- --endpoint 25565/tcp\n```\n\nshare your public URL!\n\n### Use the client API to inspect endpoints and streams\nYou can query endpoints and streams info using the client API.  \nYou need to specify local port to use the API: \n\n```\n% ownserver --endpoint 25565/tcp --api-port 9000\n\n% curl -s localhost:9000/endpoints\n[[{\"id\":\"02291214-8647-4d08-ace3-032ac255bb14\",\"protocol\":\"TCP\",\"local_port\":3010,\"remote_port\":19083}]]\n% curl -s localhost:9000/streams\n[{\"stream_id\":\"5768354e-97c9-4c6a-8cd2-8163a1f3621c\",\"remote_info\":{\"remote_peer_addr\":\"x.x.x.x:13367\"}}]\n```\n\n## How it works\n\n![](/docs/img/overview.svg)\n\nThis app creates a private tunnel between our server and your local game server. You'll get a dedicated global public address for your server.\nAll requests to that public address are forwarded to your local game server throught the tunnel.\n\n## Similer Project\n\n- [ngrok](https://github.com/inconshreveable/ngrok)\n   - written in Go\n   - support HTTP, HTTPS and TCP\n\n- [tunnelto](https://github.com/agrinman/tunnelto)\n   - written in Rust\n   - support HTTP\n\nThis software was initially developed as a fork of [tunnelto](https://github.com/agrinman/tunnelto).\n\n## Contributing\n\nFor a guided tour of the codebase and local development instructions see [docs/development_overview.md](docs/development_overview.md).\n\n### Project Layout\n\n- ownserver/ownserver\n   - include executable of client application\n   - also serves library for ownserver-client-gui\n\n- ownserver/ownserver_lib\n   - define transmission protocol between client and server\n\n- ownserver/ownserver_server\n   - establish private tunnel to client\n   - forward request between public endpoints to a set of client\n\n- [ownserver-auth](https://github.com/Kumassy/ownserver-auth)\n   - performs user authentication and load balancing\n\n- [ownserver-client-gui](https://github.com/Kumassy/ownserver-client-gui)\n   - GUI for ownserver client\n\n## Running tests\n\n```sh\ncargo test\n```\n\n### Self-hosting\n\nYou need to deploy [ownserver-auth](https://github.com/Kumassy/ownserver-auth).\nIt issues token to ownserver client.\n\nAt first, run ownserver-auth as follows:\n\n```sh\ncd ownserver-auth/\ncargo run -- --token-secret supersecret --hosts localhost\n```\n\n- generate secure string for `--token-secret`.\n    - This is a secret shared between `ownserver-auth` and `ownserver-server`.\n    - `ownserver_server` verifies the signature based on `--token-secret` to ensure that the token is legitimate.\n- `--hosts` is a list of hostname of `ownserver_server`.\n    - If you deploy multiple `ownserver_server`, list hostname of `ownserver_server` separated by commas.\n\n\nThen, run `ownserver_server`:\n\n```sh\ncd ownserver/\ncargo run --bin ownserver-server -- --host localhost --remote-port-start 20000 --remote-port-end 30000 --log-file ./ownserver-server.log --token-secret supersecret\n```\n\n- `--host` is the hostname for running `ownserver_server`.\n- Remote ports are selected between `--remote-port-start` and `--remote-port-end`\n- `--log-file` is the location of the `ownserver-server` log file\n- `--token-secret` is the shared secret between `ownserver-auth` and `ownserver_server`.\n\nNow, `ownserver-server` can accept request from `ownserver-client`:\n\n```sh\ncargo run --bin ownserver -- --payload tcp --local-port 3000 --token-server http://localhost:8123/v0/request_token\n```\n\n- You should specify `--token-server` to ensure `ownserver-client` uses your local `ownserver-auth`.\n\n### Issue/PR\n\nFeel free to open Issues, send Pull Requests!\n\n### License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkumassy%2Fownserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkumassy%2Fownserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkumassy%2Fownserver/lists"}