Страница 1 из 1
Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-01 19:18:51
MrStalker
Доброго времени суток...
Есть одна неприятная проблема.
Голову ломаю уже несколько часов.
Имеем 2 одинаковых сервера, на одном стоит FreeBSD 9.1 (8.4 даёт тот же результат) и 9.2. ОС чистая, то есть сразу после установки, с наименьшим вмешательством.
Далее настраиваются MPD5.7 клиенты, опять же идентичные.
На FreeBSD 9.1 всё работает идеально, на 9.2 фигушки... Разбираюсь далее... Никак не хочет удаляться маршрут.
Вот кусок кода up.sh (собственно
route delete $8)
Код: Выделить всё
#!/bin/sh
route delete $8
route add $8 ШЛЮЗ
route delete default
route add default $4
Пытаюсь убрать вручную
9.1
Код: Выделить всё
root@Test:/usr/local/etc/mpd5 # netstat -nrf inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 85.21.59.67 UGS 0 4 ng0
10.0.0.0/8 10.165.32.1 UGS 0 0 em0
10.165.32.0/21 link#1 U 0 763 em0
10.165.33.183 link#1 UHS 0 0 lo0
78.107.196.0/22 10.165.32.1 UGS 0 0 em0
85.21.59.67 10.165.32.1 UGHS 0 6 em0
95.29.82.53 link#5 UHS 0 0 lo0
127.0.0.1 link#4 UH 0 0 lo0
233.32.240.0/24 10.165.33.183 US 0 0 em0
root@Test:/usr/local/etc/mpd5 # route delete 85.21.59.67
delete host 85.21.59.67
Здесь всё отлично
9.2
Код: Выделить всё
root@Eviko:/home/mrstalker # netstat -nrf inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 85.21.230.206 UGS 0 8 ng0
2.94.44.161 link#7 UHS 0 0 lo0
10.0.0.0/8 10.165.32.1 UGS 0 0 re0
10.165.32.0/21 link#3 U 0 3201 re0
10.165.38.3 link#3 UHS 0 0 lo0
78.107.196.0/22 10.165.32.1 UGS 0 0 re0
85.21.192.3 10.165.32.1 UGHS 0 0 re0
85.21.230.206 link#7 UH 0 8 ng0
127.0.0.1 link#6 UH 0 0 lo0
233.32.240.0/24 10.165.38.3 US 0 0 re0
root@Eviko:/home/mrstalker # route delete 85.21.230.206
route: writing to routing socket: Address already in use
delete host 85.21.230.206 fib 0: gateway uses the same route
А вот тут... В общем идеи кончились. Что принципиально изменилось и как можно исправить это?
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-02 9:02:09
dmtr
а вы чо, правда не видите разницы между строками?
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-02 9:07:36
dmtr
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-02 16:07:29
MrStalker
Я наверно плохо изложил ситуацию...
dmtr писал(а):а вы чо, правда не видите разницы между строками?
Я прекрасно вижу разницу, но эта разница - лишь следствие проблемы.
Не хочет удаляться маршрут по скрипту:
Код: Выделить всё
#!/bin/sh
route delete $8
route add $8 10.165.32.1
route delete default
route add default $4
фактически
route delete $8 не может выполниться, в следствии чего
route add $8 10.165.32.1 тоже выполняться не будет.
Для примера я вообще уберу up.sh скрипт.
Смотрим ситуацию по машинам
С 9.1
Код: Выделить всё
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1460
inet 176.15.17.145 --> 85.21.230.206 netmask 0xffffffff
inet6 fe80::a00:27ff:fe12:721d%ng0 prefixlen 64 scopeid 0x5
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Такс, шлюз
85.21.230.206
Смотрим маршруты
Код: Выделить всё
root@Test:/home/mrstalker # netstat -nrf inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 10.165.32.1 UGS 0 20 em0
10.0.0.0/8 10.165.32.1 UGS 0 0 em0
10.165.32.0/21 link#1 U 1 294 em0
10.165.33.183 link#1 UHS 0 0 lo0
85.21.230.206 link#5 UH 0 4 ng0
127.0.0.1 link#4 UH 0 0 lo0
176.15.17.145 link#5 UHS 0 0 lo0
85.21.230.206 link#5 UH 0 4 ng0
Вот тут внимание, сейчас пробую удалить этот маршрут
Код: Выделить всё
root@Test:/home/mrstalker # route delete 85.21.230.206
delete host 85.21.230.206
Всё удалилось!
Соответственно заменяю его другим
Код: Выделить всё
root@Test:/home/mrstalker # route add 85.21.230.206 10.165.32.1
add host 85.21.230.206: gateway 10.165.32.1
Ну и замещаю дефолтовый маршрут
Код: Выделить всё
root@Test:/home/mrstalker # route delete default
delete net default
root@Test:/home/mrstalker # route add default 85.21.230.206
add net default: gateway 85.21.230.206
Проверяем
Код: Выделить всё
root@Test:/home/mrstalker # ping google.com
PING google.com (173.194.71.101): 56 data bytes
64 bytes from 173.194.71.101: icmp_seq=0 ttl=48 time=19.658 ms
64 bytes from 173.194.71.101: icmp_seq=1 ttl=48 time=18.971 ms
64 bytes from 173.194.71.101: icmp_seq=2 ttl=48 time=19.180 ms
^C
--- google.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 18.971/19.270/19.658/0.288 ms
Перейдём к самому интересному: к машине с 9.2
Код: Выделить всё
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1460
inet 2.93.209.127 --> 85.21.230.206 netmask 0xffffffff
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Не обращайте внимание на то что IP другой, шлюз
85.21.230.206 тот же
Вот маршруты
Код: Выделить всё
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 10.165.32.1 UGS 0 27 re0
2.93.209.127 link#7 UHS 0 0 lo0
10.0.0.0/8 10.165.32.1 UGS 0 14 re0
10.165.32.0/21 link#3 U 0 12836759 re0
10.165.38.3 link#3 UHS 0 0 lo0
85.21.230.206 link#7 UH 0 0 ng0
127.0.0.1 link#6 UH 0 57 lo0
Принципиально никакой разницы.
85.21.230.206 link#7 UH 0 0 ng0
Маршрут как и на 9.1
Вот теперь особое
внимание
Удаляю этот маршрут
Код: Выделить всё
root@Eviko:/home/mrstalker # route delete 85.21.230.206
route: writing to routing socket: Address already in use
delete host 85.21.230.206 fib 0: gateway uses the same route
Вот как
это понимать?
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-02 19:27:19
snorlov
А вы не пробовали сначала удалить интерфейс ng0 и лишь затем маршрут...
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-02 19:48:39
MrStalker
Маршрут, который я удаляю, создаётся сразу после появления интерфейса ng0, так что не вариант...
Конфигурация md5 с up.sh и down.sh скриптами специально затачивалась под особенности нашего провайдера, и работала нормально с 8 ветки, а вот на 9.2 получается какая то ерунда...
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-03 11:02:46
dmtr
честно говоря конкретных предположений нет, только вопрос - вы уверены в идентичности конфигурации систем - опции ядра, фаервола, nat'a, rc.config, loader.conf?
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-03 14:20:04
lazhu
присутствует в конфиге ядра? Какое значение?
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-03 14:55:02
FreeBSP
mpd.conf покажите
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-03 20:25:33
MrStalker
dmtr писал(а):честно говоря конкретных предположений нет, только вопрос - вы уверены в идентичности конфигурации систем - опции ядра, фаервола, nat'a, rc.config, loader.conf?
Так как проверялось на "чистых" системах:
Ядра GENERIC
Код: Выделить всё
root@Eviko:/home/mrstalker # diff GENERIC1 GENERIC2
19c19
< # $FreeBSD: release/9.1.0/sys/amd64/conf/GENERIC 238090 2012-07-04 00:54:16Z delphij $
---
> # $FreeBSD: releng/9.2/sys/amd64/conf/GENERIC 253860 2013-08-01 13:18:47Z marius $
24a25
> makeoptions WITH_CTF=1 # Run ctfconvert(1) for DTrace support
29a31
> options TCP_OFFLOAD # TCP offload
35a38
> options QUOTA # Enable disk quotas for UFS
65,66c68,69
< #options KDTRACE_FRAME # Ensure frames are compiled in
< #options KDTRACE_HOOKS # Kernel DTrace hooks
---
> options KDTRACE_FRAME # Ensure frames are compiled in
> options KDTRACE_HOOKS # Kernel DTrace hooks
69a73
> options DDB_CTF # kernel ELF linker loads CTF data
123c127
< device ctl # CAM Target Layer
---
> #device ctl # CAM Target Layer
132a137
> device hptnr # Highpoint DC7280, R750
133a139
> device hpt27xx # Highpoint RocketRAID 27xx
142a149
> device aacraid # Adaptec by PMC RAID
256c263
< device ath # Atheros NIC's
---
> device ath # Atheros NICs
274a282,283
> options PADLOCK_RNG # VIA Padlock RNG
> options RDRAND_RNG # Intel Bull Mountain RNG
330,338d338
< # FireWire support
< device firewire # FireWire bus code
< # sbp(4) works for some systems but causes boot failure on others
< #device sbp # SCSI over FireWire (Requires scbus and da)
< device fwe # Ethernet over FireWire (non-standard!)
< device fwip # IP over FireWire (RFC 2734,3146)
< device dcons # Dumb console driver
< device dcons_crom # Configuration ROM for dcons
<
348a349,356
>
> # VirtIO support
> device virtio # Generic VirtIO bus (required)
> device virtio_pci # VirtIO PCI Interface
> device vtnet # VirtIO Ethernet device
> device virtio_blk # VirtIO Block device
> device virtio_scsi # VirtIO SCSI device
> device virtio_balloon # VirtIO Memory Balloon device
Файрволла вообще не касался.
Код: Выделить всё
root@Eviko:/home/mrstalker # cat /etc/rc.conf
hostname="Eviko"
keymap="ru.koi8-r.win.kbd"
ifconfig_re0="SYNCDHCP"
defaultrouter="10.165.32.1"
mpd_enable="YES"
sshd_enable="YES"
ftpd_enable="YES"
ntpd_enable="YES"
powerd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
fsck_y_enable="YES"
background_fsck="NO"
На другой машине тоже самое, разве что имя хоста и сетевого интерфейса другое.
loader.conf не создавался
lazhu писал(а): присутствует в конфиге ядра? Какое значение?
Хм... может
?
В любом случае такой опции нет в конфиге.
FreeBSP писал(а):mpd.conf покажите
Код: Выделить всё
root@Eviko:/home/mrstalker # cat /usr/local/etc/mpd5/mpd.conf
default:
load l2tp_client
l2tp_client:
create bundle static B1
set iface up-script /usr/local/etc/mpd5/up.sh
set iface down-script /usr/local/etc/mpd5/down.sh
create link static L1 l2tp
set link action bundle B1
set auth authname mrstalker
set auth password password
set link max-redial 0
set l2tp peer tp.internet.beeline.ru
open
Код: Выделить всё
root@Eviko:/home/mrstalker # cat /usr/local/etc/mpd5/up.sh
#!/bin/sh
route delete $8
route add $8 10.165.32.1
route delete default
route add default $4
Код: Выделить всё
root@Eviko:/home/mrstalker # cat /usr/local/etc/mpd5/down.sh
#!/bin/sh
route delete default
route delete $6
route add default 10.165.32.1
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-03 23:13:54
FreeBSP
Код: Выделить всё
[0:09]_man_/# cat /usr/local/etc/mpd5/up.sh /usr/local/etc/mpd5/down.sh
#!/bin/sh
iface=$1
proto=$2
local_ip=$3
remote_ip=$4
authname=$5
peer_addr=$6
DefaultGW=`/bin/cat /var/db/dhclient.leases.* | /usr/bin/grep routers | /usr/bin/head -1 | /usr/bin/awk '{print $3}' | /usr/bin/sed 's/;//'`
/sbin/route delete $4
/sbin/route add $4 $DefaultGW
/sbin/route delete default
/sbin/route add default $4
echo $DefaultGW > /var/db/DefaultGW
#!/bin/sh
iface=$1
proto=$2
local_ip=$3
remote_ip=$4
authname=$5
peer_addr=$6
/sbin/route delete default
/sbin/route add default `cat /var/db/DefaultGW`
/sbin/route delete $remote_ip
[0:09]_man_/# cat /usr/local/etc/mpd5/mpd.conf | grep -A12 l2tp | grep -v auth
load l2tp_client
l2tp_client:
#
# PPTP client: only outgoing calls, auto reconnect,
# default route points on ISP's end
#
create bundle static B1
set iface up-script /usr/local/etc/mpd5/up.sh
set iface down-script /usr/local/etc/mpd5/down.sh
set iface enable tcpmssfix
create link static L1 l2tp
set link action bundle B1
set link max-redial 0
set link mtu 1440
set link keep-alive 20 75
set link disable chap
set l2tp peer tp.internet.beeline.ru
open
почему у вас $8 ???
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-04 0:13:20
mak_v_
Попутно : набор из 2х команд
Код: Выделить всё
route delete default
route add default <ip>
Эквивалентно
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-04 1:03:44
FreeBSP
mak_v_ писал(а):Попутно : набор из 2х команд
Код: Выделить всё
route delete default
route add default <ip>
Эквивалентно
спасибо за совет, принял к сведению полезную фичу

Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-04 17:00:57
MrStalker
FreeBSP писал(а):
почему у вас $8 ???
http://mpd.sourceforge.net/doc5/mpd28.html#28
вот почему:
set iface up-script script
set iface down-script script
Mpd can optionally run a user program every time one of network protocols (IPCP/IPv6CP) at the interface is brought up or down. The up-script is called like this:
script interface proto local-ip remote-ip authname [ dns1 server-ip ] [ dns2 server-ip ] peer-address
If up-script exit status is not 0, mpd will kill respective protocol.
The down-script is called like this:
script interface proto local-ip remote-ip authname peer-address
peer-address в up.sh
$8, а в down.sh
$6
Код: Выделить всё
root@Eviko:/home/mrstalker # cat /usr/local/etc/mpd5/up.sh
#!/bin/sh
route delete $8
route add $8 10.165.32.1
route delete default
route add default $4
echo "0:" $0 > ~mrstalker/1
echo "1:" $1 >> ~mrstalker/1
echo "2:" $2 >> ~mrstalker/1
echo "3:" $3 >> ~mrstalker/1
echo "4:" $4 >> ~mrstalker/1
echo "5:" $5 >> ~mrstalker/1
echo "6:" $6 >> ~mrstalker/1
echo "7:" $7 >> ~mrstalker/1
echo "8:" $8 >> ~mrstalker/1
root@Eviko:/home/mrstalker # cat ~mrstalker/1
0: /usr/local/etc/mpd5/up.sh
1: ng0
2: inet
3: 176.15.196.67/32
4: 85.21.230.206
5: -
6:
7:
8: 85.21.230.206
Почему
$8, а не
$4? Да потому что благодаря специалистам билайна, иногда попадается VPN сервер, у которого
remote-ip !=
peer-address
Код: Выделить всё
root@Eviko:/home/mrstalker # ifconfig ng0
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1456
inet 37.147.155.182 --> 37.147.128.1 netmask 0xffffffff
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
root@Eviko:/home/mrstalker # cat ~mrstalker/1
0: /usr/local/etc/mpd5/up.sh
1: ng0
2: inet
3: 37.147.155.182/32
4: 37.147.128.1
5: -
6:
7:
8: 85.21.230.201
Вот поэтому давно пришлось править скрипт.
mak_v_ писал(а):Попутно : набор из 2х команд
Код: Выделить всё
route delete default
route add default <ip>
Эквивалентно
Спасибо, полезно

Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-04 21:57:32
FreeBSP
а на месте $6 и $7 что у вас?
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-05 7:30:16
MrStalker
$6 и $7 по идее должны быть DNS от VPN сервера.
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-10 18:36:44
MrStalker
В ходе дальнейших безуспешных попыток разобраться выяснилось:
Если взять 9.1 и обновить до 9.2 (svn://svn.freebsd.org/base/releng/9.2/) получаем такую же проблему.
Собственно тот же результат и с "чистой" FreeBSD-10.0-ALPHA5-amd64-disc1.iso
К тому же в
dmesg обнаружилась куча сообщений:
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2013-10-30 17:19:48
MrStalker
Чтож... соберём вс что есть.
Проблема заключается в этом изменении
http://lists.freebsd.org/pipermail/svn- ... 45550.html
Из-за чего теперь невозможно удалить интерфейсный маршрут.
Проблема присутствует в 9.2, 10 и дальше будет.
Так как это "не баг, а фича", маловероятно что исправят, но надеемся на лучшее.
А пока для тех, кто ещё столкнётся с этой проблемой, я сделал патч
Применять так:
Код: Выделить всё
# tar xvzf route-fix.patch.tgz
# cd /usr/src
# patch < /PATH/TO/route-fix.patch
Далее пересобираем мир и ядро, всё должно работать как и раньше.
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2014-12-14 15:01:34
morozko
Столкнулся с этой же проблемой.
Маршрут невозможно удалить через route delete.
Но так в лом патчить и пересобирать... (
Решение пришло в голову такое:
в down-скрипте делать route change ремоута-ИП назад на интерфейс ng0.
По удалению интерфейса и маршрут удаляется
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2014-12-14 17:30:37
MrStalker
Хм... не знаю как у вас, а у меня необходимо заменять маршрут в up скрипте при поднятии интерфейса.
И похоже так и дальше патчить придётся, так как убирать эту "фичу" никто не будет уже, да и провайдер перенастраивать VPN сервера тоже не будет.
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2014-12-14 22:30:16
Гость
Код: Выделить всё
set ipcp ranges 0.0.0.0/0 0.0.0.0/0
set iface addrs 0.0.0.0 !fake_ip
set iface route default
Так пробовали? fake_ip - серый адрес вне ваших сетей.
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2014-12-14 23:47:37
MrStalker
Пробовал, работает конечно.
Но, имхо, это костыль, хотелось по человечески сделать.
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2014-12-15 10:24:12
Гость
В mpd введено адекватное средство для странных ISP.
Also this command may be used to force specified addresses usage instead of negotiated ones. It may be useful in some specific cases, for example, to avoid routing loop with misconfigured PPTP server. In such case '!' mark specifies IPs to be forced.
Что будет если маршрут к L2TP серверу (tp.internet.beeline.ru) прописать статиком заранее?
Re: Удаление маршрута во FreeBSD 9.2
Добавлено: 2014-12-15 13:22:14
morozko
MrStalker писал(а):Хм... не знаю как у вас, а у меня необходимо заменять маршрут в up скрипте при поднятии интерфейса.
И похоже так и дальше патчить придётся, так как убирать эту "фичу" никто не будет уже, да и провайдер перенастраивать VPN сервера тоже не будет.
В АП=скрипте надо менять, все верно.
После этого изменения интерфейс маршрута заменяется с ng0 на em0 (сетевой интерфейс, карта в сервере).
Если в дауне не менять, то после разрыва связи и удаления интерфейса ng0 измененный маршрут так и остается висеть и удалить его не выходит.
А вот если в даун-crhbgnt вернуть маршрут к remote-ip обратно на ng0, то после разрыва при удалении интерфейса ng0 этот маршрут тоже удалится