Настройка PPTP VPN в консоли: различия между версиями
Misha (обсуждение | вклад) (→Создаем файл настроек подключения) |
Misha (обсуждение | вклад) (→Создаем файл настроек подключения) |
||
(не показано 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
Взято тут
Итак, займемся делом! Поскольку все будем настраивать вручную, все действия выполняем в консоли.
Содержание
- 1 Устанавливаем клиентскую программу.
- 2 Создаем общий файл настроек.
- 3 Записваем имя пользователя и пароль в отдельный файл.
- 4 Создаем файл настроек подключения
- 5 Создаем нужные роуты
- 6 Пробуем!
- 7 Последние штрихи
- 8 Настройка VPN соединения на сервере, где стоит VPN сервер для раздачи инета в локальной сети.
Устанавливаем клиентскую программу.
Для этого выполняем всего одну команду.
$ 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 сервер для раздачи инета в локальной сети.
В таком случае может возникнуть проблема,
- что инет соединение с провом может попасть не на ppp0, а на любой другой, например, ppp1,ppp2...
- 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