🚀 Help me work seamlessly with open source sharing by sponsoring me on GitHub
A high-performance HTTP
/HTTPS
/SOCKS5
proxy server
- Proxy extensions
- Concurrency limits
- Basic authentication
- Auto protocol detection
- IPv4/IPv6 priority control
- Service binding to specific
CIDR
addresses - SOCKS5:
CONNECT
,BIND
,ASSOCIATE
$ vproxy -h
A high-performance HTTP/HTTPS/SOCKS5 proxy server
Usage: vproxy
vproxy <COMMAND>
Commands:
run Run server
start Start server daemon
restart Restart server daemon
stop Stop server daemon
ps Show server daemon process
log Show server daemon log
self Modify server installation
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
If you need more detailed installation and usage information, please check here
- curl
curl -sSL https://raw.githubusercontent.com/0x676e67/vproxy/main/.github/install.sh | bash
- wget
wget -qO- https://raw.githubusercontent.com/0x676e67/vproxy/main/.github/install.sh | bash
- cargo
cargo install vproxy
- Dokcer
docker run --rm -it ghcr.io/0x676e67/vproxy:latest run http
If you run the program as root, it will automatically configure the sysctl net.ipv6.ip_nonlocal_bind=1
, net.ipv6.conf.all.disable_ipv6
, and ip route add local 2001:470:e953::/48 dev lo
for you. Otherwise you will need to configure these settings manually.
If no subnet is configured, the local default network proxy request will be used. When the local machine sets the priority Ipv4
/Ipv6
and the priority is Ipv4
, it will always use Ipv4
to make requests (if any).
# Enable binding to non-local IPv6 addresses
sudo sysctl net.ipv6.ip_nonlocal_bind=1
# Enable IPv6
sudo sysctl net.ipv6.conf.all.disable_ipv6=0
# Replace with your IPv6 subnet
sudo ip route add local 2001:470:e953::/48 dev lo
# Run the server http/socks5
vproxy run -i 2001:470:e953::/48 http
# Start the daemon (runs in the background), requires sudo
sudo vproxy start -i 2001:470:e953::/48 http
# Restart the daemon, requires sudo
sudo vproxy restart
# Stop the daemon, requires sudo
sudo vproxy stop
# Show daemon log
vproxy log
# Show daemon status
vproxy status
# Download and install updates to vproxy
vproxy self update
# Uninstall vproxy
vproxy self uninstall
# Test loop request
while true; do curl -x http://127.0.0.1:8100 -s https://api.ip.sb/ip -A Mozilla; done
...
2001:470:e953:5b75:c862:3328:3e8f:f4d1
2001:470:e953:b84d:ad7d:7399:ade5:4c1c
2001:470:e953:4f88:d5ca:84:83fd:6faa
2001:470:e953:29f3:41e2:d3f2:4a49:1f22
2001:470:e953:98f6:cb40:9dfd:c7ab:18c4
2001:470:e953:f1d7:eb68:cc59:b2d0:2c6f
vproxy supports multiple types of proxy servers with flexible configuration options. HTTP, HTTPS, and SOCKS5 proxies can run independently, or use the auto-detection mode to handle all protocols on a single port. Each server type supports authentication, custom binding addresses, and advanced socket configurations.
- HTTP Proxy
# Basic HTTP proxy
vproxy run http
# HTTP proxy with authentication
vproxy run http -u username -p password
# HTTP proxy on custom port
vproxy run --bind 0.0.0.0:8080 http
- HTTPS Proxy
# HTTPS proxy with TLS certificates
vproxy run https --tls-cert cert.pem --tls-key key.pem
# HTTPS proxy with authentication
vproxy run https --tls-cert cert.pem --tls-key key.pem -u username -p password
If no TLS certificate is provided, vproxy will automatically generate a self-signed certificate for HTTPS connections.
- SOCKS5 Proxy
# Basic SOCKS5 proxy
vproxy run socks5
# SOCKS5 proxy with authentication
vproxy run socks5 -u username -p password
# SOCKS5 proxy on custom port
vproxy run --bind 0.0.0.0:1080 socks5
- Auto Protocol Detection
# Auto-detect HTTP/HTTPS/SOCKS5 protocols on single port
vproxy run auto
# Auto-detect with HTTPS support
vproxy run auto --tls-cert cert.pem --tls-key key.pem
# Auto-detect with authentication
vproxy run auto -u username -p password --tls-cert cert.pem --tls-key key.pem
The auto-detection server automatically identifies the protocol type and routes connections to the appropriate handler.
- TTL Extension
Append -ttl-
to the username, where TTL is a fixed value (e.g., username-ttl-2
). The TTL value is the number of requests that can be made with the same IP. When the TTL value is reached, the IP will be changed.
- Session Extension
Append -session-id
to the username, where session is a fixed value and ID is an arbitrary random value (e.g., username-session-123456
). Keep the Session ID unchanged to use a fixed IP.
- Range Extension
Append -range-id
to the username, where range is a fixed value and ID is any random value (e.g. username-range-123456
). By keeping the Range ID unchanged, you can use a fixed CIDR range in a fixed range. in addition, you must set the startup parameter --cidr-range
, and the length is within a valid range.
- Http proxy session with username and password:
vproxy run --bind 127.0.0.1:1080 -i 2001:470:70c6::/48 http -u test -p test
$ for i in `seq 1 10`; do curl -x "http://test-session-123456789:[email protected]:1080" https://api6.ipify.org; done
2001:470:70c6:93ee:9b7c:b4f9:4913:22f5
2001:470:70c6:93ee:9b7c:b4f9:4913:22f5
2001:470:70c6:93ee:9b7c:b4f9:4913:22f5
$ for i in `seq 1 10`; do curl -x "http://test-session-987654321:[email protected]:1080" https://api6.ipify.org; done
2001:470:70c6:41d0:14fd:d025:835a:d102
2001:470:70c6:41d0:14fd:d025:835a:d102
2001:470:70c6:41d0:14fd:d025:835a:d102
- Socks5 proxy session with username and password
vproxy run --bind 127.0.0.1:1080 -i 2001:470:70c6::/48 socks5 -u test -p test
$ for i in `seq 1 3`; do curl -x "socks5h://test-session-123456789:[email protected]:1080" https://api6.ipify.org; done
2001:470:70c6:93ee:9b7c:b4f9:4913:22f5
2001:470:70c6:93ee:9b7c:b4f9:4913:22f5
2001:470:70c6:93ee:9b7c:b4f9:4913:22f5
$ for i in `seq 1 3`; do curl -x "socks5h://test-session-987654321:[email protected]:1080" https://api6.ipify.org; done
2001:470:70c6:41d0:14fd:d025:835a:d102
2001:470:70c6:41d0:14fd:d025:835a:d102
2001:470:70c6:41d0:14fd:d025:835a:d102
- TTL proxy session with username and password
vproxy run --bind 127.0.0.1:1080 -i 2001:470:70c6::/48 socks5 -u test -p test
$ for i in `seq 1 3`; do curl -x "socks5h://test-ttl-2:[email protected]:1080" https://api6.ipify.org; done
2001:470:70c6:93ee:9b7c:b4f9:4913:22f5
2001:470:70c6:93ee:9b7c:b4f9:4913:22f5
2001:470:70c6:93ee:9b7c:b4f9:4913:22f6
$ for i in `seq 1 3`; do curl -x "socks5h://test-ttl-2:[email protected]:1080" https://api6.ipify.org; done
2001:470:70c6:41d0:14fd:d025:835a:d102
2001:470:70c6:41d0:14fd:d025:835a:d102
2001:470:70c6:41d0:14fd:d025:835a:d105
If you would like to submit your contribution, please open a Pull Request.
Your question might already be answered on the issues