{"id":15633080,"url":"https://github.com/akinokaede/asport","last_synced_at":"2025-05-16T01:05:29.326Z","repository":{"id":254064036,"uuid":"845375153","full_name":"AkinoKaede/asport","owner":"AkinoKaede","description":"A quick and secure reverse proxy based on QUIC for NAT traversal.","archived":false,"fork":false,"pushed_at":"2024-12-02T17:34:09.000Z","size":258,"stargazers_count":186,"open_issues_count":12,"forks_count":12,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-12T03:33:32.467Z","etag":null,"topics":["nat-traversal","networking","quic","reverse-proxy","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/AkinoKaede.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2024-08-21T06:05:44.000Z","updated_at":"2025-05-11T15:46:52.000Z","dependencies_parsed_at":"2024-08-21T07:39:25.225Z","dependency_job_id":"335977ea-5a6f-4b22-9e30-be0384fe88c4","html_url":"https://github.com/AkinoKaede/asport","commit_stats":null,"previous_names":["akinokaede/asport"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AkinoKaede%2Fasport","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AkinoKaede%2Fasport/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AkinoKaede%2Fasport/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AkinoKaede%2Fasport/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AkinoKaede","download_url":"https://codeload.github.com/AkinoKaede/asport/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254448579,"owners_count":22072764,"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":["nat-traversal","networking","quic","reverse-proxy","rust"],"created_at":"2024-10-03T10:46:53.484Z","updated_at":"2025-05-16T01:05:29.263Z","avatar_url":"https://github.com/AkinoKaede.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Asport\n\nA quick and secure reverse proxy based on QUIC for NAT traversal.\n\n## Introduction\n\nAsport is a project that aims to provide an implementation for ASPORT. ASPORT is a reverse proxy protocol that uses QUIC\nas its transport layer.\n\nASPORT is designed on the top of [QUIC](https://www.rfc-editor.org/rfc/rfc9000.html) protocol, which is a multiplexed,\nsecure, and reliable transport protocol.\n\nWhen paired with QUIC, ASPORT can achieve:\n\n- Fully multiplexed. All streams and datagrams are multiplexed in a single QUIC connection.\n- Two UDP proxying modes:\n    - `native`: Having characteristics of native UDP mechanism, transferring UDP packets lossy using QUIC unreliable datagram.\n    - `quic`: Transferring UDP packets lossless using QUIC unidirectional streams.\n- All the advantages of QUIC, including but not limited to:\n    - Bidirectional user-space congestion control.\n    - Optional 0-RTT connection handshake.\n    - Connection migration.\n\nThe specification of ASPORT can be found in [SPEC.md](./SPEC.md).\n\n## Features\n\nWhy should you choose Asport?\n\n- Secure. ASPORT uses QUIC as its transport layer, which uses TLS 1.3 for encryption.\n- Low latency. ASPORT uses QUIC's stream multiplexing to reduce the latency caused by the additional handshake.\n- Higher transfer speed than traditional multiplexed TCP-based proxies. Many ISP limits the speed of a single TCP connection,\nbut QUIC can bypass this limitation.\n- Awesome UDP forwarding. Many similar projects use stream-based connection to forward UDP packets (e.g. UDP over TCP), when\nloss a packet, subsequent packets will be delayed. ASPORT uses QUIC's unidirectional stream and unreliable datagram to\nforward UDP packets, which can avoid this problem.\n- User-space congestion control. You can use BBR on any platform, even if the platform does not support it, such as macOS. \n- [PROXY protocol](https://www.haproxy.org/download/2.4/doc/proxy-protocol.txt) support in Client.\n- Some simple censorship circumvention features. You can bypass some DPI and probing by setting some options in configuration.\nYou can bypass firewall in some companies, schools, and etc. (I don't encourage you to do this, but it's a feature.)\nThe design of it is based my experience in developing some anti-censorship software.\n\n## Quick Start\n\nPlease refer to the [Quick Start](./QUICK_START.md) guide.\n\n## Project Structure\n\nThis repository contains the following crates:\n\n- **[asport](./asport)** - Library. The protocol itself, protocol \u0026 model abstraction, synchronous / asynchronous marshalling.\n- **[asport-quinn](./asport-quinn)** - Library. A wrapper around [quinn](https://github.com/quinn-rs/quinn) to provide functions of ASPORT.\n- **[asport-server](./asport-server)** - Binary. A simple ASPORT server implementation as a reference.\n- **[asport-client](./asport-client)** - Binary. A simple ASPORT client implementation as a reference.\n\n## Roadmap\n\n- [ ] Better documentation.\n- [ ] Mock tests.\n\n### Long-term Goals\n\n- [ ] REST/RPC interface for `asport-server`.\n- [ ] Web status monitor for `asport-server`.\n- [ ] Web console for `asport-server`.\n- [ ] Full-featured implementation of ASPORT in Go.\n\n## Credits\n\nThis project is highly inspired by [TUIC](https://github.com/EAimTY/tuic). Many ideas and code snippets are borrowed from\n[TUIC](https://github.com/EAimTY/tuic). Thanks to the authors and contributors of TUIC for providing such a great project.\n\n## License\n\nThis repository is licensed under [GNU General Public License v3.0 or later](./LICENSE).\n\nSPDX-License-Identifier: [GPL-3.0-or-later](https://spdx.org/licenses/GPL-3.0-or-later.html)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakinokaede%2Fasport","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakinokaede%2Fasport","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakinokaede%2Fasport/lists"}