NyxProxy-OSS
High-Performance Proxy Server with Automatic IPv6 Rotation - Get a new IPv6 address for every request from your own /64 subnet!
π Table of Contents
π― Why NyxProxy?
NyxProxy is a **proxy server that gives you a diffβ¦
NyxProxy-OSS
High-Performance Proxy Server with Automatic IPv6 Rotation - Get a new IPv6 address for every request from your own /64 subnet!
π Table of Contents
π― Why NyxProxy?
NyxProxy is a proxy server that gives you a different IPv6 address for every request - automatically!
The Problem
Most proxies use a single IP address, which makes you:
- β Easy to track across requests
- β Vulnerable to rate limiting
- β Identifiable by fingerprinting
- β Blocked after too many requests
The Solution: IPv6 Rotation
NyxProxy uses your providerβs IPv6 /64 subnet (thatβs 18 quintillion IPs!) to rotate automatically:
- β Different IP for each request - appears as different users
- β No rate limiting - each IP is βfreshβ and unused
- β Anti-fingerprinting - impossible to track across requests
- β Intelligent rotation - IPs are replaced after 100 uses or 30 minutes
- β Fast - pre-populated pool of 200 IPs ready to use
Real-World Use Cases
- Web Scraping: Avoid rate limits by appearing as different users
- API Testing: Test with multiple βusersβ from different IPs
- Privacy: Each request appears to come from a different source
- Load Distribution: Spread load across multiple IPs
β¨ Key Features
π Automatic IPv6 Rotation (Main Feature!)
- 200+ IPv6 addresses in rotation pool
- Intelligent rotation: Replace IPs after 100 uses OR 30 minutes
- Fully configurable: Adjust pool size, rotation frequency, and age
- Background refresh: Old IPs are automatically replaced
- No manual intervention: Set it and forget it
π Performance
- < 100ms per request - pre-populated IP pool
- Concurrent connections - handle thousands of connections
- Efficient rotation - no delays or blocking
π§ Flexible Configuration
- SOCKS5 or HTTPS proxy - choose your protocol
- IPv4 + IPv6 support - dual stack capable
- Interface selection - auto-detect or manual
- Authentication - username/password protection
- Monitoring endpoint - built-in health checks
π§ Linux Native
- Debian/Ubuntu - one-command setup
- Systemd service - run as daemon
- Auto-start on boot - reliable deployment
- ARM64 support - Raspberry Pi compatible
π How IPv6 Rotation Works
Understanding IPv6 /64 Subnets
When you rent a server from providers like Vultr, OVH, Hetzner, you get:
- 1 primary IPv6 address (e.g.,
2a05:f480:1800:25db::1) - 1 entire /64 subnet (e.g.,
2a05:f480:1800:25db::/64)
What does /64 mean?
- The first 64 bits are your subnet prefix
- The last 64 bits can be any value you want
- Thatβs
2^64 = 18,446,744,073,709,551,616possible IPv6 addresses!
NyxProxyβs Smart Rotation
Your /64 Subnet: 2a05:f480:1800:25db::/64
βββββββββββ¬βββββββββββββcan be anythingββ
Your prefix (fixed) Your IPs (18 quintillion!)
NyxProxy generates random IPs:
ββ 2a05:f480:1800:25db:1a2b:3c4d:5e6f:7890 β Request 1
ββ 2a05:f480:1800:25db:9988:7766:5544:3322 β Request 2
ββ 2a05:f480:1800:25db:aaaa:bbbb:cccc:dddd β Request 3
ββ ... (200 IPs in pool, automatically rotated)
The 3-Stage Process
Stage 1: Startup (20-30 seconds)
1. Generate 200 random IPs from your /64 subnet
2. Add each IP to your network interface
3. Ready! All IPs can be used immediately
Stage 2: Request Handling (< 100ms)
1. New proxy request comes in
2. Pick next IP from pool (round-robin)
3. Bind outgoing connection to this IP
4. Track usage (count++, lastUsed = now)
Stage 3: Background Rotation (every 5 minutes)
Check each IP:
- Used 100+ times? β Replace with fresh IP
- Older than 30min? β Replace with fresh IP
- Otherwise: Keep it
π Quick Start
One-Command Setup (Debian/Ubuntu)
The easiest way to get started - just one command:
wget https://raw.githubusercontent.com/jannik-schroeder/nyxproxy-oss/main/scripts/quick-setup.sh && chmod +x quick-setup.sh && sudo ./quick-setup.sh
Thatβs it! The script will:
- Auto-detect your network interface and IPv6 subnet
- Install and configure ndppd (NDP proxy daemon)
- Set kernel parameters for IPv6 routing
- Create optimized config.yaml with your settings
- Download the latest NyxProxy binary from GitHub releases
- Optionally install as systemd service (daemon mode)
- Optionally start the proxy immediately
During setup youβll be asked:
- Proxy username (default: admin)
- Proxy password (required)
- IP pool size (default: 200)
- Max uses per IP (default: 100)
- IP age limit in minutes (default: 30)
- Install as systemd service? (y/N)
- Start NyxProxy now? (Y/n)
Expected output:
β IPv6 rotation mode: IP Pool with dynamic rotation
Interface: enp1s0
Subnet: 2a05:f480:1800:25db::/64
Pool size: 200 IPs
Rotation: Every 100 uses or 30m0s
Initializing IP pool...
Progress: 50/200 IPs added
Progress: 100/200 IPs added
Progress: 150/200 IPs added
Progress: 200/200 IPs added
β IP pool ready with 200 addresses
β Background IP rotation started
Starting https proxy on 0.0.0.0:8080 (Protocol: IPv6)
Manual Setup
Click to expand manual setup instructions
1. Download NyxProxy
wget https://github.com/jannik-schroeder/nyxproxy-oss/releases/latest/download/nyxproxy-linux-amd64 -O nyxproxy
chmod +x nyxproxy
2. Configure IPv6 Rotation
# Install ndppd
sudo apt update && sudo apt install -y ndppd
# Create ndppd config
sudo tee /etc/ndppd.conf <<EOF
route-ttl 30000
proxy enp1s0 {
router no
timeout 500
ttl 30000
rule 2a05:f480:1800:25db::/64 {
auto
}
}
EOF
# Set kernel parameters
sudo sysctl -w net.ipv6.conf.all.proxy_ndp=1
sudo sysctl -w net.ipv6.conf.enp1s0.proxy_ndp=1
sudo sysctl -w net.ipv6.ip_nonlocal_bind=1
# Start ndppd
sudo systemctl enable ndppd
sudo systemctl start ndppd
3. Create config.yaml
proxy:
type: https
listen_address: "0.0.0.0"
listen_port: 8080
username: "admin"
password: "your-secure-password"
network:
interface_name: "enp1s0" # Your interface
ipv4_enabled: false
ipv6_enabled: true
rotate_ipv6: true
ipv6_subnet: "2a05:f480:1800:25db::/64" # Your /64 subnet
# Rotation settings
ipv6_pool_size: 200 # Number of IPs in pool
ipv6_max_usage: 100 # Replace after 100 uses
ipv6_max_age: 30 # Replace after 30 minutes
monitoring:
enabled: true
port: 9090
allow_remote: false
logging:
debug_level: 0
4. Start NyxProxy
./nyxproxy
βοΈ Configuration
Basic Configuration
proxy:
type: https # or "socks5"
listen_address: "0.0.0.0"
listen_port: 8080
username: "admin"
password: "secure-password"
IPv6 Rotation Settings
network:
rotate_ipv6: true
ipv6_subnet: "2a05:f480:1800:25db::/64"
# Pool configuration
ipv6_pool_size: 200 # Number of IPs (default: 200)
ipv6_max_usage: 100 # Max uses per IP (default: 100)
ipv6_max_age: 30 # Max age in minutes (default: 30)
Rotation Strategies
Aggressive (Anti-Fingerprinting)
ipv6_pool_size: 500 # Lots of IPs
ipv6_max_usage: 25 # Replace quickly
ipv6_max_age: 10 # Short lifetime
β Maximum privacy, IPs change frequently
Moderate (Recommended)
ipv6_pool_size: 200 # Good balance
ipv6_max_usage: 100 # Standard
ipv6_max_age: 30 # 30 minutes
β Best balance between performance and privacy
Conservative (Performance)
ipv6_pool_size: 100 # Fewer IPs, faster startup
ipv6_max_usage: 500 # Use IPs longer
ipv6_max_age: 120 # 2 hours
β Less overhead, better performance
π§ Running as Daemon (Systemd)
Create Systemd Service
sudo tee /etc/systemd/system/nyxproxy.service <<EOF
[Unit]
Description=NyxProxy IPv6 Rotating Proxy Server
After=network.target ndppd.service
Requires=ndppd.service
[Service]
Type=simple
User=root
WorkingDirectory=/root
ExecStart=/root/nyxproxy
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
# Security hardening (optional)
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
Manage Service
# Enable auto-start on boot
sudo systemctl enable nyxproxy
# Start service
sudo systemctl start nyxproxy
# Check status
sudo systemctl status nyxproxy
# View logs
sudo journalctl -u nyxproxy -f
# Restart service
sudo systemctl restart nyxproxy
# Stop service
sudo systemctl stop nyxproxy
π» Usage Examples
cURL
# Single request
curl --proxy http://admin:password@your-server:8080 https://api6.ipify.org
# 10 requests - each with different IPv6
for i in {1..10}; do
echo "Request $i:"
curl --proxy http://admin:password@your-server:8080 https://api6.ipify.org
done
Python
import requests
proxies = {
'http': 'http://admin:password@your-server:8080',
'https': 'http://admin:password@your-server:8080'
}
# Each request uses a different IPv6
for i in range(10):
response = requests.get('https://api6.ipify.org', proxies=proxies)
print(f"Request {i+1}: {response.text}")
Node.js
const axios = require('axios');
const proxy = {
host: 'your-server',
port: 8080,
auth: {
username: 'admin',
password: 'password'
}
};
// Each request uses a different IPv6
for (let i = 0; i < 10; i++) {
axios.get('https://api6.ipify.org', { proxy })
.then(res => console.log(`Request ${i+1}: ${res.data}`));
}
π IPv6 Rotation Explained
Why 200 IPs in the Pool?
Startup Time vs. Diversity Trade-off:
- More IPs = Longer startup (but only once!)
- More IPs = More diversity, less repetition
- 200 IPs is the sweet spot for most use cases
Calculation:
200 IPs Γ 100 uses = 20,000 requests before first rotation
20,000 requests Γ· 100 req/min = 200 minutes of unique IPs
Why Replace After 100 Uses?
Rate Limiting Protection:
- Most APIs rate-limit per IP
- 100 requests is typically below most thresholds
- After 100 uses, IP is βburnedβ β replace it
Why Replace After 30 Minutes?
Time-Based Tracking:
- Some services track IPs over time
- Fresh IPs are less likely to be flagged
- 30 minutes is a good balance
Background Rotation
Every 5 minutes, NyxProxy checks all IPs:
For each IP in pool:
If (usageCount >= 100) OR (age > 30 minutes):
1. Remove old IP from interface
2. Generate new random IP
3. Add new IP to interface
4. Update pool
Example log:
14:35:00 - β Rotated 12 IPs (used 100+ times)
15:05:00 - β Rotated 8 IPs (age 30m+)
15:35:00 - β Rotated 5 IPs (used 100+ times)
π Requirements
Server Requirements
- OS: Linux (Debian, Ubuntu, CentOS, etc.)
- Architecture: amd64 or arm64
- RAM: >= 512 MB
- Disk: >= 100 MB
Network Requirements
-
IPv6 /64 subnet routed to your server
-
Supported providers:
-
β Vultr (recommended)
-
β OVH
-
β Hetzner Dedicated Servers
-
β Online.net
-
β DigitalOcean (only /124, too small)
-
β AWS (IPv6 requires extra config)
Check Your Setup
# Check if you have a /64 subnet
ip -6 addr show | grep "scope global"
# Should show something like:
# inet6 2a05:f480:1800:25db::1/64 scope global
# Test IPv6 connectivity
ping6 google.com
# Check if ndppd is installed
which ndppd
π§ Troubleshooting
Problem: βCannot find device βββ
Cause: Network interface not configured
Solution:
# Find your interface
ip link show
# Set in config.yaml
network:
interface_name: "enp1s0" # Your interface name
Problem: βndppd service is not runningβ
Cause: ndppd not installed or configured
Solution:
# Install ndppd
sudo apt install -y ndppd
# Or run setup script
sudo ./scripts/quick-setup.sh
Problem: Requests timeout
Cause: IPs not properly routed
Solution:
# Check if subnet is routed to you
curl --interface 2a05:f480:1800:25db::9999 -6 https://api6.ipify.org
# If it works, the subnet is routed correctly
# If not, contact your provider
Problem: Slow startup
Cause: Large IP pool
Solution:
# Reduce pool size for faster startup
network:
ipv6_pool_size: 100 # Instead of 200
View Logs
# NyxProxy logs (if running as service)
sudo journalctl -u nyxproxy -f
# ndppd logs
sudo journalctl -u ndppd -f
# Check system logs
dmesg | grep -i ipv6
π Advanced Usage
Multiple Proxy Instances
Run multiple proxies on different ports:
# config-8080.yaml
proxy:
listen_port: 8080
# config-8081.yaml
proxy:
listen_port: 8081
./nyxproxy & # Uses config.yaml on port 8080
./nyxproxy -config config-8081.yaml & # Port 8081
Monitoring
# Check proxy stats
curl http://localhost:9090/stats
# Output:
# {
# "active_connections": 45,
# "total_requests": 12543,
# "ip_pool_size": 200,
# "ips_rotated": 38
# }
π License
MIT License - see LICENSE file for details.
π€ Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
π Acknowledgments
- Built with Go
- Uses ndppd for NDP proxy functionality
- Inspired by the need for better proxy rotation
π Support
- Issues: GitHub Issues
- Documentation: See
docs/folder - German Documentation: See
SETUP_DE.md
Made with β€οΈ for the privacy-conscious and web scraping community