LINUX.ORG.RU
ФорумAdmin

[OpenVPN] Что мешает сделать добавление nameserver'ов?

 


0

1

Удивительно, что в чужеродной Windows клиент OpenVPN обновляет DNS-записи, а в nix'ах - нет. Меня это всегда возмущало, потому что на всех нормальных никсах достаточно просто изменить resolv.conf, а «ненормальность» не сложно определить, да и делает это OpenVPN, иначе не был бы он кроссплатформенным.
Вопрос не в том, как сделать так, чтобы resolv.conf обновлялся самопальными up/down скриптами, а в том, с чем связана неадекватная реакция nix-клиента на передачу push DNS сервером. Ну и конечно если есть уже патченная версия OpenVPN, а я об этом не знаю - подскажите, где взять.

★★★★★

Последнее исправление: DRVTiny (всего исправлений: 1)

Debian 6

cat /etc/openvpn/update-resolv-conf 
#!/bin/bash
# 
# Parses DHCP options from openvpn to update resolv.conf
# To use set as 'up' and 'down' script in your openvpn *.conf:
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
#
# Used snippets of resolvconf script by Thomas Hood <jdthood@yahoo.co.uk> 
# and Chris Hanson
# Licensed under the GNU GPL.  See /usr/share/common-licenses/GPL. 
#
# 05/2006 chlauber@bnc.ch
# 
# Example envs set from openvpn:
# foreign_option_1='dhcp-option DNS 193.43.27.132'
# foreign_option_2='dhcp-option DNS 193.43.27.133'
# foreign_option_3='dhcp-option DOMAIN be.bnc.ch'

[ -x /sbin/resolvconf ] || exit 0

case $script_type in

up)
	for optionname in ${!foreign_option_*} ; do
		option="${!optionname}"
		echo $option
		part1=$(echo "$option" | cut -d " " -f 1)
		if [ "$part1" == "dhcp-option" ] ; then
			part2=$(echo "$option" | cut -d " " -f 2)
			part3=$(echo "$option" | cut -d " " -f 3)
			if [ "$part2" == "DNS" ] ; then
				IF_DNS_NAMESERVERS="$IF_DNS_NAMESERVERS $part3"
			fi
			if [ "$part2" == "DOMAIN" ] ; then
				IF_DNS_SEARCH="$part3"
			fi
		fi
	done
	R=""
	if [ "$IF_DNS_SEARCH" ] ; then
        	R="${R}search $IF_DNS_SEARCH
"
	fi
	for NS in $IF_DNS_NAMESERVERS ; do
        	R="${R}nameserver $NS
"
	done
	echo -n "$R" | /sbin/resolvconf -a "${dev}.inet"
	;;
down)
	/sbin/resolvconf -d "${dev}.inet"
	;;
esac

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

>To use set as 'up' and 'down' script in your openvpn *.conf:

Вот как раз этого мне и даром не нужно. Это элементарная вещь, которую обязан уметь сам openvpn. То, что скриптовые костыли решат любую проблему - итак понятно. Непонятно только, почему эту проблему разработчики создают.

DRVTiny ★★★★★
() автор топика

Это UNIX-way. Программа делает свое дело, и делает его хорошо. Если бы в винде было что-то подобное resolv.conf, точно так же пришлось бы дергать внешние скрипты. Рулить DNS - близко не задача VPN-сервера.

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

А кроме как вручную поправить файл, имеются ли, например, в glibc стандартные вызовы типа «установить nameserver номер такой-то в конфиге в то-то». Плюс ещё от nsswitch.conf зависит что и как делать...

Короче я не знаю что и как там у разрабов, но с тобой впринципи согласен, что надо. Просто может действительно нет программного интерфейса кроме как парсить и сед'ить resolv.conf, а разрабы так не хотят...

adriano32 ★★★
()

OpenVPN делает много больше чем просто клиент-сервер для удаленного доступа, он универсален. Поэтому вам выдан up-скрипт и делайте что хотите. Тем более во всех дистрибутивах нормальных как уже было указано эта функциональность реализована. Хочется чтобы было встроено в опенвпн - реализуй, это же опенсорс.

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

