Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
wiki:скрипт_vpn [2009/07/23 17:46] создано |
wiki:скрипт_vpn [2009/07/23 18:17] (текущий) Вот теперь - создал. |
||
---|---|---|---|
Строка 4: | Строка 4: | ||
| [[http://forum.ubuntu.ru/index.php?action=profile;u=9777|peabody]] | Все версии | | | [[http://forum.ubuntu.ru/index.php?action=profile;u=9777|peabody]] | Все версии | | ||
- | ===== Краткое описание ===== | + | ==== Краткое описание ==== |
Данный скрипт позволяет значительно упростить процесс создания vpn-подключения. | Данный скрипт позволяет значительно упростить процесс создания vpn-подключения. | ||
- | ===== Использование скрипта ===== | + | ==== Использование скрипта ==== |
- | 1. Скачать архив со скриптом можно {{:wiki:скрипт_vpn.tar.gz|отсюда}}. Например так:((Здесь и далее специально даны команды для консоли. Это сделано специально, на случай использования скрипта на системах без графического интерфейса))\\ | + | 1. Скачать архив со скриптом можно {{:wiki:vpn_script.tar.gz|отсюда}}. Например так:((Здесь и далее специально даны команды для консоли. Это сделано специально, на случай использования скрипта на системах без графического интерфейса))\\ |
- | FIXME\\ | + | <code>ubuntu@ubuntu:~$ wget http://help.ubuntu.ru/_media/wiki/vpn_script.tar.gz</code> |
2. Распаковать архив в домашнюю папку. Например так:\\ | 2. Распаковать архив в домашнюю папку. Например так:\\ | ||
- | FIXME\\ | + | <code>ubuntu@ubuntu:~$ tar -xvvf vpn_script.tar.gz</code> |
3. Запустить на выполнение скрипт vpn.sh Например, так:\\ | 3. Запустить на выполнение скрипт vpn.sh Например, так:\\ | ||
- | <code>$ sudo bash ~/vpn_prj/vpn.sh</code>\\ | + | <code>ubuntu@ubuntu:~$ sudo bash ~/vpn_prj/vpn.sh</code>\\ |
+ | ==== Использование скрипта в домашних сетях различных провайдеров ==== | ||
+ | |||
+ | Многие провайдеры, использующие VPN, предоставляют пользователям возможность подключения к внутренним сетевым ресурсам без использования VPN. Таким образом, если Вы не можете получить доступ в интернет из-за того, что у Вас не настроен VPN, Вы можете обратиться к внутресетевому ресурсу, на котором доступен данный скрипт. Ниже приведен список провайдеров, на внутренних ресурсах которых расположен данный скрипт, а также все необходимые инструкции по настройке. | ||
+ | |||
+ | === Corbina Telecom === | ||
+ | |||
+ | Абонентам Corbina Telecom достаточно пройти по этой ссылке: [[http://help.corbina.ru/internet/install/linux/|http://help.corbina.ru/internet/install/linux/]]\\ | ||
+ | |||
+ | ==== Листинг скрипта ==== | ||
+ | |||
+ | На самом деле это не один скрипт, а несколько. | ||
+ | |||
+ | === vpn.sh === | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | printf "Выберите язык установки / Choose installation language (1 - русский/2 - English): " | ||
+ | read i_install | ||
+ | if [ $i_install = "1" ]; then | ||
+ | bash "$PWD"/vpn_rus.sh | ||
+ | elif [ $i_install = "2" ]; then | ||
+ | bash "$PWD"/vpn_eng.sh | ||
+ | fi | ||
+ | exit 0 | ||
+ | </code> | ||
+ | |||
+ | === vpn_rus.sh === | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | #path to ppp | ||
+ | ppp=/etc/ppp | ||
+ | |||
+ | if [[ $(id) != 'uid=0'* ]]; then | ||
+ | echo "Только пользователь с правами root может настраивать VPN. Также вы можете воспользоваться командой 'sudo'" | ||
+ | exit 1 | ||
+ | fi | ||
+ | echo "Вас приветствует скрипт для настройки VPN-соединений! Вам будет задано несколько вопросов, и если Вы корректно и точно на них ответите - то получите рабочее VPN-соединение с настроенными маршрутами! Помните - причина 99% ошибок и неудач при настройке VPN с помощью этого скрипта - это банальная невнимательность! Будьте внимательны и успехов Вам!" | ||
+ | echo "Итак, приступим!" | ||
+ | echo "------------------------" | ||
+ | printf "Введите название VPN-соединения (например, corbina или vpn_corbina): " | ||
+ | read i_vpn_name | ||
+ | echo "------------------------" | ||
+ | echo "Выберите пожалуйста, своего провайдера:" | ||
+ | echo " 1. Корбина-Телеком" | ||
+ | echo " 2. Билайн" | ||
+ | echo " 3. Другой" | ||
+ | printf "Ваш провайдер? (1/2/3)? " | ||
+ | read provider | ||
+ | if [ $provider = "1" ]; then | ||
+ | prov="Корбина-Телеком" | ||
+ | vpn_address="vpn.corbina.net" | ||
+ | elif [ $provider = "2" ]; then | ||
+ | prov="Билайн" | ||
+ | vpn_address="vpn.internet.beeline.ru" | ||
+ | elif [ $provider = "3" ]; then | ||
+ | prov="Другой" | ||
+ | echo "ВНИМАНИЕ! Вы должны отредактировать файл 'route' (он скачивается, как правило, в домашнюю папку, либо лежит в папке vpn_prj, если вы распаковывали архив со скачанным скриптом) т.к. он настроен для работы в Корбине и Билайн. Маршруты для вашего провайдера уточняйте в службе поддержки. Остановите скрипт командой Ctrl+C для завершения скрипта, отредактируйте файл 'route' и запустите скрипт заново из вашей домашней директории." | ||
+ | echo "------------------------" | ||
+ | printf "Введите свой адрес VPN: " | ||
+ | read vpn_address | ||
+ | else | ||
+ | echo "Вы ввели неправильный вариант ответа. Пожалуйста, запустите скрипт заново." | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | if [ $provider = "3" ]; then | ||
+ | region="3" | ||
+ | routes="route" | ||
+ | else | ||
+ | echo "------------------------" | ||
+ | echo "Выберите пожалуйста, ваш регион:" | ||
+ | echo " 1. Москва и МО" | ||
+ | echo " 2. Санкт-Петербург и ЛО" | ||
+ | echo " 3. Другой" | ||
+ | printf "Ваш регион? (1/2/3)? " | ||
+ | read region | ||
+ | if [ $region = "1" ]; then | ||
+ | region_name="Москва и МО" | ||
+ | routes="route.msk" | ||
+ | elif [ $region = "2" ]; then | ||
+ | region_name="Санкт-Петербург и ЛО" | ||
+ | routes="route.piter" | ||
+ | elif [ $region = "3" ]; then | ||
+ | region_name="Другой" | ||
+ | routes="route" | ||
+ | else | ||
+ | echo "Вы ввели неправильный вариант ответа. Пожалуйста, запустите скрипт заново." | ||
+ | exit 1 | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | echo "------------------------" | ||
+ | printf "Введите ваш логин для доступа в интернет: " | ||
+ | read i_login | ||
+ | echo "------------------------" | ||
+ | printf "Введите ваш пароль для доступа в интернет: " | ||
+ | read i_password | ||
+ | |||
+ | echo "------------------------" | ||
+ | echo "Автоматически определяется адрес вашего шлюза..." | ||
+ | i_gw=$(route|grep default|awk '{print $2}') | ||
+ | echo "Определено!" | ||
+ | echo "IP вашего районного шлюза: $i_gw" | ||
+ | if [ $provider = "3" ]; then | ||
+ | printf "Районный шлюз определён правильно: (y/n) ? " | ||
+ | read i_yn | ||
+ | if [ $i_yn = "n" ]; then | ||
+ | printf "Введите IP-адрес вашего шлюза: " | ||
+ | read i_gw | ||
+ | fi | ||
+ | else | ||
+ | if [[ $i_gw != '10.'* ]]; then | ||
+ | echo "К сожалению, IP-адрес шлюза определился неправильно. Он должен иметь вид 10.x.x.x, поэтому Вам нужно ввести его вручную." | ||
+ | printf "Введите IP-адрес вашего шлюза: " | ||
+ | read i_gw | ||
+ | fi | ||
+ | fi | ||
+ | if [ $region = "2" ]; then | ||
+ | routing="Преднастроенные маршруты в файле 'route', т.к. в Санкт-Петербург и ЛО нет поддержки DHCP-маршрутов" | ||
+ | i_dhcp="n" | ||
+ | else | ||
+ | echo "------------------------" | ||
+ | echo "Теперь вы должны выбрать метод получения маршрутов. Вы можете выбрать автополучение маршрутов по DHCP или предустановленный набор в файле 'route'" | ||
+ | echo "------------------------" | ||
+ | printf "Вы хотите получать маршруты через DHCP? ([y]/n)? " | ||
+ | read i_dhcp | ||
+ | if [ $i_dhcp = "y" ]; then | ||
+ | routing="Получение через DHCP" | ||
+ | elif [ $i_dhcp = "n" ]; then | ||
+ | routing="Преднастроенные маршруты в файле 'route'" | ||
+ | if [ $provider = "3" ]; then | ||
+ | echo "ВНИМАНИЕ! Вы должны отредактировать файл 'route' (он скачивается, как правило, в домашнюю папку, либо лежит в папке vpn_prj, если вы распаковывали архив со скачанным скриптом) т.к. он настроен для работы в Корбине и Билайн. Маршруты для вашего провайдера уточняйте в службе поддержки. Остановите скрипт командой Ctrl+C для завершения скрипта, отредактируйте файл 'route' и запустите скрипт заново из вашей домашней директории." | ||
+ | fi | ||
+ | else | ||
+ | echo "Вы ввели неправильный вариант ответа. Пожалуйста, запустите скрипт заново." | ||
+ | exit 1 | ||
+ | fi | ||
+ | fi | ||
+ | echo "------------------------" | ||
+ | printf "Хотите автоматически установить пакет pptp-linux? Отвечайте 'n' если он уже установлен в системе, или у вас устаревший дистрибутив (Debian Etch, Xandros, установленный на Eee PC и т.п.) (y/n): " | ||
+ | read i_install | ||
+ | if [ $i_install = "y" ]; then | ||
+ | pptp_linux="Да" | ||
+ | else | ||
+ | pptp_linux="Нет" | ||
+ | fi | ||
+ | echo "------------------------" | ||
+ | echo "Проверка введённых данных:" | ||
+ | echo " Имя соединения: $i_vpn_name" | ||
+ | echo " Провайдер: $prov" | ||
+ | if [[ $provider != "3" ]]; then | ||
+ | echo " Регион: $region_name" | ||
+ | fi | ||
+ | echo " Логин: $i_login" | ||
+ | echo " Пароль: $i_password" | ||
+ | echo " Адрес VPN-сервера: $vpn_address" | ||
+ | echo " Шлюз: $i_gw" | ||
+ | echo " Настройка маршрутов: $routing" | ||
+ | echo " Установка пакета pptp-linux: $pptp_linux" | ||
+ | printf "Вся информация верна? (y/n)? " | ||
+ | read i_correct | ||
+ | if [ $i_correct = "n" ]; then | ||
+ | echo "------------------------" | ||
+ | echo "Уточните данные и запустите скрипт заново." | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | if [ $i_install = "y" ]; then | ||
+ | echo "Определяется тип вашей системы..." | ||
+ | bit=$(uname -m) | ||
+ | echo "Тип вашей системы определён как: $bit" | ||
+ | echo "Устанавливается $bit версия pptp-linux..." | ||
+ | if [ $bit = "i686" ]; then | ||
+ | dpkg -i "$PWD"/pptp-linux_1.7.0-2ubuntu2_i386.deb | ||
+ | elif [ $bit = "x86_64" ]; then | ||
+ | dpkg -i "$PWD"/pptp-linux_1.7.0-2ubuntu2_amd64.deb | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | if [ $i_dhcp = "y" ]; then | ||
+ | cp "$PWD"/rfc3442-classless-static-routes /etc/dhcp3/dhclient-exit-hooks.d/rfc3442-classless-static-routes | ||
+ | mv /etc/dhcp3/dhclient.conf /etc/dhcp3/dhclient.conf_bak | ||
+ | cp "$PWD"/dhclient.conf /etc/dhcp3/dhclient.conf | ||
+ | echo "------------------------" | ||
+ | echo "Автонастройка маршрутов через DHCP установлена." | ||
+ | fi | ||
+ | echo "------------------------" | ||
+ | echo "Создаются VPN-параметры..." | ||
+ | |||
+ | |||
+ | echo "${i_login} PPTP ${i_password} *" > $ppp/chap-secrets | ||
+ | |||
+ | |||
+ | cp "$PWD"/ip $ppp/ip-up > /dev/null | ||
+ | printf "${ppp}/ip-up.d/\$6 \$1 \$2 \$3 \$4 \$5 \$6" >> $ppp/ip-up | ||
+ | chmod a+x $ppp/ip-up | ||
+ | |||
+ | cp "$PWD"/ip $ppp/ip-down > /dev/null | ||
+ | printf "${ppp}/ip-down.d/\$6 \$1 \$2 \$3 \$4 \$5 \$6" >> $ppp/ip-down | ||
+ | chmod a+x $ppp/ip-down | ||
+ | |||
+ | cp "$PWD"/$routes $ppp/ip-up.d/$i_vpn_name | ||
+ | |||
+ | printf "route del \$4 dev \$1\n" >> $ppp/ip-up.d/$i_vpn_name | ||
+ | printf "route add -host \$4 gw ${i_gw}\n" >> $ppp/ip-up.d/$i_vpn_name | ||
+ | printf "do_route add ${i_gw} \n" >> $ppp/ip-up.d/$i_vpn_name | ||
+ | printf "route del default \n" >> $ppp/ip-up.d/$i_vpn_name | ||
+ | printf "route add default dev \$1 \n" >> $ppp/ip-up.d/$i_vpn_name | ||
+ | |||
+ | chmod a+x $ppp/ip-up.d/$i_vpn_name | ||
+ | |||
+ | cp "$PWD"/$routes $ppp/ip-down.d/$i_vpn_name | ||
+ | printf "do_route del ${i_gw} \n" >> $ppp/ip-down.d/$i_vpn_name | ||
+ | printf "route del default \n" >> $ppp/ip-down.d/$i_vpn_name | ||
+ | printf "route add default gw ${i_gw}\n" >> $ppp/ip-down.d/$i_vpn_name | ||
+ | chmod a+x $ppp/ip-down.d/$i_vpn_name | ||
+ | |||
+ | printf "nodeflate\nnobsdcomp\nnoauth\n" > $ppp/options.$i_vpn_name | ||
+ | |||
+ | printf "pty \"pptp $vpn_address --nolaunchpppd --nobuffer --loglevel 0\"\n" > $ppp/peers/$i_vpn_name | ||
+ | printf "connect /bin/true\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "name ${i_login}\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "remotename PPTP\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "file ${ppp}/options.$i_vpn_name\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "ipparam $i_vpn_name\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "persist\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "maxfail 0\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "lcp-echo-interval 30\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "lcp-echo-failure 4\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "mtu 1460\n" >> $ppp/peers/$i_vpn_name | ||
+ | echo "------------------------" | ||
+ | echo "Оптимизация настроек соединения выполнена!" | ||
+ | echo "------------------------" | ||
+ | echo "Автоматическое восстановление соединения после разрыва настроено!" | ||
+ | echo "------------------------" | ||
+ | echo "Настройка параметров успешно завершена!" | ||
+ | echo "------------------------" | ||
+ | echo "Перезагрузка сетевых служб..." | ||
+ | /etc/init.d/networking restart | ||
+ | echo "Выполнено!" | ||
+ | echo "------------------------" | ||
+ | printf "Вы хотите создать VPN-соединение с интернетом сейчас? ([y]/n)? " | ||
+ | read i_vpnstart | ||
+ | if [ $i_vpnstart = "y" ]; then | ||
+ | echo "------------------------" | ||
+ | echo "Запускается VPN-соединение..." | ||
+ | pon $i_vpn_name | ||
+ | echo "VPN-соединение запущено. Если всё сделано правильно и на счёте есть деньги то Вы в интернете:)" | ||
+ | echo "------------------------" | ||
+ | echo "Чтобы подключиться к интернету, напечатайте в консоли: sudo pon $i_vpn_name" | ||
+ | echo "Чтобы разорвать соединение, напечатайте в консоли: sudo poff" | ||
+ | echo "------------------------" | ||
+ | echo "Не забудьте сказать спасибо на форуме) По всем вопросам об этом скрипте - http://homenet.corbina.net/index.php?showtopic=199266" | ||
+ | else | ||
+ | echo "------------------------" | ||
+ | echo "Чтобы подключиться к интернету, напечатайте в консоли: sudo pon $i_vpn_name" | ||
+ | echo "Чтобы разорвать соединение, напечатайте в консоли: sudo poff" | ||
+ | echo "------------------------" | ||
+ | echo "Не забудьте сказать спасибо на форуме) По всем вопросам об этом скрипте - http://homenet.corbina.net/index.php?showtopic=199266" | ||
+ | fi | ||
+ | exit 0 | ||
+ | </code> | ||
+ | |||
+ | === vpn_eng.sh === | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | #path to ppp | ||
+ | ppp=/etc/ppp | ||
+ | |||
+ | if [[ $(id) != 'uid=0'* ]]; then | ||
+ | echo "Only root can set up VPN connections. Also you can use 'sudo'." | ||
+ | exit 1 | ||
+ | fi | ||
+ | echo "Welcome to VPN connection setup wizard! You'll be asked a few questions, and if you answer right - you'll get a working VPN connection with correct routing. Remember that 99% mistakes during VPN connection setup using this script is banal inattention. Be attentive and have luck!" | ||
+ | echo "So, let's begin!" | ||
+ | echo "------------------------" | ||
+ | printf "Enter your VPN connection name (e.g. corbina or vpn_corbina): " | ||
+ | read i_vpn_name | ||
+ | echo "------------------------" | ||
+ | echo "Please choose your provider:" | ||
+ | echo " 1. Corbina Telecom" | ||
+ | echo " 2. Beeline" | ||
+ | echo " 3. Other" | ||
+ | printf "Your provider is ...? (1/2/3)? " | ||
+ | read provider | ||
+ | if [ $provider = "1" ]; then | ||
+ | prov="Corbina Telecom" | ||
+ | vpn_address="vpn.corbina.net" | ||
+ | elif [ $provider = "2" ]; then | ||
+ | prov="Beeline" | ||
+ | vpn_address="vpn.internet.beeline.ru" | ||
+ | elif [ $provider = "3" ]; then | ||
+ | prov="Other" | ||
+ | echo "WARNING! You have to edit 'route' file attached to this script manually as it's configured to work with Corbina and Beeline only. Check your routing settings at your provider's technical support. Stop this script with Ctrl+C, edit 'route' file and then restart script." | ||
+ | echo "------------------------" | ||
+ | printf "Enter your VPN address: " | ||
+ | read vpn_address | ||
+ | else | ||
+ | echo "You've entered wrong answer. Please restart this script." | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | if [ $provider = "3" ]; then | ||
+ | region="3" | ||
+ | routes="route" | ||
+ | else | ||
+ | echo "------------------------" | ||
+ | echo "Please choose your region:" | ||
+ | echo " 1. Moscow region" | ||
+ | echo " 2. St.Petersburg region" | ||
+ | echo " 3. other" | ||
+ | printf "Your region is ...? (1/2/3)? " | ||
+ | read region | ||
+ | if [ $region = "1" ]; then | ||
+ | region_name="Moscow region" | ||
+ | routes="route.msk" | ||
+ | elif [ $region = "2" ]; then | ||
+ | region_name="St.Petersburg region" | ||
+ | routes="route.piter" | ||
+ | elif [ $region = "3" ]; then | ||
+ | region_name="other" | ||
+ | routes="route" | ||
+ | else | ||
+ | echo "You've entered wrong answer. Please restart this script." | ||
+ | exit 1 | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | echo "------------------------" | ||
+ | printf "Enter your internet login: " | ||
+ | read i_login | ||
+ | echo "------------------------" | ||
+ | printf "Enter your internet password: " | ||
+ | read i_password | ||
+ | |||
+ | echo "------------------------" | ||
+ | echo "Trying to detect your gateway IP automatically..." | ||
+ | i_gw=$(route|grep default|awk '{print $2}') | ||
+ | echo "Detected!" | ||
+ | echo "Your local gateway IP is $i_gw" | ||
+ | if [ $provider = "3" ]; then | ||
+ | printf "Is this correct? (y/n)" | ||
+ | read i_yn | ||
+ | if [ $i_yn = "n" ]; then | ||
+ | printf "Enter your gateway IP: " | ||
+ | read i_gw | ||
+ | fi | ||
+ | else | ||
+ | if [[ $i_gw != '10.'* ]]; then | ||
+ | echo "Unfortunately, the gateway IP wasn't detected correctly. It must look like 10.x.x.x, so you have to enter it manually." | ||
+ | printf "Enter your gateway IP: " | ||
+ | read i_gw | ||
+ | fi | ||
+ | fi | ||
+ | if [ $region = "2" ]; then | ||
+ | routing="Pre-set routes are in 'route' file as St.Petersburg and it's region doesn't have DHCP-routing support." | ||
+ | i_dhcp="n" | ||
+ | else | ||
+ | echo "------------------------" | ||
+ | echo "Now you have to choose routing setup method. You can choose DHCP routing or pre-set routes in 'route' file." | ||
+ | echo "------------------------" | ||
+ | printf "Do you want to get routes via DHCP? ([y]/n)? " | ||
+ | read i_dhcp | ||
+ | if [ $i_dhcp = "y" ]; then | ||
+ | routing="via DHCP" | ||
+ | elif [ $i_dhcp = "n" ]; then | ||
+ | routing="pre-set in 'route' file" | ||
+ | if [ $provider = "3" ]; then | ||
+ | echo "WARNING! You have to edit 'route' file attached to this script manually as it's configured to work with Corbina and Beeline only. Check your routing settings at your provider's technical support. Stop this script with Ctrl+C, edit 'route' file and then restart script." | ||
+ | fi | ||
+ | else | ||
+ | echo "You've entered wrong answer. Please restart this script." | ||
+ | exit 1 | ||
+ | fi | ||
+ | fi | ||
+ | echo "------------------------" | ||
+ | printf "Do you want to automatically install pptp-linux package? Answer 'n' if it's already installed or you have old distro (Debian Etch, Xandros on Eee PC etc.) (y/n): " | ||
+ | read i_install | ||
+ | if [ $i_install = "y" ]; then | ||
+ | pptp_linux="Yes" | ||
+ | else | ||
+ | pptp_linux="No" | ||
+ | fi | ||
+ | echo "------------------------" | ||
+ | echo "Checking gathered information :" | ||
+ | echo " Connection name: $i_vpn_name" | ||
+ | echo " Provider: $prov" | ||
+ | if [[ $provider != "3" ]]; then | ||
+ | echo " Region: $region_name" | ||
+ | fi | ||
+ | echo " Login: $i_login" | ||
+ | echo " Password: $i_password" | ||
+ | echo " VPN address: $vpn_address" | ||
+ | echo " Gateway: $i_gw" | ||
+ | echo " Routing setup: $routing" | ||
+ | echo " pptp-linux package setup: $pptp_linux" | ||
+ | printf "Is this correct? (y/n)? " | ||
+ | read i_correct | ||
+ | if [ $i_correct = "n" ]; then | ||
+ | echo "------------------------" | ||
+ | echo "Check the information and restart this script." | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | if [ $i_install = "y" ]; then | ||
+ | echo "Detecting your system type..." | ||
+ | bit=$(uname -m) | ||
+ | echo "Your system is detected as: $bit" | ||
+ | echo "Installing $bit version of pptp-linux..." | ||
+ | if [ $bit = "i686" ]; then | ||
+ | dpkg -i "$PWD"/pptp-linux_1.7.0-2ubuntu2_i386.deb | ||
+ | elif [ $bit = "x86_64" ]; then | ||
+ | dpkg -i "$PWD"/pptp-linux_1.7.0-2ubuntu2_amd64.deb | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | if [ $i_dhcp = "y" ]; then | ||
+ | cp "$PWD"/rfc3442-classless-static-routes /etc/dhcp3/dhclient-exit-hooks.d/rfc3442-classless-static-routes | ||
+ | mv /etc/dhcp3/dhclient.conf /etc/dhcp3/dhclient.conf_bak | ||
+ | cp "$PWD"/dhclient.conf /etc/dhcp3/dhclient.conf | ||
+ | echo "------------------------" | ||
+ | echo "Routing auto-setup via DHCP installed." | ||
+ | fi | ||
+ | echo "------------------------" | ||
+ | echo "Writing parameters for VPN connection..." | ||
+ | |||
+ | |||
+ | echo "${i_login} PPTP ${i_password} *" > $ppp/chap-secrets | ||
+ | |||
+ | |||
+ | cp "$PWD"/ip $ppp/ip-up > /dev/null | ||
+ | printf "${ppp}/ip-up.d/\$6 \$1 \$2 \$3 \$4 \$5 \$6" >> $ppp/ip-up | ||
+ | chmod a+x $ppp/ip-up | ||
+ | |||
+ | cp "$PWD"/ip $ppp/ip-down > /dev/null | ||
+ | printf "${ppp}/ip-down.d/\$6 \$1 \$2 \$3 \$4 \$5 \$6" >> $ppp/ip-down | ||
+ | chmod a+x $ppp/ip-down | ||
+ | |||
+ | cp "$PWD"/$routes $ppp/ip-up.d/$i_vpn_name | ||
+ | |||
+ | printf "route del \$4 dev \$1\n" >> $ppp/ip-up.d/$i_vpn_name | ||
+ | printf "route add -host \$4 gw ${i_gw}\n" >> $ppp/ip-up.d/$i_vpn_name | ||
+ | printf "do_route add ${i_gw} \n" >> $ppp/ip-up.d/$i_vpn_name | ||
+ | printf "route del default \n" >> $ppp/ip-up.d/$i_vpn_name | ||
+ | printf "route add default dev \$1 \n" >> $ppp/ip-up.d/$i_vpn_name | ||
+ | |||
+ | chmod a+x $ppp/ip-up.d/$i_vpn_name | ||
+ | |||
+ | cp "$PWD"/$routes $ppp/ip-down.d/$i_vpn_name | ||
+ | printf "do_route del ${i_gw} \n" >> $ppp/ip-down.d/$i_vpn_name | ||
+ | printf "route del default \n" >> $ppp/ip-down.d/$i_vpn_name | ||
+ | printf "route add default gw ${i_gw}\n" >> $ppp/ip-down.d/$i_vpn_name | ||
+ | chmod a+x $ppp/ip-down.d/$i_vpn_name | ||
+ | |||
+ | printf "nodeflate\nnobsdcomp\nnoauth\n" > $ppp/options.$i_vpn_name | ||
+ | |||
+ | printf "pty \"pptp $vpn_address --nolaunchpppd --nobuffer --loglevel 0\"\n" > $ppp/peers/$i_vpn_name | ||
+ | printf "connect /bin/true\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "name ${i_login}\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "remotename PPTP\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "file ${ppp}/options.$i_vpn_name\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "ipparam $i_vpn_name\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "persist\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "maxfail 0\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "lcp-echo-interval 30\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "lcp-echo-failure 4\n" >> $ppp/peers/$i_vpn_name | ||
+ | printf "mtu 1460\n" >> $ppp/peers/$i_vpn_name | ||
+ | echo "------------------------" | ||
+ | echo "Settings optimization is done!" | ||
+ | echo "------------------------" | ||
+ | echo "Auto reconnect is set up!" | ||
+ | echo "------------------------" | ||
+ | echo "Parameters setup succeeded!" | ||
+ | echo "------------------------" | ||
+ | echo "Restartint network services..." | ||
+ | /etc/init.d/networking restart | ||
+ | echo "Done!" | ||
+ | echo "------------------------" | ||
+ | printf "Do you want to establish your VPN connection now? ([y]/n)? " | ||
+ | read i_vpnstart | ||
+ | if [ $i_vpnstart = "y" ]; then | ||
+ | echo "------------------------" | ||
+ | echo "Starting VPN connection..." | ||
+ | pon $i_vpn_name | ||
+ | echo "VPN connection is set up and running. If it's all OK and you pay your internet bills then you're already using Internet :)" | ||
+ | echo "------------------------" | ||
+ | echo "To connect, type: sudo pon $i_vpn_name" | ||
+ | echo "To disconnect: sudo poff" | ||
+ | echo "------------------------" | ||
+ | echo "Don't forget to thank us at forum) All questions about this script - http://homenet.corbina.net/index.php?showtopic=199266" | ||
+ | else | ||
+ | echo "------------------------" | ||
+ | echo "To connect, type: sudo pon $i_vpn_name" | ||
+ | echo "To disconnect: sudo poff" | ||
+ | echo "------------------------" | ||
+ | echo " Don't forget to thank us at forum) All questions about this script - http://homenet.corbina.net/index.php?showtopic=199266" | ||
+ | fi | ||
+ | exit 0 | ||
+ | </code> | ||
+ | |||
+ | === route.piter === | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | #PATH | ||
+ | PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin | ||
+ | export PATH | ||
+ | |||
+ | do_route () | ||
+ | { | ||
+ | act=$1 | ||
+ | gw=$2 | ||
+ | #!!Все нижеперечисленные маршруты указаны только для Корбина-Телеком и Билайн!! | ||
+ | #-------Общие маршруты для всех регионов--------------: | ||
+ | #Локальная сеть: | ||
+ | route $act -net 10.0.0.0 netmask 255.0.0.0 gw $gw | ||
+ | #corbina.ru, help.corbina.ru, home.corbina.ru | ||
+ | route $act -host 89.179.135.67 gw $gw | ||
+ | #Форум homenet.corbina.net | ||
+ | route $act -host 85.21.72.83 gw $gw | ||
+ | #ftp.corbina.net | ||
+ | route $act -host 195.14.50.21 gw $gw | ||
+ | #SIP-сервер | ||
+ | route $act -host 195.14.50.93 gw $gw | ||
+ | #Игровые сервера | ||
+ | route $act -host 85.21.37.16 netmask 255.255.240.0 gw $gw | ||
+ | #Сервер статистики | ||
+ | route $act -host 195.14.50.26 gw $gw | ||
+ | #Сервер точного времени (NTP) | ||
+ | route $act -host 195.14.40.141 gw $gw | ||
+ | #Corbina TV Москва+Питер | ||
+ | route $act -host 85.21.138.208 netmask 255.255.255.240 gw $gw | ||
+ | route $act -host 85.21.52.254 gw $gw | ||
+ | route $act -host 85.21.88.130 gw $gw | ||
+ | route $act -host 83.102.146.96 netmask 255.255.240.224 gw $gw | ||
+ | route $act -net 78.107.23.0 netmask 255.255.255.0 gw $gw | ||
+ | #Corbina TV Питер | ||
+ | route $act -host 83.102.255.128 netmask 255.255.255.240 gw $gw | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | === route.msk === | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | #PATH | ||
+ | PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin | ||
+ | export PATH | ||
+ | iptv=(ifconfig eth0 | grep "inet addr" | sed "s#^\s*inet addr:##" | awk 'IFS=" " {print $1;}') | ||
+ | do_route () | ||
+ | { | ||
+ | act=$1 | ||
+ | gw=$2 | ||
+ | #!!Все нижеперечисленные маршруты указаны только для Корбина-Телеком и Билайн!! | ||
+ | #-------Общие маршруты для всех регионов--------------: | ||
+ | #Локальная сеть: | ||
+ | route $act -net 10.0.0.0 netmask 255.0.0.0 gw $gw | ||
+ | #corbina.ru, help.corbina.ru, home.corbina.ru | ||
+ | route $act -host 89.179.135.67 gw $gw | ||
+ | #Форум homenet.corbina.net | ||
+ | route $act -host 85.21.72.83 gw $gw | ||
+ | #ftp.corbina.net | ||
+ | route $act -host 195.14.50.21 gw $gw | ||
+ | #SIP-сервер | ||
+ | route $act -host 195.14.50.93 gw $gw | ||
+ | #Игровые сервера | ||
+ | route $act -host 85.21.37.16 netmask 255.255.240.0 gw $gw | ||
+ | #Сервер статистики | ||
+ | route $act -host 195.14.50.26 gw $gw | ||
+ | #Сервер точного времени (NTP) | ||
+ | route $act -host 195.14.40.141 gw $gw | ||
+ | #------------Москва--------------: | ||
+ | #Москва - Локальные ресурсы | ||
+ | route $act -net 85.21.79.0 netmask 255.255.255.0 gw $gw | ||
+ | route $act -net 85.21.90.0 netmask 255.255.255.0 gw $gw | ||
+ | #Москва - Почтовый сервер | ||
+ | route $act -host 195.14.50.16 gw $gw | ||
+ | #Москва - Игровые сервера | ||
+ | route $act -host 83.102.231.32 netmask 255.255.255.240 gw $gw | ||
+ | route $act -host 85.21.108.16 netmask 255.255.255.240 gw $gw | ||
+ | #Corbina TV Москва+Питер | ||
+ | route $act -host 85.21.138.208 netmask 255.255.255.240 gw $gw | ||
+ | route $act -host 85.21.52.254 gw $gw | ||
+ | route $act -host 85.21.88.130 gw $gw | ||
+ | route $act -host 83.102.146.96 netmask 255.255.240.224 gw $gw | ||
+ | route $act -net 78.107.23.0 netmask 255.255.255.0 gw $gw | ||
+ | #IP-TV через VLC | ||
+ | route $act -net 233.32.240.0 netmask 255.255.255.0 gw $iptv | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | === route === | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | #PATH | ||
+ | PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin | ||
+ | export PATH | ||
+ | |||
+ | do_route () | ||
+ | { | ||
+ | act=$1 | ||
+ | gw=$2 | ||
+ | #!!Все нижеперечисленные маршруты указаны только для Корбина-Телеком и Билайн!! | ||
+ | #-------Общие маршруты для всех регионов--------------: | ||
+ | #Локальная сеть: | ||
+ | route $act -net 10.0.0.0 netmask 255.0.0.0 gw $gw | ||
+ | #corbina.ru, help.corbina.ru, home.corbina.ru | ||
+ | route $act -host 89.179.135.67 gw $gw | ||
+ | #Форум homenet.corbina.net | ||
+ | route $act -host 85.21.72.83 gw $gw | ||
+ | #ftp.corbina.net | ||
+ | route $act -host 195.14.50.21 gw $gw | ||
+ | #SIP-сервер | ||
+ | route $act -host 195.14.50.93 gw $gw | ||
+ | #Игровые сервера | ||
+ | route $act -host 85.21.37.16 netmask 255.255.240.0 gw $gw | ||
+ | #Сервер статистики | ||
+ | route $act -host 195.14.50.26 gw $gw | ||
+ | #Сервер точного времени (NTP) | ||
+ | route $act -host 195.14.40.141 gw $gw | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | === rfc3442-classless-static-routes === | ||
+ | |||
+ | <code bash> | ||
+ | RUN="yes" | ||
+ | |||
+ | |||
+ | if [ "$RUN" = "yes" ]; then | ||
+ | |||
+ | if [ x"$new_rfc3442_classless_static_routes" != x"" ]; then | ||
+ | |||
+ | if [ x"$reason" == x"BOUND" ]; then | ||
+ | rfc_routes=($new_rfc3442_classless_static_routes) | ||
+ | |||
+ | for(( i=0; i < ${#rfc_routes[@]}; )); do | ||
+ | net_length=${rfc_routes[$i]} | ||
+ | |||
+ | ((i++)) | ||
+ | |||
+ | net_address=(0 0 0 0) | ||
+ | for(( j=0; j < $[$net_length / 8 + \ | ||
+ | ($net_length % 8 ? 1 : 0)]; j++, i++)); do | ||
+ | |||
+ | net_address[$j]=${rfc_routes[$i]} | ||
+ | done | ||
+ | |||
+ | gateway=(0 0 0 0) | ||
+ | for (( j=0; j < 4; j++, i++ )); do | ||
+ | gateway[$j]=${rfc_routes[$i]} | ||
+ | done | ||
+ | |||
+ | old_IFS="$IFS" | ||
+ | IFS='.' | ||
+ | |||
+ | if [ x"$net_length" == x"32" ]; then | ||
+ | /sbin/route add -host "${net_address[*]}" gw "${gateway[*]}" | ||
+ | else | ||
+ | /sbin/route add -net "${net_address[*]}/$net_length" gw "${gateway[*]}" | ||
+ | fi | ||
+ | IFS="$old_IFS" | ||
+ | |||
+ | done | ||
+ | |||
+ | fi | ||
+ | fi | ||
+ | fi | ||
+ | </code> | ||
+ | |||
+ | === ip === | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | #PATH | ||
+ | PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin | ||
+ | export PATH | ||
+ | |||
+ | #IP-* | ||
+ | </code> | ||
+ | |||
+ | === dhclient.conf === | ||
+ | |||
+ | <code bash> | ||
+ | # Configuration file for /sbin/dhclient, which is included in Debian's | ||
+ | # dhcp3-client package. | ||
+ | # | ||
+ | # This is a sample configuration file for dhclient. See dhclient.conf's | ||
+ | # man page for more information about the syntax of this file | ||
+ | # and a more comprehensive list of the parameters understood by | ||
+ | # dhclient. | ||
+ | # | ||
+ | # Normally, if the DHCP server provides reasonable information and does | ||
+ | # not leave anything out (like the domain name, for example), then | ||
+ | # few changes must be made to this file, if any. | ||
+ | # | ||
+ | |||
+ | send host-name "<hostname>"; | ||
+ | #send dhcp-client-identifier 1:0:a0:24:ab:fb:9c; | ||
+ | #send dhcp-lease-time 3600; | ||
+ | #supersede domain-name "fugue.com home.vix.com"; | ||
+ | #prepend domain-name-servers 127.0.0.1; | ||
+ | #request subnet-mask, broadcast-address, time-offset, routers, | ||
+ | # domain-name, domain-name-servers, host-name, | ||
+ | # netbios-name-servers, netbios-scope; | ||
+ | #require subnet-mask, domain-name-servers; | ||
+ | timeout 30; | ||
+ | #retry 60; | ||
+ | #reboot 10; | ||
+ | #select-timeout 5; | ||
+ | #initial-interval 2; | ||
+ | #script "/etc/dhcp3/dhclient-script"; | ||
+ | #media "-link0 -link1 -link2", "link0 link1"; | ||
+ | #reject 192.33.137.209; | ||
+ | |||
+ | #alias { | ||
+ | # interface "eth0"; | ||
+ | # fixed-address 192.5.5.213; | ||
+ | # option subnet-mask 255.255.255.255; | ||
+ | #} | ||
+ | |||
+ | #lease { | ||
+ | # interface "eth0"; | ||
+ | # fixed-address 192.33.137.200; | ||
+ | # medium "link0 link1"; | ||
+ | # option host-name "andare.swiftmedia.com"; | ||
+ | # option subnet-mask 255.255.255.0; | ||
+ | # option broadcast-address 192.33.137.255; | ||
+ | # option routers 192.33.137.250; | ||
+ | # option domain-name-servers 127.0.0.1; | ||
+ | # renew 2 2000/1/12 00:00:01; | ||
+ | # rebind 2 2000/1/12 00:00:01; | ||
+ | # expire 2 2000/1/12 00:00:01; | ||
+ | #} | ||
+ | option rfc3442-classless-static-routes code 121 = array of unsigned integer 8; | ||
+ | request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, host-name, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes; | ||
+ | </code> | ||
+ | |||
+ | === Дополнительно === | ||
+ | |||
+ | Дополнительно, в архив входят пакеты pptp-linux_1.7.0-2ubuntu2_amd64 и pptp-linux_1.7.0-2ubuntu2_i386 . | ||
+ | |||
+ | ==== Ссылки ==== | ||
+ | |||
+ | [[http://forum.ubuntu.ru/index.php?topic=50258.msg368576#msg368576 | Обсуждение скрипта на форуме ]] | ||
+ | |||
+ | {{tag> Скрипты}} |