FreeBSD - проблема снятия маршрута для Выданного IP

Azudim
Сообщения: 72
Зарегистрирован: Вс фев 13, 2005 4:40 pm
Откуда: Moscow
Контактная информация:

FreeBSD - проблема снятия маршрута для Выданного IP

Сообщение Azudim »

Многие возможно сталкивались с ошибкой соединения:
ppp.log
Oct 8 05:55:26 ns ppp[81939]: Warning: iface add: ioctl(SIOCAIFADDR, 10.0.0.1 -> 10.0.0.10): File exists
Oct 8 05:55:26 ns ppp[81939]: Warning: iface add: ioctl(SIOCAIFADDR, 10.0.0.1 -> 10.0.0.10): File exists
Причина - не создается запись в таблице маршрутизации для выдаваемого адреса, т.к. она уже создана (не была корректно удалена после разрыва соединения)
Вручную решается так: route delete 10.0.0.10 (т.е. наш адрес из настроек пользователя)
костыли в скриптах linkup.ppp не спасают, т.к. скрипт запускается на стадию позже, чем добавление маршрута.

мне помогло такое решение: (не для rlm_perl)

в /usr/abills/rauth.pl после строки %RAD_REPLY (находите поиском. в 4.0rel версии это примерно 170 строка) вставляем вот такой кусок кода:

Код: Выделить всё

if (defined $RAD_REPLY{'Framed-IP-Address'}) {                                
    my $framed_ip = $RAD_REPLY{'Framed-IP-Address'};                          
    my $del_route = `sh -c "/sbin/route -v delete $framed_ip"  >> /var/log/ppp_route.log`;
   }
По теме:
netstat -r #посмотреть список маршрутов
route get 10.0.0.0 #маршрут для конкретного адреса
/usr/local/sbin/radiusd -X #запуск Radiusd сервера в режиме мониторинга

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

Причина - не создается запись в таблице маршрутизации для выдаваемого адреса, т.к. она уже создана (не была корректно удалена после разрыва соединения)
вот за это (не только конечно ;) ) я и люблю линух... там такая кака невозможна в принципе :D

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

Попахивает фанатизмом... кака возможна везде и повсюду если руки без антикака.

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

chtito2 писал(а):Попахивает фанатизмом... кака возможна везде и повсюду если руки без антикака.
дану - такуж и везде... в линухе ппп туннель создаётся на динамический ифейс (жив туннель - есть ифейс, нет туннеля - нету ифейса - на уровне ядра) и маршрут на ип другого конца туннеля прописывается на ифейс туннеля (а не накакой-то там ип). Соответственно - нет туннеля - нету ифейса - нету маршрута

А теперь организуй мне под линухом (намеренно, а не как там: "не была корректно удалена после разрыва соединения") вышеописанную каку - $100 как с куста :D

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

/usr/abills/libexec/billd checkppp


создан для удаления интерфейсов не попавших или выпавших их мониторинга системы

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

ran писал(а):в линухе ппп туннель создаётся на динамический ифейс (жив туннель - есть ифейс, нет туннеля - нету ифейса - на уровне ядра) и маршрут на ип другого конца туннеля прописывается на ифейс туннеля (а не накакой-то там ип). Соответственно - нет туннеля - нету ифейса - нету маршрута
FreeBSD:

# ifconfig ppp0 create
# ifconfig ppp0 10.0.0.1 10.0.0.10
# route -n get 10.0.0.10
route to: 10.0.0.10
destination: 10.0.0.10
interface: ppp0
flags: <UP,HOST,DONE>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1500 0
# ifconfig ppp0 destroy
# route -n get 10.0.0.10
route to: 10.0.0.10
destination: default
mask: default
gateway: 192.168.0.1
interface: le0
flags: <UP,GATEWAY,DONE,STATIC>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1500 0
#
А теперь организуй мне под линухом (намеренно, а не как там: "не была корректно удалена после разрыва соединения") вышеописанную каку - $100 как с куста :D
# ip route add 1.2.3.4 via 10.0.0.10
# ip route add 1.2.3.4 via 10.0.0.10
RTNETLINK answers: File exists
#
Последний раз редактировалось chtito2 Вс окт 12, 2008 8:18 am, всего редактировалось 1 раз.

Azudim
Сообщения: 72
Зарегистрирован: Вс фев 13, 2005 4:40 pm
Откуда: Moscow
Контактная информация:

Сообщение Azudim »

~AsmodeuS~ писал(а):/usr/abills/libexec/billd checkppp
создан для удаления интерфейсов не попавших или выпавших их мониторинга системы
Отлично работает, снимает интерфейс и маршрут, но только после того как сессия попадет в Zap или уже из него в обсчет, а до этого момента интерфейс и запись в таблице маршрутизации будут висеть. (если интервал прихода аливов выставлен в 60сек, соотв 4-5 минут нельзя будет установить ppp соединение).

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