А по-моему это просто неуважение к пользователям Linux со стороны разработчиков, потому что тот же dhclient прекрасно обновляет список nameserver'ов. И будучи мега-гипер крутым и считающим «ниже своего достоинства» обновлять DNS-настройки, в грёбаной винде OpenVPN почему-то работает правильно, подтверждая тем самым тот факт, что пользователи BSD реально сидят на рабочих станциях под Windows. По поводу скрипта: признаком полнейшего идиотизма является то, что единожды кем-то написанный, он теперь кочует повсюду. Потому что скрипт написан просто ужасно, если не скаазать больше, и у любого нормального BASH-скриптописателя не может не вызывать позывы рвоты. Сам я его сразу же переписал в таком виде:

exec 4<&2 2>/tmp/err.log
cmdResolvConf=(NULL $(which resolvconf)) || cmdResolvConf=($(whereis resolvconf))
cmdResolvConf=${cmdResolvConf[1]:-'/sbin/resolvconf'}
 
[[ -x $cmdResolvConf ]] || exit 0
declare -a OptPars SearchDomains NameServers
case $script_type in
up)
 for EnvVarName in ${!foreign_option_*}; do
  OptPars=(${!EnvVarName})
  if [[ ${OptPars[0]} == 'dhcp-option' ]]; then
   OptName=${OptPars[1]}; OptVal=${OptPars[2]}
   case $OptName in
   DNS)
    NameServers+=($OptVal)
   ;;
   DOMAIN)
    SearchDomains+=($OptVal)
   ;;
   *) : ;;
   esac
  fi
 done
 tmpCfg=$(mktemp /tmp/XXXXXXXXX)
 exec 3<&1 1>$tmpCfg
 ((${#SearchDomains[@]})) && echo "search ${SearchDomains[@]}"
 for ((i=0; i<${#NameServers[@]}; i++)); do
  echo "nameserver ${NameServers[i]}"
 done
 exec 1<&3
 $cmdResolvConf -a "${dev}.inet" <$tmpCfg
 cp $tmpCfg /tmp/1
 rm -f $tmpCfg
;;
down)
 $cmdResolvConf -d "${dev}.inet"
;;
esac
exec 2<&4

Что называется, почувствуйте разницу!

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

А мне даром ненадо что бы всякая гадость лезла в мои конфиги по поводу и без. Я задолбался прибивать гвоздями resolv.conf после всяких идиотских dhclien... К тому же бывает и так, что работает оно не от рута. Давать доступ на запись resolv.conf всем кому ни попадя? Да это ж счастье какое то для кого то!!!

Nefer
()
Ответ на: комментарий от DRVTiny

А еще почитайте как народ стал плакать после UAC и иже с ним. В винде все срут под себя. Не надо этого в никсы тянуть.

Nefer
()
Ответ на: комментарий от DRVTiny

В винде и юзеры соответствующие. А в линупсе эту фишку отдали на откуп дистростроителям, всё логично. В каждом дистре свои способы править резолвконф.

blind_oracle ★★★★★
()

Удивительно, что в чужеродной Windows клиент OpenVPN обновляет DNS-записи, а в nix'ах - нет.

но зачем? он и не должен АВТОМАТОМ его менять. потому что, если я НЕ хочу своим клиентом принимать эту настройку - как я сделаю запрет на её получение? опять скриптами?

все правильно делают. в никсах все должно делаться по выбору самого пользователя, а не навязывая.

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

> но зачем? он и не должен АВТОМАТОМ его менять. потому что, если я НЕ хочу своим клиентом принимать эту настройку - как я сделаю запрет на её получение? опять скриптами?

Очевидно - соответствующей настройкой в конфиге :). Если бы разрабы ее конечно предложили...

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

По поводу скрипта: признаком полнейшего идиотизма является то, что единожды кем-то написанный, он теперь кочует повсюду. Потому что скрипт написан просто ужасно, если не скаазать больше, и у любого нормального BASH-скриптописателя не может не вызывать позывы рвоты.

Так отправь же свой вариант разработчикам, будь мужиком!

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

А ещё я могу сразу сказать, почему твой мегаскрипт разработчики сразу отбракуют. Догадаешься сам?

Deleted
()
Ответ на: комментарий от leave

> Если бы в винде было что-то подобное resolv.conf, точно так же пришлось бы дергать внешние скрипты.

Не понял, а ЧЕГО такого нет в винде, что реально вызывает необходимость писать ДНС средствами OVPN? Возможности сделать это с командной строки? Дык есть, элементарная.

Рулить DNS - близко не задача VPN-сервера

Это почему? А маршруты прописывать - задача VPN сервера? Чем DNS хуже? Если мне не нужен DNS - я лучше опцию в конфиге поставлю, чем скрипт буду сочинять в обратном случае.

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

Разработчики чего отбракуют? Да и мне какое до них дело - кому надо, пусть пользуется. Там нужно конечно убрать всякую фигню для отладки типа копирования в /tmp/1, но в целом - куда как разумнее говноиндусского кода оригинала.

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

>В каждом дистре свои способы править резолвконф.

И ни один дистрибутив не имеет собственных стандартных средств создания OpenVPN-серверов или клиентов, так что директивы up и down в конфиге, очевидно, предполагается необходимым ручками писать.

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

В общем разговор ни о чем. Лень писать скрипт? Вэлкам ту виндовс.

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

Элементарно - это «netsh interface ip set dns „Local Area Connection“ static 192.168.1.1»? Это тяжкий наркоманский кошмар - прописывать отдельные ДНСы для каждого интерфейса.

А маршруты прописывать - задача VPN сервера?

Очевидно, если не прописать роуты - в впн не будет смысла. ДНС - вторичный сервис, сеть будет работать и без него.

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

говноиндусского кода оригинала

Сударь, вам самомнение не жмет? Ваш вариант, такое ощущение, что написан на баше человеком, глубоко травмированным PHP и CamelCase'ом.

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

> Элементарно - это «netsh interface ip set dns „Local Area Connection“ static 192.168.1.1»? Это тяжкий наркоманский кошмар - прописывать отдельные ДНСы для каждого интерфейса.

Т.е. я правильно понял, одна эта строчка - это тяжкий наркоманский кошмар, а вот этот скрипт - http://www.linux.org.ru/jump-message.jsp?msgid=6663772&cid=6663842 - это типа ясно и понятно? :)))

Очевидно, если не прописать роуты - в впн не будет смысла. ДНС - вторичный сервис, сеть будет работать и без него.

Если мы рассматриваем не ВПН сервер, а конечную пользовательскую машину, смысла от такой «работы» практически столько же, сколько и без маршрутов. Ибо клиентские приложения в больших сетях вяжутся таки на DNS имена.

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

>Что называется, почувствуйте разницу!

угу. вот поэтому я и свалил с dhclient на dhcpcd

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

>Т.е. я правильно понял, одна эта строчка - это тяжкий наркоманский кошмар

конкретно в этой строчке ничего страшного нет. Просто для новичка весь netsh - это тяжкий наркоманский кошмар. Тот же синтаксис quagga и некоторых консолек на свичах(скопипащенный во многом с циски) и то проще
. Хотя и там есть такие завихрения, что закачаешься, но netsh бьет по мозгам поначалу гораздо сильнее

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

>А маршруты прописывать - задача VPN сервера?

внезапно, да. Ибо без этой фичи VPN в некоторых случаях не нужен. Отсутствие подобной фичи в PPTP - это один большой головняк...

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

>А по-моему это просто неуважение к пользователям Linux со стороны разработчиков

У тебя 2 варианта:

1) завести bug с приоритетом enhancement с указанной тобой фичей на багзилле openvpn(или каким-либо другим образом связаться с разработчиками) и ждать, пока кто-нибудь ее реализует

2) реализовать самому и прислать разработчикам патч

В любом случае - ныть по этому поводу не стоит. Будь мужиком, в конце-то концов.

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

>глубоко травмированным PHP и CamelCase'ом.

Нет, это просто современный BASH. И я ещё не использовал ассоциативные массивы ради соображений совместимости со всякими древними центосями. Пока вы сидели в танке, жизнь не стояла на месте и Shell в лице BASH менялся к лучшему и становился всё более развитым и самодостаточным.

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