Преамбула.
Дело в том, что у меня на рабочем компьютере поднимаются сразу несколько VPN-тоннелей. Для работы, сразу с двумя офисами, здесь, в Италии, и до основного, два бесплатных VPN для разных Интернет-сервисов, один из которых должен предоставлять маршрут по умолчанию, местный тоннель (пофлудить на скрытом форуме). Для всего этого зоопарка заведены соответствующие таблицы маршрутизации в файле /etc/iproute2/rt_tables
. Понятно, что после того, как тоннели поднялись, в соответствующие таблицы надо прописать соответствующие маршруты по умолчанию. DHCP в данном случае применим с огромным геморроем, маршруты надо прописывать вручную, но это тоже не менее геморройная задача, т.к. провайдеры иногда меняют шлюзы, я меняю провайдеров VPN, админы тоже могут изменить шлюз и/или выделенный IP. В общем, задолбало меня все руками перенастравивать и я решил написать скрипт, который это будет делать за меня. Заодно вспомнить bash, где знал, и узнать что-то новое, где не знал.
Будем исходить из того, что имеется уже поднятый VPN-тоннель и нам необходимо прописать в нужную таблицу нужный маршрут по-умолчанию.
Откуда взять нужные ip.
Из вывода команды ifconfig
. В моей системе вывод ifconfig pppX
, где X, номер соответствующего интерфейса ppp выглядит так:
ppp1: flags=4305 <UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1396
inet x.x.x.x netmask 255.255.255.255 destination y.y.y.y
ppp txqueuelen 3 (Point-to-Point Protocol)
RX packets 2055 bytes 1502924 (1.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1747 bytes 179542 (175.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Где x.x.x.x
– IP, присвоенный машине провайдером VPN, а y.y.y.y
– IP шлюза провайдера, через который и должен пролегать маршрут.
Команды для установки маршрутизации
Команда добавления маршрута в соответствующую таблицу выглядит примерно так:
ip route add default dev имя_тоннеля via адрес_шлюза src адрес_машины table таблица
Например:
ip route add default dev ppp1 via 10.1.15.1 src 10.1.22.12 table suomi_office
Если таблица не указана (параметр table отсутствует), то маршрут будет установлен, как маршрут по умолчанию.
Обязательными параметрами в данном случае является указание на соответствующий шлюз (dev), остальные – дополнительные.
Для удаления маршрута по умолчанию используется команда:
ip route del default table таблица
или
ip route del default
для удаления основного маршрута по-умолчанию.
Что должен делать скрипт
Основное:
1. Проверить, действительно ли поднят указанный интерфейс
2. Есть ли в файле /etc/iproute2/rt_tables
соответствующая таблица маршрутизации, если таблица не указана – установить основной маршрут по умолчанию
3. Получить нужные IP
4. Вывести на экран summary – полученные IP и параметры.
5. Установить маршрутизацию, сообщив об успехе, либо ошибке
Дополнительно:
1. Проверить корректность заданных параметров
2. Вывести справку по собственным параметрам при наличии запроса, либо при запуске без параметров.
3. Иметь возможность указать или не указать необязательные параметры для команды маршрутизации.
Read more…
Приложение. Используемая литература и скрипт целиком.
1. Краткое описание команды if. Копия
2. Краткое описание команды awk Копия
3. Скрипт. Копия на pastebin.
Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/290649.html
Прокомментировать заметку можно по ссылке выше.