iv-org / smart-ipv6-rotator

IPv6 rotator for specific subnets - unblock restrictions on IPv6 enabled websites (Google by default but customizable for others)
GNU Affero General Public License v3.0
81 stars 11 forks source link

Smart IPv6 Rotator

Smart IPv6 Rotator is a command-line tool designed to rotate IPv6 addresses for specific subnets, enabling users to bypass restrictions on IPv6-enabled websites.

Upgrading

If you are already running this script, please run sudo python smart-ipv6-rotator.py clean before upgrading it to avoid any issues.

Requirements

How to setup (very simple tutorial for Google)

Full detailed documentation: https://docs.invidious.io/ipv6-rotator/

  1. Git clone the repository somewhere.
  2. Find your IPv6 subnet. If you do not know it, you can use a tool like http://www.gestioip.net/cgi-bin/subnet_calculator.cgi
  3. Run once the script using sudo python smart-ipv6-rotator.py run --ipv6range=YOURIPV6SUBNET/64
  4. If everything went well then configure a cron to periodically rotate your IPv6 range. Twice a day (noon and midnight) is enough for YouTube servers. Also at the reboot of the server!
    Example crontab (crontab -e -u root):
    @reboot sleep 30s && python smart-ipv6-rotator.py run --cron --ipv6range=YOURIPV6SUBNET/64
    0 */12 * * * python smart-ipv6-rotator.py run --cron --ipv6range=YOURIPV6SUBNET/64

    The sleep command is used in case your network takes too much time time to be ready.

Docker image

https://quay.io/repository/invidious/smart-ipv6-rotator

How to clean the configuration done by the script

sudo python smart-ipv6-rotator.py clean

Only works if the script did not crash. But in case of a crash, in most case the system should auto rollback the changes.

Usage

smart-ipv6-rotator.py [-h] {run,clean-one,clean} ...

Options

Subcommands

  1. run: Run the IPv6 rotator process.
  2. clean-one: Clean your system for a given service / IPv6 ranges.
  3. clean: Clean all configurations made by this script.

run Subcommand

smart-ipv6-rotator.py run [-h] [--services {google}] [--external-ipv6-ranges EXTERNAL_IPV6_RANGES] [--skip-root] [--no-services] --ipv6range IPV6RANGE

Options


clean Subcommand

smart-ipv6-rotator.py clean [-h] [--skip-root]

Options


clean-one Subcommand

smart-ipv6-rotator.py clean-one [-h] [--services {google}] [--external-ipv6-ranges EXTERNAL_IPV6_RANGES] [--skip-root] [--no-services]

Options


Why does this need root privileges?

You can only modify the network configuration of your server using root privileges.
The attack surface of this script is very limited as it is not running in the background, it's a one shot script.

How does this script work?

  1. First it check that you have IPv6 connectivity.
  2. It automatically find the default IPv6 gateway and automatically generate a random IPv6 address from the IPv6 subnet that you configured.
  3. It adds the random IPv6 address to the network interface.
  4. It configures route for only using that new random IPv6 address for the specific IPv6 subnets (Google ipv6 ranges by default).
    This way your current ipv6 network configuration is untouched and any change done by the script is temporary.

TODO (priority)

High