LINUX.ORG.RU

статическая маршрутизация


0

0

Столкнулся с неожиданной проблемой в Mandriva 2009 spring Раньше при старте системы у меня прописывались статические маршруты к VPN серверам провайдера. Сами маршруты были прописаны в /etc/sysconfig/statuc-routes

При переходе от Mandriva 2009 к Mandriva 2009 spring оказалось, что когда поднимается интерфейс, то его сначала мониторит ifplugd, а уже потом прописываются адреса и все такое.

Получается, что когда работает скрипт networks (который собственно прописывает статические адреса) интерфейсы еще не подняты. Соответственно статические маршруты не прописываются.

Можно конечно решить проблему путем грубого хака, дописав куда ни будь скриптик, но! Должна же эта проблема решаться штатным путем? Каким?


может лучше прописать это в rc.local?

splinter ★★★★★
()

Отключи ifplugd

Lumi ★★★★★
()

> Столкнулся с неожиданной проблемой в Mandriva 2009 spring Раньше при старте системы у меня прописывались статические маршруты к VPN серверам провайдера. Сами маршруты были прописаны в /etc/sysconfig/statuc-routes 

Дай ка угадаю: провайдер подключает к локальной сети по витой паре и всем выдаются локальные IP-адреса по DHCP, а интернет раздаётся по PPP/PPtP? При этом по DHCP не выдаются маршруты до PPtP-серверов и соответственно после поднятия ppp-интерфейса изменяется маршрут по умолчанию и получается "петля", т.е. трафик до pptp-сервера начинает идти через само pptp-подключение.

Я такую проблему решил скриптом-обёрткой над утилитой pptp:

#===============================================================================
#!/bin/sh

ip_list_cache="/var/cache/pptp-wrapper.%s.ip-list"

# Log error message and exit.
# $1 - Message.
die()
{
	logger -t "pptp-wrapper" -i -p "daemon.err" "ERROR: ${1}"
	sleep 3
	delRouteAndExit 1
}

# Log warning message.
# $1 - Message.
warn()
{
	logger -t "pptp-wrapper" -i -p "daemon.warning" "WARNING: ${1}"
}

# Log information message.
# $1 - Message.
info()
{
	logger -t "pptp-wrapper" -i -p "daemon.info" "${1}"
}

# Delete added route and exit.
# $1 - Exit code.
delRouteAndExit()
{
	if [ "x${ip}" != "x" ] && [ "x${interface}" != "x" ]; then
		if route del -host "${ip}" dev "${interface}" 2>/dev/null; then
			info "Route \"-host ${ip} dev ${interface}\" deleted"
		else
			warn "Can't del route \"-host ${ip} dev ${interface}\""
		fi
	fi

	info "Terminated"
	exit $1
}

# Script arguments:
# $1 - Hostname.
# $2 - Network interface for route.

if [ "x${1}" = "x" ] || [ "x${2}" = "x" ] || [ $# -gt 2 ]; then
	die "Invalid arguments"
fi
address="${1}"
interface="${2}"

ip_list_cache=$( printf "${ip_list_cache}" "${address}" )

trap 'delRouteAndExit 0' SIGHUP SIGINT SIGQUIT SIGABRT SIGTERM

ip_list=$( host -t A "${address}" 2>/dev/null | cut -d " " -f 4 | \
		grep "^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$" )
if [ "x${ip_list}" = "x" ]; then
	warn "Can't resolve hostname \"${address}\""
	if [ -r "${ip_list_cache}" ]; then
		ip_list=$( cat "${ip_list_cache}" )
	else
		die "Can't get IP list from cache file"
	fi
else
	touch "${ip_list_cache}"
	chmod 0644 "${ip_list_cache}"
	echo "${ip_list}" > "${ip_list_cache}"
fi

ip=$( echo "${ip_list}" | shuf -n 1 )
info "Address resolved \"${address}\" -> ${ip}"

gw=$( route -n | sed -n "s/^0\.0\.0\.0 *\([^ ]*\).* *${interface}$/\1/p" | \
		head -n 1 )
[ "x${gw}" = "x0.0.0.0" ] && gw=""
[ "x${gw}" != "x" ] && gw="gw ${gw} "

if route add -host "${ip}" $gw dev "${interface}" 2>/dev/null; then
	info "Route \"-host ${ip} ${gw}dev ${interface}\" added"
else
	warn "Can't add route \"-host ${ip} ${gw}dev ${interface}\""
fi

pptp "${ip}" --nolaunchpppd || die "pptp error"
delRouteAndExit 0
#===============================================================================

Этот скрипт запихивается например в /etc/ppp/pptp-wrapper и запускается вместо pptp. Т.е. в команде запуска pppd вместо

pty 'pptp vpn.provider.org --nolaunchpppd'

пишем

pty '/etc/ppp/pptp-wrapper vpn.provider.org eth0'

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

Deleted
()

хм... пошел немного другим путем.

в /etc/sysconfig/network-scripts добавил файл route-eth0 в нем статический маршрут: 10.0.0.1 via 10.0.52.1 при старте интерфейса маршрут прописывается автоматически

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