{"id":13775833,"url":"https://github.com/net-reflow/reflow","last_synced_at":"2025-05-11T08:33:35.301Z","repository":{"id":33021449,"uuid":"149990988","full_name":"net-reflow/reflow","owner":"net-reflow","description":"Content-routable socks5 proxy switcher for your entire LAN.","archived":false,"fork":false,"pushed_at":"2022-06-14T23:59:09.000Z","size":435,"stargazers_count":198,"open_issues_count":11,"forks_count":21,"subscribers_count":10,"default_branch":"master","last_synced_at":"2024-11-13T09:51:42.631Z","etag":null,"topics":["policy-based-routing","protocol","proxy","sni","socks","socks5","tap","tun","tun2socks","vpn"],"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/net-reflow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-09-23T14:17:23.000Z","updated_at":"2024-08-03T23:03:13.000Z","dependencies_parsed_at":"2022-08-29T11:31:16.083Z","dependency_job_id":null,"html_url":"https://github.com/net-reflow/reflow","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/net-reflow%2Freflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/net-reflow%2Freflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/net-reflow%2Freflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/net-reflow%2Freflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/net-reflow","download_url":"https://codeload.github.com/net-reflow/reflow/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225027570,"owners_count":17409464,"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":["policy-based-routing","protocol","proxy","sni","socks","socks5","tap","tun","tun2socks","vpn"],"created_at":"2024-08-03T17:01:51.958Z","updated_at":"2024-11-17T10:32:06.734Z","avatar_url":"https://github.com/net-reflow.png","language":"Rust","funding_links":[],"categories":["\u003ca id=\"d03d494700077f6a65092985c06bf8e8\"\u003e\u003c/a\u003e工具","Rust","vpn"],"sub_categories":["\u003ca id=\"57b8e953d394bbed52df2a6976d98dfa\"\u003e\u003c/a\u003eSocks"],"readme":"# Reflow: One proxy to rule them all\n\nThis program let you make full use of all your proxies, VPNs, and interfaces, automatically.\n\n## Features\n- Route ip packets to proxies\n\n    It operates on the network layer, so you can stop worrying about proxy support in applications.\n    You can use a socks5 proxy wherever you want. \n    And you won't forget to use your privacy-enhanced VPNs, ever.\n\n- Detect protocol metadata for finer-grained control\n\n  In addtion to ip address and port, protocol (HTTP, TLS, SSH, etc.) metadata (domain name, user-agent, etc.) are detected.\n\n- Prefix-match domain names and ip subnets\n\n  Use a trie or prefix tree to sort domains and addresses into zones, because they have a natural hierarchical ownership structure\n\n- Use a tree diagram to configure any routing strategy\n\n  Any decision-making process that can be expressed as a cascade of conditional statements can be used. Use all the protocol information to make intelligent routing decisions. Privacy, speed, low cost, choose any three.\n\n- Selectively proxy DNS queries depending on the domain name\n\n- Drop traffic to domains or ip address known to serve only ads and tracking\n\n  It handles tens of thousands of domains with ease even on an OpenWrt device\n\n# Installation\n\nAfter you have the nightly version of [Cargo](https://doc.rust-lang.org/cargo/getting-started/installation.html) installed.\n\nClone the project `git clone https://github.com/net-reflow/reflow`\n\nand run `cargo install`, the binary will be installed in `~/.cargo/bin/reflow`\n\nYou can now run it using `reflow --config path`, where `path` is the directory containing all the configuration\n\nA good starting point for the configuration is [reflow.conf](https://github.com/net-reflow/reflow.conf)\n\n# What does the Decision Tree do in a proxy?\n\nThis is where the power of `reflow` shows, you'll get a basic idea by looking at an example with comments:\n\n    any[\n        # when your computer wants to make a connection to the internet\n        # reflow inspects the first packets, thoroughly\n        # first, it checks the domain, (if the application layer protocol uses a domain)\n        cond domain {\n          # if it's listed as one of \"secret-sites\" (including sub-domains) in configuration\n          # use the proxy defined as privacyproxy\n          secret-sites =\u003e privacyproxy\n          # block traffic to known ad servers by domain\n          # \"reset\" is a built-in option, which means drop the connection\n          adservers =\u003e reset\n          # you can chain rules, the following will only match when the domain is in https-only and the protocol is http\n          # otherwise, this \"cond domain\" section doesn't match, and rules following it will be tried\n          https-only =\u003e cond protocol {\n            http =\u003e reset\n          }\n        }\n\n        # next look at ip addresses\n        cond ip {\n            # you can use workvpn0 to access your working environment\n            worknet =\u003e workvpn0\n            # \"direct\" is a another built-in option, meaning use the existing default route \n            homelan =\u003e direct\n        }\n        # if the rules above hasn't produced a match, continue to check the protocol\n        cond protocol {\n          ssh =\u003e any [\n            cond ip  {\n            # some ssh hosts may be only accessible through a certain proxy\n                mars =\u003e moon\n            }\n            # another example of combing conditions: when the protocol is ssh AND the port is 22\n            cond port eq 22 =\u003e proxy1\n            # this will always match sucessfully for ssh traffic\n            direct\n          ]\n        }\n        # catch-all rule for everything else\n        direct\n    ]\n\nThe enclosing `any[` and `]` means rules listed inside it will be tried one by one\n\n# Configuration\n\nExample configuration and documentation is provided at\n [reflow.conf](https://github.com/net-reflow/reflow.conf)\n\n# Contributing\n\nPlease try it and give any kind of feedback by opening issues\n\n## Development\n\nHere're some features being developed or considered:\n\n* Built-in tun support, add UDP support\n* Support more protocols\n* Chaining proxies\n* Add Dns over https or tls support\n* Add Dns cache\n\n## Make a Donation\n\nBTC: `bc1q8cxs2e3wf525f958zgxzq4skl94nfzwuuq97qz`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnet-reflow%2Freflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnet-reflow%2Freflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnet-reflow%2Freflow/lists"}