VPN & RDP скрипт (инструмент для администратора)

Изображение пользователя Grenky.

Наконец то я решился.
Итак имеем задачу; Быстро подключатся к удаленной машине по RDP через VPN и последующее отключение VPN после закрытия RDP подключения. А так же как бонус запуск и остановка VPN к нужным сетям.

Не думаю что данной темой притяну много комментаторов и + в карму, но все же решился хотя бы для того, чтоб на родном сайте иметь такую вот инструкцию для себя.
Поехали!

Установка необходимых пакетов

Для работы нашего скрипта понадобится программа pptp. Пишем в Konsole:
sudo apt-get install pptp-linux

Создания файла инструкции для VPN подключения

Итак, создадим первое соединение. Точнее, файл настроек для него. Для этого нам необходимо проделать следующее:
1.Создать файл
sudo nano -w /etc/ppp/companiya
companiya - я советую сразу давать осмысленные названия файлам-настроек, чтоб в будущем пореже залазить в папку ppp для уточнения - "А как же подключится в Рога_и_Копыта". Ибо мы крутые админы и в этой папке у нас не один десяток файлов-подключений будет. ;)
2. Вписываем туда следующее содержимое
pty "pptp 10.0.0.1 --nolaunchpppd"
name user
password "password"
refuse-eap
lcp-echo-failure 30
lcp-echo-interval 5
refuse-chap
refuse-mschap
require-mschap-v2
debug
noauth
nobsdcomp
nodeflate
require-mppe-128

не буду вдаваться в подробности, отмечу основные моменты которые будет необходимо менять для подключения:
a) 10.0.0.1 - вместо этого пишем hostname или ip сервера к которому осуществляется !VPN! подключение
b) name user - пишем имя пользователя для подключения
c) password "password" - пароль для подключения
В принципе на втором этапе все.

Скрипт для подключение VPN&RDP

Итак, чтоб скрипт без проблем можно было запускать из командной строки кидаем его например в /usr/local/bin/
Для этого делаем следующее:
sudo nano -w /usr/local/bin/vpn
вставляем туда следующее:
#!/bin/sh                                  
      case "$2" in                         
      rdp)                                 
         set $1 vpn $3                     
         . $0                              
         echo "Try to start rdesktop to addr $MASK.$3"
         rdesktop ${MASK}.$3 -u administrator -g 1270x750 -a 16  -k common
         $0 $1 stop
      ;;
      stop)
         echo -n "Stopping vpn: "
         poff $1
         echo
      ;;
      vpn)
         echo -n "Starting vpn: "
         pon $1
         sleep 6
         lolo=`ifconfig | grep "" -c`
         lolo=`expr $lolo - 6`
         MASK=`ifconfig | grep "" -n | grep $lolo: | awk '{print $3}' | awk -F: '{print $2}' | awk -F. '{print $1"."$2"."$3}'`
         lala=`ifconfig | grep $MASK -n -m 1 | awk '{print $1}' | awk -F: '{print $1}'`
         lala=`expr $lala - 1`
         blabla=`ifconfig | grep "" -n | grep ${lala}: | awk '{print $1}' | awk -F: '{print $2}'`
         echo $MASK
         route add -net $MASK.0 netmask 255.255.255.0 dev $blabla
      ;;
      *)
      $0 $1 vpn
      ;;
esac

делаем его исполняемым
chmod +x /usr/local/bin/vpn

Рассмотрим скрипт. Точнее то, на что вам следует обратить внимание:
1. Строка #7
rdesktop ${MASK}.$3 -u administrator -g 1270x750 -a 16  -k common
Здесь описывается настройки подключения RDP посредством rdesktop - ИМХО наилучшим клиентом RDP под Linux
Я для удобства сразу подставляю пользователя (-u administrator), делаю удобное для меня разрешение (-g 1270x750) высчитанное так чтоб на моем wide экране я всегда видел панель задач Kubuntu, чтоб не нагружать сервер к которому осуществляю подключение делаю 16 битную цветовую схему (-a 16), ну и заплатку чтоб "нормально" работала переключалка рус\анг (-k common).
${MASK}.$3 пока не будем трогать - просто скажу что сюда подставляется ip сервера к которому осуществляется RDP подключение.

