This program is a custom TCP proxy that forwards traffic between a local and remote address. I developed it to monitor v2ray server connections.
It includes features like country-based IP filtering, speed monitoring/throttling, keyword based routing and connection management.
- Keyword based TCP Forwarding: Forwards traffic between a local and remote server based on the incoming connection's header.
- Speed Monitoring: Monitors upload and download speeds, displaying them in real-time, and you can set a limit to drop old connections.
- Connection Management: Handles new connections, ensuring smooth operation under various conditions.
- IP Filtering: Supports country-based whitelisting or blacklisting of IPs using CIDR blocks.
Run the program with the following command:
go run main.go [options]
-bind
or-b
: Address to bind the TCP server to (default:8080
).-local
or-l
: IP:Port to forward to if the connection matches a path (default127.0.0.1:8081
).-remote
or-r
: IP:Port to forward to if the connection does not match any paths.-country-whitelist
or-cw
: List of country codes to whitelist (can be specified multiple times).-country-blacklist
or-cb
: List of country codes to blacklist (can be specified multiple times).-upload-speed
or-us
: Maximum upload speed (e.g., 10MB, 10Mb, 10KB).-download-speed
or-ds
: Maximum download speed (e.g., 10MB, 10Mb, 10KB).-path
or-p
: The string to check in the incoming connection to determine routing (can be specified multiple times).
For example, you run a v2ray vless ws server on 127.0.0.1:8080 and your path is /ws and you want all probes and
other connections to be forwarded to example.com:80. You can run the following command:
go run main.go -b :8080 -l 127.0.0.1:8081 -p "/ws" -r example.com:80
same as above but you want to whitelist Iran and China and drop all other connections:
go run main.go -b :8080 -l 127.0.0.1:8081 -p "/ws" -r example.com:80 -cw ir -cw ch
same as first example, but you want to accept all incoming connections except from US and UK and limit upload and download speed to 10MB:
go run main.go -b :8080 -l 127.0.0.1:8081 -p "/ws" -r example.com:80 -cb us -cb uk -us 10MB -ds 10MB
Just clone the repository and run the program with the command above in a tmux session or as a service.
If you have any suggestions, feel free to open an issue or a pull request. Any contributions you make are greatly appreciated.
This project is open-source and available under the MIT License.