{"id":27570866,"url":"https://github.com/txthinking/mr2","last_synced_at":"2025-04-21T02:01:43.005Z","repository":{"id":52236880,"uuid":"183399164","full_name":"txthinking/zoro","owner":"txthinking","description":"zoro can help you expose local server to external network. Support both TCP/UDP, of course support HTTP.  Zero-Configuration.","archived":false,"fork":false,"pushed_at":"2025-04-16T22:29:55.000Z","size":10657,"stargazers_count":1544,"open_issues_count":12,"forks_count":124,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-04-19T01:23:56.684Z","etag":null,"topics":["expose","firewall","nat","proxy","tcp","tunnel","udp","zero-configuration"],"latest_commit_sha":null,"homepage":"https://www.txthinking.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/txthinking.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","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},"funding":{"github":"txthinking","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2019-04-25T09:14:44.000Z","updated_at":"2025-03-29T09:04:33.000Z","dependencies_parsed_at":"2024-11-06T12:37:41.716Z","dependency_job_id":"fe2e5ec5-b6d4-48d3-a8e5-9114a99e5dff","html_url":"https://github.com/txthinking/zoro","commit_stats":{"total_commits":90,"total_committers":8,"mean_commits":11.25,"dds":0.1777777777777778,"last_synced_commit":"a6ef104ea528a638d0f74e7dbe6c43cb7ebddd23"},"previous_names":["txthinking/mr","txthinking/mr2"],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txthinking%2Fzoro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txthinking%2Fzoro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txthinking%2Fzoro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txthinking%2Fzoro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/txthinking","download_url":"https://codeload.github.com/txthinking/zoro/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249985637,"owners_count":21356216,"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","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":["expose","firewall","nat","proxy","tcp","tunnel","udp","zero-configuration"],"created_at":"2025-04-21T02:01:40.255Z","updated_at":"2025-04-21T02:01:42.994Z","avatar_url":"https://github.com/txthinking.png","language":"Go","readme":"# zoro\n\n[中文](README_ZH.md)\n\nzoro (mr2) can help you expose local server to external network. **Support both TCP/UDP**, of course support HTTP/HTTPS. Keep it **simple**, **stupid**.\n\n❤️ A project by [txthinking.com](https://www.txthinking.com)\n\n### Install via [nami](https://github.com/txthinking/nami)\n\n```\nnami install zoro\n```\n\n### Install via brew\n\n```\nbrew install zoro\n```\n\n### Usage\n\n```\nNAME:\n   zoro - Expose local TCP and UDP server to external network\n\nUSAGE:\n   zoro [global options] command [command options] [arguments...]\n\nCOMMANDS:\n   server       Run as server mode\n   client       Run as client mode\n   httpsserver  Run as https server mode\n   httpsclient  Run as https client mode\n   help, h      Shows a list of commands or help for one command\n\nGLOBAL OPTIONS:\n   --help, -h     show help (default: false)\n   --version, -v  print the version (default: false)\n```\n\n## `server` and `client`\n\nOn remote server. Note that the firewall opens TCP and UDP on all relevant ports\n\n```\n$ zoro server --listen :9999 --password password\n```\n\n\u003e More parameters: $ zoro server --help\n\nOn local. Assume your remote zoro server is `1.2.3.4:9999`, your local server is `127.0.0.1:8080`, want the remote server to open port `8888`\n\n```\n$ zoro client --server 1.2.3.4:9999 --password password --serverport 8888 --client 127.0.0.1:8080\n```\n\n\u003e More parameters: $ zoro client --help\n\nThen access `1.2.3.4:8888` equals to access `127.0.0.1:8080`\n\n## `httpsserver` and `httpsclient`\n\nOn remote server. Assume your domain is `domain.com`, cert of `*.domain.com` is `./domain_com_cert.pem` and `./domain_com_cert_key.pem`, want https listen on `443`. Note that the firewall opens TCP on all relevant ports\n\n```\n$ zoro httpsserver --listen :9999 --password password --domain domain.com --cert ./domain_com_cert.pem --key ./domain_com_cert_key.pem --tlsport 443\n```\n\n\u003e More parameters: $ zoro httpsserver --help\n\nOn local. Assume your remote zoro httpsserver is `1.2.3.4:9999`, your local HTTP 1.1 server is `127.0.0.1:8080`, want the remote server to open subdomain `hello`\n\n```\n$ zoro httpsclient --server 1.2.3.4:9999 --password password --subdomain hello --client 127.0.0.1:8080\n```\n\n\u003e More parameters: $ zoro httpsclient --help\n\nThen access `https://hello.domain.com:443` equals to access `http://127.0.0.1:8080`\n\n## Example of `server` and `client`\n\n#### Expose local HTTP server\n\n```\n$ zoro client --server 1.2.3.4:9999 --password password --serverport 8888 --client 127.0.0.1:8080\n```\n\nThen access `1.2.3.4:8888` equals to access `127.0.0.1:8080`\n\n#### Expose local SSH\n\n```\n$ zoro client --server 1.2.3.4:9999 --password password --serverport 8888 --client 127.0.0.1:22\n```\n\nThen access `1.2.3.4:8888` equals to access `127.0.0.1:22`\n\n```\n$ ssh -oPort=8888 yourlocaluser@1.2.3.4\n```\n\n#### Expose local DNS server\n\n```\n$ zoro client --server 1.2.3.4:9999 --password password --serveport 8888 --client 127.0.0.1:53\n```\n\nThen access `1.2.3.4:8888` equals to access `127.0.0.1:53`\n\n```\n$ dig github.com @1.2.3.4 -p 8888\n```\n\n#### Expose local directory via HTTP\n\n```\n$ zoro client --server 1.2.3.4:9999 --password password --serverport 8888 --dir /path/to/www --dirport 8080\n```\n\nThen access `1.2.3.4:8888` equals to access `127.0.0.1:8080`, web root is /path/to/www\n\n#### Expose any TCP/UDP service\n\n```\n...\n```\n\n## About UDP\n\nIn some cases of multi-layer NAT, UDP may fail. I passed the test when I connected directly to the Wi-Fi provided by the ISP.\n\n## License\n\nLicensed under The GPLv3 License\n","funding_links":["https://github.com/sponsors/txthinking"],"categories":["Go","Go (531)"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftxthinking%2Fmr2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftxthinking%2Fmr2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftxthinking%2Fmr2/lists"}