2. Строка #20
lolo=`expr $lolo - 6`
здесь строка в которой отражен ip который мы получили при подключении по vpn. Таким образом мы извлекаем подсеть. Обратите внимание на цифру 6. Чтоб было ясно я покажу на примере. Например мы сделали подключение
sudo pon companiya
и затем
ifconfig
Видим примерно такую картину:
    ...........
          RX packets:2899 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2899 errors:0 dropped:0 overruns:0 carrier:0
          коллизии:0 txqueuelen:0
          RX bytes:592049 (592.0 KB)  TX bytes:592049 (592.0 KB)

ppp0      Link encap:Протокол PPP (Point-to-Point Protocol)
          inet addr:192.168.13.201  P-t-P:192.168.13.200  Mask:255.255.255.255
          ВВЕРХ POINTOPOINT RUNNING NOARP MULTICAST  MTU:1396  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          коллизии:0 txqueuelen:3
          RX bytes:309 (309.0 B)  TX bytes:80 (80.0 B)

я привел не весь листинг ибо нам важны последние строки. Тут в 6й строке снизу видим что мы получили ip=192.168.13.201. ТАК ВОТ у вас есть проблемы то проверьте действительно ли у вас 6 строк и если надо поправьте.
В принципе это все на что вам необходимо обратить внимание.

Как это работает

Вот как выглядеть команда
sudo vpn companiya rdp 1
То есть запускаем скрипт vpn от имени root далее указываем конфигурационный файл для подключения (в данном случае companiya) далее указываем что мы хотим подключится по rdp (указанием опции rdp) и указываем последнюю цифру ip адреса сервера к которому мы осуществляем RDP подключение (в данном случае XXX.YYY.ZZZ.1)
Что делает скрипт?

  • Смотрит конфигурационный файл
  • Делает подключение по VPN
  • Выделяет в переменную подсеть
  • Смотрит есть ли опция RDP
  • Если есть подключается по ip = переменная.параметр заданный после опции RDP (если посмотреть пример ifconfig что приведен выше, то переменная=192.168.13); если параметр не задан просто создается vpn подключение
  • При logoff из RDP соединения обрывается VPN

Если мы осуществили только VPN подключение то отключить его можем следующей командой
sudo vpn conpaniya stop

Вот в принципе и все!
Жду вопросы, предложения, замечания.

Комментарии (5)

0
balamutick - 8 Февраль, 2010 - 14:46
Изображение пользователя balamutick.

Жду вопросы, предложения, замечания. Я только одно могу сказать.

Вот конкретно эта статья, реально стоит денег.

Ибо их экономит и в некотором смысле зарабатывает.

Мне как раз потребовалась (нашёл в поиске :-), вместо того, чтобы плодить темы), всё что будет не понятно напишу и улучшим статью, для понимания.

Огромное спасибо за потраченное время.

З.Ы. не обращай внимание, что активность не очень большая, всё таки описанные вещи это очень профессиональный инструмент (хотя и обычным людям - полезный).

0
muz_off - 8 Февраль, 2010 - 17:19
Изображение пользователя muz_off.

ого себе вот это пост. интересно а с vnc-ишкой так же просто всё?... поиграемся. спасибо автору

0
muz_off - 11 Февраль, 2010 - 00:06
Изображение пользователя muz_off.

что-то не то вот тут pty "pptp 10.0.0.1 --nolaunchpppd" кажется мне.(могу ошибаться).
пишет что сервер недоступен, хотя тот весьма доступен.. после чего всё равно пытается запустить рдп, безрезультатно соответсвенно.

0
Grenky - 17 Март, 2010 - 05:45
Изображение пользователя Grenky.

Актуально еще?
Извиняюсь ранее не был на связи )
У вас точно: "--nolaunchpppd" или все же "-nolaunchpppd"?
Второй вариант не пройдет.
И еще: Попробуйте протестировать подключение командой pon

0
dealon - 20 Июнь, 2010 - 18:41

Добрый день, спасибо за статью!
Только в моем случае возникли какие-то грабли:
После подключения, через некоторое время (минуты 2-3) подключение обрывается (rdesktop виснет напрочь, отключается клавиатура и не реагирует...), похоже что падает vpn.
Подскажите в чем может быть проблема?

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры