Наконец то я решился.
Итак имеем задачу; Быстро подключатся к удаленной машине по RDP через VPN и последующее отключение VPN после закрытия RDP подключения. А так же как бонус запуск и остановка VPN к нужным сетям.
Не думаю что данной темой притяну много комментаторов и + в карму, но все же решился хотя бы для того, чтоб на родном сайте иметь такую вот инструкцию для себя.
Поехали!
Для работы нашего скрипта понадобится программа pptp. Пишем в Konsole:
sudo apt-get install pptp-linux
Итак, создадим первое соединение. Точнее, файл настроек для него. Для этого нам необходимо проделать следующее:
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" - пароль для подключения
В принципе на втором этапе все.
Итак, чтоб скрипт без проблем можно было запускать из командной строки кидаем его например в /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 подключение то отключить его можем следующей командой
sudo vpn conpaniya stop
Вот в принципе и все!
Жду вопросы, предложения, замечания.