Настройка PPTP VPN в консоли: различия между версиями

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Создаем файл настроек подключения)
(Создаем файл настроек подключения)
 
(не показано 9 промежуточных версий этого же участника)
Строка 22: Строка 22:
 
name $USERNAME
 
name $USERNAME
 
remotename PPTP
 
remotename PPTP
 +
mtu 1400
 +
mru 1400
 +
lcp-echo-failure 10
 +
lcp-echo-interval 10
 +
 
require-mschap-v2
 
require-mschap-v2
 
# (note that MPPE requires the use of MSCHAP-V2 during authentication)
 
# (note that MPPE requires the use of MSCHAP-V2 during authentication)
Строка 28: Строка 33:
 
ipparam $TUNNEL</pre>
 
ipparam $TUNNEL</pre>
 
Где $SERVER - это адрес VPN-сервера. Сохраняем файл и приступаем к тестированию.
 
Где $SERVER - это адрес VPN-сервера. Сохраняем файл и приступаем к тестированию.
 +
 
==Создаем нужные роуты==
 
==Создаем нужные роуты==
 
Создаем файл /etc/ppp/ip-up.d/$TUNNEL и прописываем роуты, при подключении  
 
Создаем файл /etc/ppp/ip-up.d/$TUNNEL и прописываем роуты, при подключении  
 
<pre>
 
<pre>
 +
#!/bin/sh
 
route del default
 
route del default
 
route add default dev ppp0
 
route add default dev ppp0
Строка 37: Строка 44:
 
Создаем файл /etc/ppp/ip-down.d/$TUNNEL и прописываем роуты, при отключении  
 
Создаем файл /etc/ppp/ip-down.d/$TUNNEL и прописываем роуты, при отключении  
 
<pre>
 
<pre>
 +
#!/bin/sh
 
route add default gw $GW dev eth0
 
route add default gw $GW dev eth0
 
</pre>
 
</pre>
 +
Даем нужные права
 +
<pre>$sudo chmod 755 /etc/ppp/ip-up.d/$TUNNEL
 +
$sudo chmod 755 /etc/ppp/ip-down.d/$TUNNEL</pre>
  
 
==Пробуем!==
 
==Пробуем!==
Строка 54: Строка 65:
 
Чтобы соединение было стабильным и автоперезапускаемым в случае обрыва, в файл настроек подключения нужно добавить следующие строки:
 
Чтобы соединение было стабильным и автоперезапускаемым в случае обрыва, в файл настроек подключения нужно добавить следующие строки:
 
<pre>persist
 
<pre>persist
holdoff 10
+
holdoff 10 #Каждые 10 сек, будет попытка восстановит соединение при его падении.
 
maxfail 0</pre>
 
maxfail 0</pre>
 
И чтобы соединение запускалось автоматически при загрузке операционной системы, добавим его в файл сетевых интерфейсов /etc/network/interfaces
 
И чтобы соединение запускалось автоматически при загрузке операционной системы, добавим его в файл сетевых интерфейсов /etc/network/interfaces
Строка 60: Строка 71:
 
iface ppp0 inet ppp
 
iface ppp0 inet ppp
 
provider $TUNNEL</pre>
 
provider $TUNNEL</pre>
В идеале все должно сразу же заработать. Однако, жизнь - не такая простая штука, как нам того хотелось бы. Лично у меня возникли проблемы с моим персональным фаирволом, и мне пришлось еще немного попотеть, прежде чем все получилось. А у вас заработало?
+
В идеале все должно сразу же заработать. Однако, жизнь - не такая простая штука, как нам того хотелось бы. Лично у меня возникли проблемы с моим персональным фаeрволом, и мне пришлось еще немного попотеть, прежде чем все получилось. А у вас заработало?
 +
==Настройка VPN соединения на сервере, где стоит VPN сервер для раздачи инета в локальной сети.==
 +
В таком случае может возникнуть проблема,
 +
# что инет соединение с провом может попасть не на ppp0, а на любой другой, например, ppp1,ppp2...
 +
# IP адрес интернета мб динамическим
 +
===Убираем авто запуск соединения===
 +
Редактируем строки в /etc/network/interfaces
 +
<pre>
 +
#Auto pptp connection
 +
#auto ppp0
 +
#iface ppp0 inet ppp
 +
#provider miac
 +
</pre>
 +
и в файле /etc/ppp/peers/$name, где $name - имя нашего соединения
 +
<pre>#Восстановление связи при обрыве.
 +
#persist holdoff 10 # Каждые 10 секунд после обрыва связи буде попытка ее восстановить
 +
#maxfail 0</pre>
 +
===Настраиваем скрипт, который выполняется после поднятия соединения===
 +
Редактируем /etc/ppp/ip-up.d/$name
 +
<pre>
 +
#!/bin/sh
 +
inet_net="91.215." # сеть провайдера
 +
route del default
 +