chtito2 писал(а):
ran писал(а):А теперь организуй мне под линухом (намеренно, а не как там: "не была корректно удалена после разрыва соединения") вышеописанную каку - $100 как с куста :D
# ip route add 1.2.3.4 via 10.0.0.10
# ip route add 1.2.3.4 via 10.0.0.10
RTNETLINK answers: File exists
#
и что ты хотел этим сказать? сам хоть понял? :D

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

Неа, главное чтобы вы поняли ;)

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

chtito2 писал(а):Неа, главное чтобы вы поняли ;)
ты пытаешься прописать 1 и тот же маршрут через 1 и тот же шлюз на что тебе справедливо грят что рут уже есть... вернёмся к моему вопросу
ran писал(а):и что ты хотел этим сказать?
1. если нада заменить рут в случае его существования или добавить в противном случае то это делается так:

ip ro replace 1.2.3.4 ...

2. какое отношение это имеет к
ran писал(а):А теперь организуй мне под линухом (намеренно, а не как там: "не была корректно удалена после разрыва соединения") вышеописанную каку - $100 как с куста
:D

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

2. какое отношение это имеет к
Вы предложили добиться ошибки аналогичной той. которую привел топикстартер и я показал, что это возможно на любой ОС, если руки без антикака :D Речь не шла о правильном способе.

Мир дружба? :)

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

Вы предложили добиться ошибки аналогичной той. которую привел топикстартер
совершенно верно - тоись создать (каким угодно способом) ситуацию, аналогичную описанной
Многие возможно сталкивались с ошибкой соединения:
ppp.log
Цитата:

Oct 8 05:55:26 ns ppp[81939]: Warning: iface add: ioctl(SIOCAIFADDR, 10.0.0.1 -> 10.0.0.10): File exists
Oct 8 05:55:26 ns ppp[81939]: Warning: iface add: ioctl(SIOCAIFADDR, 10.0.0.1 -> 10.0.0.10): File exists


Причина - не создается запись в таблице маршрутизации для выдаваемого адреса
и я показал, что это возможно на любой ОС
ничего ты не показал - ты просто показал, что можно попытаться ввести 2 команды, противоречащие друг другу :D А если ты внимательно читал то, что я писал выше, то должен был понять, что в линухе это невозможно просто потому, что в отличие от бзди, маршруты привязаны прежде всего к интерфейсам и уж потом (но совсем необязательно) - к шлюзам. И маршрут на удалённый конец туннеля в линухе выглядит так:

10.17.0.105 dev ppp2 proto kernel scope link src 192.168.1.1

Шлюза (а соответственно и связанного с ним ip) здесь нет и в помине!

А вот если за туннелем будет какая-то подсеть, то маршрут в неё будет выглядеть так:

172.31.31.0/24 via 10.17.0.105 dev ppp2

вот здесь шлюз уже есть! но! рут опять таки привязан к ифейсу (прежде всего) поэтому если отстрелить соответствующий пппд процесс, ифейс ppp2 перестанет существовать! и соответственно перестанут существовать все привязанные к нему маршруты! в данном случае - оба вышеописанных так вот...
ran писал(а):А теперь организуй мне под линухом (намеренно, а не как там: "не была корректно удалена после разрыва соединения") вышеописанную каку - $100 как с куста
:D :D :D
Мир дружба?
та я с тобой не ссорился... а ликбез - он завсегда полезен ;)

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

в отличие от бзди, маршруты привязаны прежде всего к интерфейсам
Не-а.

# ifconfig ppp0 create
# ifconfig ppp0 10.0.0.1/24 10.0.0.2
# route add -net 10.0.1.0/24 -iface ppp0
add net 10.0.1.0: gateway ppp0
# route -n get 10.0.1.1
route to: 10.0.1.1
destination: 10.0.1.0
mask: 255.255.255.0
interface: ppp0
flags: <UP,DONE,STATIC>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1500 0
# ifconfig ppp0 destroy
# route -n get 10.0.1.1
route to: 10.0.1.1
destination: default
mask: default
gateway: 192.168.0.1
interface: le0
flags: <UP,GATEWAY,DONE,STATIC>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1500 0
#

О руках я уже кажется заикался.
ликбез - он завсегда полезен
Я тоже так думаю :)

Azudim
Сообщения: 72
Зарегистрирован: Вс фев 13, 2005 4:40 pm
Откуда: Moscow
Контактная информация:

Сообщение Azudim »

для справки, на FreeBSD маршрут так же привязан к интерфейсу. "нет интерфейса нет записи в маршрутизации" (С) ~AsmodeuS~

и маршруты не снимаются именно потому, что продолжает висеть виртуальный интерфейс Tun. billd checkppp убивает интерфейс, после чего правила маршрутизации тоже снимаются. а приведенный мной выше способ интерфейс оставляет (создается новый), но это не мешает установлению соединения.

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

О руках я уже кажется заикался.
а я разве о руках спорил? ;) я утверждал, что в линухе такую лажу не сделаешь даже если захочешь

Ответить