LINUX.ORG.RU
решено ФорумAdmin

iproute2 и динамический ip


0

1

Существует следующая задача: имеется комп, на который приходит интернет от 2 провайдеров. 1 провайдер дает постоянный ip, а второй - динамику. Необходимо, чтобы извне комп был доступен по адресам обоих провайдеров. Исходящий трафик по дефолту будет уходить через провайдера №1. В случае, если он ложится, то меняем дефолт на провайдера №2. Ip от провайдера №2 может обновиться в любое время. Он заставляет запрашивать его каждые полминуты. Понятно, что нужно использовать iproute2. Решил использовать так.

#!/bin/sh
ip route add $P1_NET dev $IF1 src $IP1 table ER
ip route add default via $P1 table ER
ip route add $P2_NET dev $IF2 src $IP2 table VT
ip route add default via $P2 table VT
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
ip route add default via $P1
ip rule add from $IP1 table VT
ip rule add from $IP2 table VT
ip route add $P0_NET     dev $IF0 table ER
ip route add $P2_NET     dev $IF2 table ER
ip route add 127.0.0.0/8 dev lo   table ER
ip route add $P0_NET     dev $IF0 table VT
ip route add $P1_NET     dev $IF1 table VT
ip route add 127.0.0.0/8 dev lo   table VT
Но $IP2, $P2, $P2_NET могут в любой момент смениться. Соответственно при смене их необходимо выяснить новые полученные данные, удалить старые маршруты для провайдера №2, изменить переменные и применить новые маршруты. Самое непонятное на данный момент- это откуда взять полученные dhcp-client данные. Дальше, как я понимаю, они с помощью sed должны будут вписаться в скрипт и скрипт запускается на исполнение. У кого-нибудь есть варианты как все это провернуть?


откуда взять полученные dhcp-client данные.

получить по email. Или я не очень правильно понял вопрос ?

dada ★★★★★
()
Ответ на: комментарий от zolden

этим решается вопрос только с $IP2. Остаются $P2, $P2_NET. Это сеть и адрес шлюза.

fry
() автор топика

откуда взять полученные dhcp-client данные

ip route, ip addr же

для извращенцев можно попарсить /var/lib/dhcp/dhclient.leases

lazyklimm ★★★★★
()

В этот скрипт данные не надо вписывать, он только добавляет маршруты, не удаляя старые. И зачем вам 127.0.0.0/8, неужели у вас убрано правило «from all lookup local» ?

А так, некоторые версии dhcp-клиентов (допустим dhclient) умеют вызывать скрипт и вам нужно написать правильный скрипт и положить его куда надо, чтобы он правил маршуты только в нужной таблице.

mky ★★★★★
()
Ответ на: комментарий от lazyklimm

ip route не подойдет, так как там уже скриптом данные изменены. из ip addr можно выдернуть адрес сети. из /var/lib/dhcp/dhclient.eth2.leases адрес шлюза. решение, конечно, достаточно корявое, но выбора нет. Теперь буду прикручивать. спасибо за наводку, а то затуп поймал:)

fry
() автор топика
Ответ на: комментарий от fry

ip route не подойдет, так как там уже скриптом данные изменены

разве при получении лиза маршруты не перепишутся?

lazyklimm ★★★★★
()
Ответ на: комментарий от mky

Плюсую mky и вариант с dhcp-hook'ами. Там тебе и $new_ip_address, и $interface, и $new_subnet_mask и вообще любая полученная опция доступна с приставкой new_. Короче man dhclient-script

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.