# Находим интерфейс на котором висит интернет (соединение с провайдером)
 +
dev_inet=`ifconfig| grep -A1 ppp | grep $inet_net -B2 | grep ppp |cut -d ' '  -f1`
 +
# Можете добавить свои роуты
 +
 
 +
# И поднимаем route default
 +
route add default dev $dev_inet
 +
# тк у нас динамический ip, то надо запустить скрипт который подгрузит правила для нужного ip
 +
# если Вы используете MASQUERADE, то этого можно не делать.
 +
/etc/scripts/iptables.sh
 +
</pre>
 +
===Настройка iptables===
 +
тк у нас динамический ip, мы добавляем в скрипт iptables.sh следующие строки.
 +
<pre>
 +
# Сеть Internet прова
 +
inet_net="91.215."
 +
# Определяем ip адрес выхода с инет
 +
IP_BL=`ifconfig| grep $inet_net | cut -d ":" -f2 | cut -d " " -f1`</pre>
 +
И дальше используем данный ip адрес для работы в скрипте для NAT.
 +
 
 +
===Поднятие соединения при загрузке===
 +
В файл /etc/rc.local добавляем следующие строки до строки exit 0
 +
<pre>
 +
/etc/scripts/iptables.sh # если соединение не поднимется, то фаервол будет работать
 +
pon $name #  Поднимаем VPN соединение</pre>
 +
===Проверка и восстановление соединения===
 +
Создаем скрипт, который каждую минуту будет проверять соединение и, если надо перезапускать его (/etc/scripts/route-exist.sh)
 +
<pre>
 +
#!/bin/bash
 +
inet_net="91.215" # Сеть прова
 +
 
 +
# Если слетел default route
 +
dev_route=`ip route | grep default | cut -d ' ' -f3`
 +
dev_inet=`ifconfig| grep -A1 "ppp" | grep $inet_net -B2 | grep "ppp" |cut -d ' '  -f1`
 +
 
 +
# если инет соединение есть
 +
if [ -n "$dev_inet" ]; then
 +
    # Если есть default route
 +
    if [ -n "$dev_route" ]; then
 +
#Если не правильный default route
 +
if [ "$dev_inet" != "$dev_route" ]; then
 +
    route del default
 +
        route add default $dev_inet
 +
fi
 +
    else
 +
route add default $dev_inet
 +
    fi
 +
else
 +
    # Если нет интернет соединения или оно не работает
 +
    # Поднимаем VPN соединение
 +
    pon $name # не забудьте поменять $name на ваше.
 +
fi
 +
exit 0
 +
</pre>
 +
 
 +
===Настраиваем CRON для проверки соединения===
 +
Редактируем    /etc/crontab, добавляем строку.
 +
<pre>
 +
# Проверка и восстановление интернет соединения
 +
*/1  * * * * root  /etc/scripts/route_exist.sh
 +
</pre>

Текущая версия на 22:19, 28 октября 2013

Взято тут
Итак, займемся делом! Поскольку все будем настраивать вручную, все действия выполняем в консоли.

Устанавливаем клиентскую программу.

Для этого выполняем всего одну команду.

$ sudo apt-get install pptp-linux

Создаем общий файл настроек.

В этом файле буду располагаться настройки для всех pptp подключений. Это на тот случай, если вы подключитесь к еще одному провайдеру ;-)

$ sudo sh -c 'echo "lock noauth nobsdcomp nodeflate" > /etc/ppp/options.pptp'

Записваем имя пользователя и пароль в отдельный файл.

$ sudo sh -c 'echo "$USERNAME PPTP $PASSWORD *" >> /etc/ppp/chap-secrets'

$USERNAME - логин, $PASSWORD - пароль соответственно.

Чтобы всякие злобные вредители не прочитали ваши секреты, убедитесь, что файл паролей не общедоступен.

$ sudo chmod o-rw /etc/ppp/chap-secrets

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

Создаем файл /etc/ppp/peers/$TUNNEL
$TUNNEL - название подключения. Придумайте его сами. Вместо vim можно написать название любого любимого вами текстового редактора.

В файл пишем следующие строки:

pty "pptp $SERVER --nolaunchpppd"
name $USERNAME
remotename PPTP
mtu 1400
mru 1400
lcp-echo-failure 10
lcp-echo-interval 10

require-mschap-v2
# (note that MPPE requires the use of MSCHAP-V2 during authentication)
require-mppe-128
file /etc/ppp/options.pptp
ipparam $TUNNEL

Где $SERVER - это адрес VPN-сервера. Сохраняем файл и приступаем к тестированию.

Создаем нужные роуты

Создаем файл /etc/ppp/ip-up.d/$TUNNEL и прописываем роуты, при подключении

#!/bin/sh 
route del default
route add default dev ppp0

Тут могут быть и другие строки. Создаем файл /etc/ppp/ip-down.d/$TUNNEL и прописываем роуты, при отключении

