Pull to refresh

Всегда получаем «белый» IP от Ростелеком с помощью OpenWrt

Уже два года как Ростелеком выдает абонентам адреса из диапазона 100.64.0.0/10, описанные в RFC 6598. Но при этом выдает не всегда. Не знаю, как именно назначается адрес, но на практике при подключении есть приличный шанс оказаться не в провайдерском NAT, а получить белый IP. При этом PPPoE соединение провайдер разрывает через сутки, поэтому один раз получить адрес и долго использовать его не выйдет. Напрашивается простой скрипт, который проверял бы адрес на принадлежность 100.64.0.0/10 и переподключал PPPoE, если адрес принадлежал подсети.

В OpenWrt каждый раз, когда интерфейс поднимается/опускается в алфавитном порядке выполняются скрипты в /etc/hotplug.d/iface/. Скрипту передаются три переменные:

  • ACTION — ifup или ifdown, при подключении/отключении соответственно
  • INTERFACE — название виртуального (логического) интерфейса (т.е. wan или ppp0)
  • DEVICE — название физического интерфейса (т.е. eth0.1 или br-lan)

Подробнее здесь. Создаем файл, например, /etc/hotplug.d/iface/26-grey (цифра означает порядок запуска) со следующим содержимым:

#!/bin/sh

if [ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ]; then     #проверяем событие и название интерфейса

. /lib/functions/network.sh; network_get_ipaddr ip wan     #получаем адрес интерфейса, адрес передается в переменную ip
_ip=$(echo $ip | grep -v -E "(^100\.6[4-9]\.|^100\.[7-9][0-9]\.|^100\.1[0-1][0-9]\.|^100\.12[0-7]\.)") #проверяем адрес на принадлежность диапазону 100.64.0.0/10
[ -z "$_ip" ]  && logger -t grey_ip "Reloading wan due grey IP - $ip" && ifup wan #переподключаем интерфейс wan, пишем в syslog
fi
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.