{"id":46729165,"url":"https://github.com/synfinatic/udp-proxy-2020","last_synced_at":"2026-03-09T14:38:22.189Z","repository":{"id":37992028,"uuid":"293983382","full_name":"synfinatic/udp-proxy-2020","owner":"synfinatic","description":"A crappy UDP router for the year 2020 and beyond","archived":false,"fork":false,"pushed_at":"2025-09-05T18:33:31.000Z","size":288,"stargazers_count":121,"open_issues_count":19,"forks_count":8,"subscribers_count":13,"default_branch":"main","last_synced_at":"2025-09-05T18:36:09.128Z","etag":null,"topics":["broadcast-messages","roon","udp"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/synfinatic.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-09-09T02:40:06.000Z","updated_at":"2025-09-05T16:48:16.000Z","dependencies_parsed_at":"2023-10-20T17:46:14.158Z","dependency_job_id":"7d987e34-664b-4969-a287-90d944fa03df","html_url":"https://github.com/synfinatic/udp-proxy-2020","commit_stats":{"total_commits":94,"total_committers":4,"mean_commits":23.5,"dds":"0.18085106382978722","last_synced_commit":"6bce78b52258e71ddd78b4eaa8d91cafd431a3e3"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/synfinatic/udp-proxy-2020","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synfinatic%2Fudp-proxy-2020","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synfinatic%2Fudp-proxy-2020/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synfinatic%2Fudp-proxy-2020/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synfinatic%2Fudp-proxy-2020/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/synfinatic","download_url":"https://codeload.github.com/synfinatic/udp-proxy-2020/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synfinatic%2Fudp-proxy-2020/sbom","scorecard":{"id":863375,"data":{"date":"2025-08-11","repo":{"name":"github.com/synfinatic/udp-proxy-2020","commit":"72742faabb019146a41e0551fc29f9a77fc631e5"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.6,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/3 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/auto-close.yml:1","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/docker-hub.yml:1","Warn: no topLevel permission defined: .github/workflows/go.yaml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/golangci-lint.yaml:11","Warn: no topLevel permission defined: .github/workflows/md-links-check.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":8,"reason":"4 out of the last 4 releases have a total of 4 signed artifacts.","details":["Info: signed release artifact: release.sig: https://github.com/synfinatic/udp-proxy-2020/releases/tag/v0.0.11","Info: signed release artifact: release.sig: https://github.com/synfinatic/udp-proxy-2020/releases/tag/v0.0.9","Info: signed release artifact: release.sig: https://github.com/synfinatic/udp-proxy-2020/releases/tag/v0.0.8","Info: signed release artifact: release.sig: https://github.com/synfinatic/udp-proxy-2020/releases/tag/v0.0.7","Warn: release artifact v0.0.11 does not have provenance: https://api.github.com/repos/synfinatic/udp-proxy-2020/releases/64472966","Warn: release artifact v0.0.9 does not have provenance: https://api.github.com/repos/synfinatic/udp-proxy-2020/releases/60096229","Warn: release artifact v0.0.8 does not have provenance: https://api.github.com/repos/synfinatic/udp-proxy-2020/releases/52879689","Warn: release artifact v0.0.7 does not have provenance: https://api.github.com/repos/synfinatic/udp-proxy-2020/releases/43436504"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 4 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/auto-close.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/auto-close.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:71: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docker-hub.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/docker-hub.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docker-hub.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/docker-hub.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docker-hub.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/docker-hub.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docker-hub.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/docker-hub.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docker-hub.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/docker-hub.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docker-hub.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/docker-hub.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yaml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/go.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yaml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/go.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/golangci-lint.yaml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/golangci-lint.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/golangci-lint.yaml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/golangci-lint.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/golangci-lint.yaml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/golangci-lint.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/md-links-check.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/md-links-check.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/md-links-check.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/synfinatic/udp-proxy-2020/md-links-check.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:15: pin your Docker image by updating alpine to alpine@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1","Warn: containerImage not pinned by hash: Dockerfile.amd64:1","Warn: containerImage not pinned by hash: Dockerfile.amd64:10","Warn: containerImage not pinned by hash: Dockerfile.arm:1","Warn: containerImage not pinned by hash: Dockerfile.arm:55","Warn: containerImage not pinned by hash: Dockerfile.arm:82","Warn: containerImage not pinned by hash: Dockerfile.mips64:1","Warn: containerImage not pinned by hash: Dockerfile.mips64:26","Warn: containerImage not pinned by hash: Dockerfile.mips64:35","Warn: containerImage not pinned by hash: Dockerfile.package:1","Warn: containerImage not pinned by hash: Dockerfile.package:8","Info:   0 out of  11 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of  12 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-24T01:59:32.761Z","repository_id":37992028,"created_at":"2025-08-24T01:59:32.761Z","updated_at":"2025-08-24T01:59:32.761Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30299114,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T14:33:48.460Z","status":"ssl_error","status_checked_at":"2026-03-09T14:33:48.027Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["broadcast-messages","roon","udp"],"created_at":"2026-03-09T14:38:16.995Z","updated_at":"2026-03-09T14:38:22.175Z","avatar_url":"https://github.com/synfinatic.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# udp-proxy-2020\n\nA crappy UDP router for the year 2020 and beyond.\n\n## About\n\n### What is this for?\n\nSo I'm playing with [Roon](https://roonlabs.com) and I've got this complicated\nhome network that throws Roon for a loop.  I started debugging things and it\nturns out Roon sends _broadcast_ messages to UDP/9003.  My firewall/router will\nnot forward these messages of course, because that's the right thing to do.\n\nUnfortunately, I really want these broadcast messages to be forwarded to other\nVLAN/subnets on my local network.  I started using\n[udp-proxy-relay-redux](https://github.com/udp-redux/udp-broadcast-relay-redux)\nwhich worked great at first.\n\nBut I also really like these messages forwarded over my OpenVPN connections\nwhich utilize the `tun` driver which is a point-to-point interface and\n_explicity_ does not support broadcasts.  This didn't work well with\nudp-proxy-relay-redux because Roon is poorly behaved and still tries sending\n\"broadcasts\" to the .255 address which are then dropped on the floor because my\nVPN server does not have the address x.x.x.255.  Basically, on a point-to-point\ninterface, these \"broadcasts\" were being treated as a packet destined to another\nhost and rightfully ignored.\n\n### So what does this do?\n\nInstead of using a normal UDP socket to listen for broadcast messages, `udp-proxy-2020`\nuses [libpcap](https://github.com/the-tcpdump-group/libpcap) to \"sniff\" the UDP\nbroadcast messages.  This means it can be a lot more flexible about what packets\nit \"sees\" so it can then sends them via libpcap/packet injection out all the other\nconfigured interfaces.  If this makes you go \"ew\", well,\n[welcome to 2020](https://google.com/search?q=why+is+2020+the+worst).\n\n### The good news...\n\nI'm writing this in GoLang so at least cross compiling onto your random Linux/FreeBSD\nrouter/firewall is reasonably easy.  No ugly cross-compling C or trying to install\nPython/Ruby and a bunch of libraries.\n\n_Also: HAHAHAHAHAHAHA!  None of that is true!_  Needing to use\n[libpcap](https://www.tcpdump.org) means I have to cross compile using CGO because\n[gopacket/pcapgo](https://pkg.go.dev/github.com/google/gopacket@master/pcapgo) only\nsupports Linux for reading \u0026 writing to (ethernet?) network interfaces.\n\n## Installation \u0026 Startup Scripts\n\nPretty much any Unix-like system is supported because the dependcy list is only\n`libpcap` and `golang`.  I develop on MacOS and specifically target\n[pfSense](https://www.pfsense.org)/FreeBSD and\n[Ubiquiti](https://www.ui.com) USG, EdgeRouter and DreamMachine/Pro as those\nare quite common among the Roon user community.\n\n### Packages\n\nIf you are using a Linux RedHat or Debian based distro, the easiest way to install\nis grab the appropriate `.rpm` or `.deb` file and install it with your package\nmanager.  Then edit `/etc/udp-proxy-2020.conf` and start via:\n`systemctl start udp-proxy-2020`.\n\n### Docker\n\u003c!-- markdown-link-check-disable --\u003e\nThere is also a [docker image available](\nhttps://hub.docker.com/repository/docker/synfinatic/udp-proxy-2020) for Linux on\nAMD64 and ARM64 (like the Ubiquiti UDM).\n\u003c!-- markdown-link-check-enable --\u003e\n\nNote that for Docker deployments, you should be using [host networking](\nhttps://docs.docker.com/network/host/).\n\n### Manual\n\nI [release binaries](https://github.com/synfinatic/udp-proxy-2020/releases)\nfor Linux, FreeBSD (pfSense) and MacOS for Intel, ARM and MIPS hardware.\n\nThere are now instructions and startup scripts available in the [startup-scripts](\nstartup-scripts) directory.  If you figure out how to add support for another\nplatform, please send me a pull request!\n\n## Usage\n\n## Configuration\n\nRun `udp-proxy-2020 --help` for a current list of command line options.  \nAlso, please note on many operating systems you will need to run it as the \n`root` user.  Linux systems can optionally grant the `CAP_NET_RAW` capability.\n\nCurrently there are only a few flags you probaly need to worry about:\n\n* `--interface` -- Specify two or more network interfaces to listen on.\n* `--port` -- Specify one or more UDP ports to monitor.\n* `--level` -- Specify the log level: [trace|debug|warn|info|error]\n\nAdvanced options:\n\n* `--fixed-ip` -- Hardcode an `\u003cinterface\u003e@\u003cipaddr\u003e` to always send traffic to.\n   Useful for things like OpenVPN in site-to-site mode.\n* `--timeout` -- Number of ms for pcap timeout value. (default is 250ms)\n* `--cache-ttl` -- Number of minutes to cache IPs for. (default is 180min / 3hrs)\n   This value may need to be increased if you have problems passing traffic to\n   clients on OpenVPN tunnels if you can't use `--fixed-ip` because clients\n   don't have a fixed ip.\n* `--no-listen` -- Do not listen on the specified UDP port(s) to avoid conflicts\n* `--deliver-local` -- Deliver packets locally on loopback interface\n\nThere are other flags of course, run `./udp-proxy-2020 --help` for a full list.\n\nExample:\n\n```sh\nudp-proxy-2020 --port 9003 --interface eth0,eth0.100,eth1,tun0 --cache-ttl 300\n```\n\nWould forward udp/9003 packets on four interfaces: eth0, eth1, VLAN100 on eth0 and tun0.\nClient IP's on tun0 would be remembered for 5 minutes once they are learned.\n\nNote: \"learning\" requires the client to send a udp/9003 message first!  If\nyour application requires a message to be sent *to* the client first, then you\nwould need to specify `--fixed-ip=1.2.3.4@tun0` where `1.2.3.4` is the IP address\nof the client on tun0.\n\n## Using udp-proxy-2020 with VPNs\n\nI have tested both \"road warrior\" VPN configs with Roon client running on my laptop\nand connecting back to my home firewall via OpenVPN and Wireguard.  I personally\nuse Wireguard instead of OpenVPN because it is more secure and has better performance.\n\nI've also tested Site-to-Site VPN using Wireguard + pfSense.  I followed the \n[pfSense site-to-site Wireguard VPN directions](\nhttps://docs.netgate.com/pfsense/en/latest/recipes/wireguard-s2s.html) and \ninstalled `udp-proxy-2020` on _both_ firewalls.  You must configure the\n`--interface` option to include both the LAN and Wireguard network interfaces.\n\n## Building udp-proxy-2020\n\nIf you are building for the same platform you intend to run `udp-proxy-2020`\nthen you just need to make sure you have `libpcap` and the necessary headers\n(you may need a `-dev` package for that) and run `make` or `gmake` as\nappropriate (we need GNU Make, not BSD Make).\n\n## FAQ\n\n### When should I use --no-listen?\n\nStarting with v0.0.11, `udp-proxy-2020` now by default creates a UDP listening \nsocket on the specified `--port`(s).  This prevents the underlying OS from issuing\nICMP Port Unreachable messages which can break certain clients (noteably the \n[Roon](https://roonlabs.com) iOS client).\n\nThe only time you should need to use the `--no-listen` flag is if there is another\npiece of software that is running on the same host as `udp-proxy-2020`.\n\n### Does udp-proxy-2020 support running on the same host as Roon/etc?\n\nAs of v0.1.0, yes.  You need to specify `--deliver-local` and `--no-listen` \noptions so that it delivers packets via the loopback interface.\n\n### When should I use --pcap and --pcap-path?\n\nThese flags are for debugging problems with `udp-proxy-2020`.  You should\nuse these flags when I direct you to do so as part of a [ticket](\nhttps://github.com/synfinatic/udp-proxy-2020/issues) you have opened for `udp-proxy-2020`.\n\n### Where can I download precompiled binaries?\n\nFrom the [releases page](https://github.com/synfinatic/udp-proxy-2020/releases) on Github.\n\n### So is it a \"proxy\"?  Are there any proxy config settings I need to configure in my app?\n\nNope, it's not a proxy.  It's more like a router.  You don't need to make\nany changes other than running it on your home router/firewall.\n\n### Then why did you call it udp-proxy-2020?\n\nHonestly, I didn't really think much about the name and this was the first thing\nthat came to my mind.  Also, [naming is hard](https://martinfowler.com/bliki/TwoHardThings.html).\n\n### What network interface types are supported?\n\n* Ethernet\n* WiFi interfaces which appear as Ethernet\n* `tun` interfaces, like those used by [OpenVPN](https://openvpn.net)\n* `raw` interfaces, like those used by [Wireguard](https://www.wireguard.com)\n* `vti` interfaces for site-to-site IPSec\n\nNote that L2TP VPN tunnels on Linux are not compatible with udp-proxy-2020\nbecause the Linux kernel exposes those interfaces as [Linux SLL](\nhttps://wiki.wireshark.org/SLL) which does not provide an accurate decode\nof the packets.\n\n### How can I get udp-proxy-2020 working with Wireguard on Ubiquiti USG?\n\nSo I haven't done this myself, but Bart Verhoeven over on the Roon Community\nforums wrote up\n[this really detailed how to](https://community.roonlabs.com/t/how-to-roon-mobile-over-wireguard-on-a-unifi-usg/124477).\n\n### What binary is right for me?\n\nudp-proxy-2020 is built for multiple OS and hardware platforms:\n\n* MacOS/Intel x86_64: `darwin-amd64`\n* Linux/Intel x86_64: `linux-amd64`\n* Linux/ARM64: `linux-arm64` (RasPi 2 V1.2 and above, Ubiquiti UniFi Dream Machine)\n* Linux/ARMv7 (~~hardware~~software floating point): `linux-armv7` (RasPi 2 V1.1 and below)\n* Linux/ARMv6 (~~hardware~~software floating point): `linux-armv6`\n* Linux/ARMv5 (software floating point): `linux-armv5`\n* Linux/MIPS64: `linux-mips64` (Ubiquiti USG/EdgeRouter)\n* FreeBSD/Intel x86_64: `freebsd-amd64` (works with pfSense/OpnSense on x86)\n* FreeBSD/ARMv8: `freebsd-arm64` (Netgate SG-1100 \u0026 SG-2100, etc)\n\n### How can I say thanks?\n\nHonestly, just send me an email saying thanks or \"star\" this project in GitHub\nis enough thanks.\n\nOccasionally, someone will ask about giving me a few bucks, but I really don't\nneed any money.  If you still would like to throw a few bucks my way, I'd much\nrather you donate to [Second Harvest Food Bank](https://www.shfb.org/) which\nis local to me and could put your money to better work than I would.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsynfinatic%2Fudp-proxy-2020","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsynfinatic%2Fudp-proxy-2020","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsynfinatic%2Fudp-proxy-2020/lists"}