Skills vpn-rotate-skill
Bypass API rate limits by rotating VPN servers. Works with any OpenVPN-compatible VPN (ProtonVPN, NordVPN, Mullvad, etc.). Automatically rotates to new server every N requests for fresh IPs. Use for high-volume scraping, government APIs, geo-restricted data.
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/acastellana/vpn-rotate-skill" ~/.claude/skills/openclaw-skills-vpn-rotate-skill && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/acastellana/vpn-rotate-skill" ~/.openclaw/skills/openclaw-skills-vpn-rotate-skill && rm -rf "$T"
manifest:
skills/acastellana/vpn-rotate-skill/SKILL.mdsource content
VPN Rotate Skill
Rotate VPN servers to bypass API rate limits. Works with any OpenVPN-compatible VPN.
Setup
1. Run Setup Wizard
./scripts/setup.sh
This will:
- Check OpenVPN is installed
- Help you configure your VPN provider
- Set up passwordless sudo
- Test the connection
2. Manual Setup
If you prefer manual setup:
# Install OpenVPN sudo apt install openvpn # Create config directory mkdir -p ~/.vpn/servers # Download .ovpn files from your VPN provider # Put them in ~/.vpn/servers/ # Create credentials file echo "your_username" > ~/.vpn/creds.txt echo "your_password" >> ~/.vpn/creds.txt chmod 600 ~/.vpn/creds.txt # Enable passwordless sudo for openvpn echo "$USER ALL=(ALL) NOPASSWD: /usr/sbin/openvpn, /usr/bin/killall" | sudo tee /etc/sudoers.d/openvpn
Usage
Decorator (Recommended)
from scripts.decorator import with_vpn_rotation @with_vpn_rotation(rotate_every=10, delay=1.0) def scrape(url): return requests.get(url).json() # Automatically rotates VPN every 10 calls for url in urls: data = scrape(url)
VPN Class
from scripts.vpn import VPN vpn = VPN() # Connect vpn.connect() print(vpn.get_ip()) # New IP # Rotate (disconnect + reconnect to different server) vpn.rotate() print(vpn.get_ip()) # Different IP # Disconnect vpn.disconnect()
Context Manager
from scripts.vpn import VPN vpn = VPN() with vpn.session(): # VPN connected for url in urls: vpn.before_request() # Handles rotation data = requests.get(url).json() # VPN disconnected
CLI
python scripts/vpn.py connect python scripts/vpn.py status python scripts/vpn.py rotate python scripts/vpn.py disconnect python scripts/vpn.py ip
Configuration
Decorator Options
@with_vpn_rotation( rotate_every=10, # Rotate after N requests delay=1.0, # Seconds between requests config_dir=None, # Override config directory creds_file=None, # Override credentials file country=None, # Filter servers by country prefix (e.g., "us") auto_connect=True, # Connect automatically on first request )
VPN Class Options
VPN( config_dir="~/.vpn/servers", creds_file="~/.vpn/creds.txt", rotate_every=10, delay=1.0, verbose=True, )
Recommended Settings
| API Aggressiveness | rotate_every | delay |
|---|---|---|
| Aggressive (Catastro, LinkedIn) | 5 | 2.0s |
| Standard | 10 | 1.0s |
| Lenient | 20-50 | 0.5s |
Files
vpn-rotate-skill/ ├── SKILL.md # This file ├── README.md # Overview ├── scripts/ │ ├── vpn.py # VPN controller │ ├── decorator.py # @with_vpn_rotation │ └── setup.sh # Setup wizard ├── examples/ │ └── catastro.py # Spanish property API example └── providers/ ├── protonvpn.md # ProtonVPN setup ├── nordvpn.md # NordVPN setup └── mullvad.md # Mullvad setup
Troubleshooting
"sudo: a password is required"
Run the setup script or manually add sudoers entry:
echo "$USER ALL=(ALL) NOPASSWD: /usr/sbin/openvpn, /usr/bin/killall" | sudo tee /etc/sudoers.d/openvpn
Connection fails
- Check credentials are correct
- Test manually:
sudo openvpn --config ~/.vpn/servers/server.ovpn --auth-user-pass ~/.vpn/creds.txt - Check VPN provider account is active
Still getting blocked
- Lower
(try 5 instead of 10)rotate_every - Increase
(try 2-3 seconds)delay - Check if API blocks VPN IPs entirely
No .ovpn files
Download from your VPN provider:
- ProtonVPN: https://protonvpn.com/support/vpn-config-download/
- NordVPN: https://nordvpn.com/ovpn/
- Mullvad: https://mullvad.net/en/account/#/openvpn-config