#!/bin/sh 
route add default gw $GW dev eth0

Даем нужные права

$sudo chmod 755 /etc/ppp/ip-up.d/$TUNNEL
$sudo chmod 755 /etc/ppp/ip-down.d/$TUNNEL

Пробуем!

$ sudo pon $TUNNEL debug dump logfd 2 nodetach

Эта команда запустит подключение в отладочном режиме. nodetach означает, что вся отладочная информация будет выводиться прямо в консоль. Если в конце вы увидите следующие строки

Script /etc/ppp/ip-up started (pid 9658)
Script /etc/ppp/ip-up finished (pid 9658), status = 0x0

это означает, что подключение успешно выполнено. В противном случае попробуйте еще пару раз. Возможно просто произошел какой-то сбой при подключении.

Для запуска подключения в штатном режиме достаточно выполнить:

$ sudo pon $TUNNEL

Чтобы отключиться:

$ sudo poff $TUNNEL

Последние штрихи

Чтобы соединение было стабильным и автоперезапускаемым в случае обрыва, в файл настроек подключения нужно добавить следующие строки:

persist
holdoff 10 #Каждые 10 сек, будет попытка восстановит соединение при его падении.
maxfail 0

И чтобы соединение запускалось автоматически при загрузке операционной системы, добавим его в файл сетевых интерфейсов /etc/network/interfaces

auto ppp0
iface ppp0 inet ppp
provider $TUNNEL

В идеале все должно сразу же заработать. Однако, жизнь - не такая простая штука, как нам того хотелось бы. Лично у меня возникли проблемы с моим персональным фаeрволом, и мне пришлось еще немного попотеть, прежде чем все получилось. А у вас заработало?

Настройка VPN соединения на сервере, где стоит VPN сервер для раздачи инета в локальной сети.

В таком случае может возникнуть проблема,

  1. что инет соединение с провом может попасть не на ppp0, а на любой другой, например, ppp1,ppp2...
  2. IP адрес интернета мб динамическим

Убираем авто запуск соединения

Редактируем строки в /etc/network/interfaces

#Auto pptp connection
#auto ppp0
#iface ppp0 inet ppp
#provider miac

и в файле /etc/ppp/peers/$name, где $name - имя нашего соединения

#Восстановление связи при обрыве.
#persist holdoff 10 # Каждые 10 секунд после обрыва связи буде попытка ее восстановить
#maxfail 0

Настраиваем скрипт, который выполняется после поднятия соединения

Редактируем /etc/ppp/ip-up.d/$name

#!/bin/sh 
inet_net="91.215." # сеть провайдера
route del default 
# Находим интерфейс на котором висит интернет (соединение с провайдером)
dev_inet=`ifconfig| grep -A1 ppp | grep $inet_net -B2 | grep ppp |cut -d ' '  -f1` 
# Можете добавить свои роуты

# И поднимаем route default
route add default dev $dev_inet
# тк у нас динамический ip, то надо запустить скрипт который подгрузит правила для нужного ip
# если Вы используете MASQUERADE, то этого можно не делать.
/etc/scripts/iptables.sh

Настройка iptables

тк у нас динамический ip, мы добавляем в скрипт iptables.sh следующие строки.

# Сеть Internet прова
inet_net="91.215."
# Определяем ip адрес выхода с инет
IP_BL=`ifconfig| grep $inet_net | cut -d ":" -f2 | cut -d " " -f1`

И дальше используем данный ip адрес для работы в скрипте для NAT.

Поднятие соединения при загрузке

В файл /etc/rc.local добавляем следующие строки до строки exit 0

/etc/scripts/iptables.sh # если соединение не поднимется, то фаервол будет работать
pon $name #  Поднимаем VPN соединение

Проверка и восстановление соединения

Создаем скрипт, который каждую минуту будет проверять соединение и, если надо перезапускать его (/etc/scripts/route-exist.sh)

#!/bin/bash
inet_net="91.215" # Сеть прова

# Если слетел default route
dev_route=`ip route | grep default | cut -d ' ' -f3`
dev_inet=`ifconfig| grep -A1 "ppp" | grep $inet_net -B2 | grep "ppp" |cut -d ' '  -f1`

# если инет соединение есть
if [ -n "$dev_inet" ]; then
    # Если есть default route
    if [ -n "$dev_route" ]; then
	#Если не правильный default route 
	if [ "$dev_inet" != "$dev_route" ]; then
	    route del default
    	    route add default $dev_inet
	fi
    else 
	route add default $dev_inet
    fi
else
    # Если нет интернет соединения или оно не работает
    # Поднимаем VPN соединение
    pon $name # не забудьте поменять $name на ваше.
fi 
exit 0

Настраиваем CRON для проверки соединения

Редактируем /etc/crontab, добавляем строку.

# Проверка и восстановление интернет соединения
*/1  * * * * root   /etc/scripts/route_exist.sh