Настройка VPN под Linux

Настройка VPN соединения для пользователей ПАРК-ТЕЛЕКОМ (на примере старенькокогого RH)


1. Проверяем наличие пакета pptp-linux в системе:

# rpm -q pptp-linux

Если нету, то устанавливаем подходящую по зависимостям версию.

2. Смотрим маршруты в локальной сети:

# route

Должно вывалиться нечто подобное:

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Ifac
10.10.xxx.0 * 255.255.255.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default 10.10.xxx.254 0.0.0.0 UG 0 0 0 eth0

Нас интересует последняя строчка с шлюзом по дефолту. Запоминаем значение в колонке Gateway, оно нам понадобится. Для тех кто на иксах сидит могут и в свойствах локального соединения посмотреть.

3. Настраиваем ВПН (далее в скобочках буду ставить каменты, все строки ввода завершаем ентерами):

# pptp-command
1.) start
2.) stop
3.) setup
4.) quit
What task would you like to do?: 3 (выбираем setup)

1.) Manage CHAP secrets
2.) Manage PAP secrets
3.) List PPTP Tunnels
4.) Add a NEW PPTP Tunnel
5.) Delete a PPTP Tunnel
6.) Configure resolv.conf
7.) Select a default tunnel
8.) Quit
?: 4 (хочу добавить новый тунель)

Add a NEW PPTP Tunnel.
1.) Other

Which configuration would you like to use?: 1 (особого выбора тут нет)
Tunnel Name: park-telecom (любое имя, хоть ...опа главное запомните его)
Server IP: 10.10.10.10 (ну это каждый школьник уже знает)

Тут выскакивает небольшая справка о перенастройке сетевых маршрутов при поднятии туннеля и, соответственно, само приглашение к действиям. Это очень важный момент и от того на сколько правильно будет все сделано, зависит дальнейшая судьба вашего и-нета.

What route(s) would you like to add when the tunnel comes up?
This is usually a route to your internal network behind the PPTP server.
You can use TUNNEL_DEV and DEF_GW as in /etc/pptp.d/ config file
TUNNEL_DEV is replaced by the device of the tunnel interface.
DEF_GW is replaced by the existing default gateway.
The syntax to use is the same as the route(8) command.
Enter a blank line to stop.

Можно сделать по-босятски, через коленку (именно для этого запоминали дефаулт гейтвэй на шаге 2):

route: add -host 10.10.10.10 gw 10.10.xxx.254
route: del default dev eth0
route: add default dev ppp0
route: (завершаем пустой строкой)

А можно сделать и красиво, выдержать так сказать идейную линию авторов пакета и шибко не замарачиваться, какие там ррр-фейсы задействовать и какой там шлюз по дефолту (в таком случае шаг 2 подготовки становится вообще неактуальным):

route: add -host 10.10.10.10 gw DEF_GW
route: del default gw DEF_GW
route: add default dev TUNNEL_DEV
route: (завершаем пустой строкой)

(Хочу заметить, на моей старой версии линуха данная штука с переменными частично не проканала - деф_гв упорно не хотел определяться. ... Ну и еще одна фигня всплыла. Если на машине более одного интерфейса и парк-телекомовская сетка не на етх0, то при отключении тунеля обратный процесс с дефолтовыми шлюзами может и не произойти Хотя может это все опять же от старости и линухи, и пакета пптп (1.1.0)... да и сборщики от асп может где лоханулись. Мне лень было разбираться, поэтому выбрал себе немного другой способ подключения.)

Ну с этим разобрались, идем дальше:

Local Name and Remote Name should match a configured CHAP or PAP secret.
Local Name is probably your NT domain\username.
NOTE: Any backslashes (\) must be doubled (\\).
Local Name: Pupkin (ваше имя пользователя согласно договору)
Remote Name [PPTP]: (не важно какое, жмите просто ентер, по умолчанию будет стоять РРТР)
Adding rest - 10.10.10.10 - Pupkin - PPTP
Added tunnel PARK-TELECOM

1.) Manage CHAP secrets
2.) Manage PAP secrets
3.) List PPTP Tunnels
4.) Add a NEW PPTP Tunnel
5.) Delete a PPTP Tunnel
6.) Configure resolv.conf
7.) Select a default tunnel
8.) Quit
?: 1 (мэнэджим свой аккаунт VPN на предмет имени и пароля)

1.) List CHAP secrets
2.) Add a New CHAP secret
3.) Delete a CHAP secret
4.) Quit
?: 2 (добавляем новый)
Add a NEW CHAP secret.
NOTE: Any backslashes (\) must be doubled (\\).
Local Name:
This is the 'local' identifier for CHAP authentication.
NOTE: If the server is a Windows NT machine, the local name
should be your Windows NT username including domain.
For example:
domain\\username

Local Name: Pupkin (имя пользователя)
Remote Name:

This is the 'remote' identifier for CHAP authentication.
In most cases, this can be left as the default. It must be
set if you have multiple CHAP secrets with the same local name
and different passwords. Just press ENTER to keep the default.

Remote Name [PPTP]: (не имееет значения, по умолчанию будет опять же PPTP)

Password:
This is the password or CHAP secret for the account specified. The
password will not be echoed.

Password: (вводим пароль, как обычно, 6-ть звездочек вводимые символы не отображаются!)

Adding secret Pupkin PPTP *****
1.) List CHAP secrets
2.) Add a New CHAP secret
3.) Delete a CHAP secret
4.) Quit
?: 4 (выходим)

1.) Manage CHAP secrets
2.) Manage PAP secrets
3.) List PPTP Tunnels
4.) Add a NEW PPTP Tunnel
5.) Delete a PPTP Tunnel
6.) Configure resolv.conf
7.) Select a default tunnel
8.) Quit
?: 7 (выбираем тунель по умолчанию)

1.) park-telecom
2.) cancel
Which tunnel do you want to be the default?: 1 (его родимого )

Жмем восьмерочку и выходим.

4. Проверяем наше соединение:

# pptp-command start

Если вывалится подобное:

Route: add -host 10.10.10.10 gw 10.10.ххх.254 added
Route: del default gw 10.10.ххх.254 added
Route: add default dev ppp0 added
All routes added.
Tunnel park-telecom is active on ppp0. IP Address: 172.16.xxx.xxx

...то, вы в коннекте. При желании можете сделать ярлычок на рабочем столе.


«Демонизация» VPN

По просьбе одного адмынистратора линугз-сервера выкладываю содержимое файлов "демонизации" парк-телекомовского впн.

Данное решение может быть полезно так же тем кому лень каждый раз запускать впн при старте системы или после обрывов связи (не частых, но, к сожалению, еще пока существующих).

1. Создаем (можно в домашнем каталоге) файлик инициализации нашего "демона". В рамках общей концепции назвал его pptpcd. Его содержимое типично для скриптов каталога /etc/init.d и достаточно наглядно описано в мануле /usr/share/doc/initscripts-xxx/sysvinitfiles :

#!/bin/sh
#
# pptpcd Start pptp-client daemon
#
#
# chkconfig: 345 95 5
# description: PPTP client daemon
#
# Source function library.
. /etc/rc.d/init.d/functions

[ -f /usr/sbin/pptp -a -f /etc/ppp/pptp-up ] || exit 0

RETVAL=0

# See how we were called.
case "$1" in
start)
echo -n "Starting system pptp-client: "
# we don't want the MARK ticks
nohup /etc/ppp/pptp-up >/dev/null 2>&1 &
success
RETVAL=$?
echo
;;
stop)
echo -n "Shutting down system pptp-client: "
killproc pptp-up
killproc pppd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/pptpcd
;;
status)
status pptp
RETVAL=$?
;;
restart|reload)
$0 stop
$0 start
RETVAL=$?
;;
*)
echo "Usage: pptpcd {start|stop|status|restart}"
exit 1
esac

exit $RETVAL

2. Не забываем выставить права доступа (755) и владельца (root) файла.

3. Переходим в каталог /etc/ppp и создаем непосредственно файл нашего "демона" pptp-up:

#!/bin/bash

NAME="Ваш логин"
PPP_OPT="nodetach noauth nobsdcomp nodeflate defaultroute"
LOG="/var/log/pptpcd.log"

route del default

while true; do
sleep 30;
echo -e "\n\n== Connect VPN `date` ==\n\n" >> $LOG
pppd $PPP_OPT name $NAME pty "pptp 10.10.10.10 --nolaunchpppd" >> $LOG
done

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

4. Стандартно правим файл /etc/ppp/chap-secrets на предмет своего логина и пароля:

# Secrets for authentication using CHAP
# client server secret IP addresses
* *

5. Устанавливаем скрипт инициализации в системе:

chkconfig --add pptpcd

6. Прэсто! Пользуемся.
Сразу после установки придется все-таки один раз стартануть ручками

/etc/init.d/pptpcd start

В дальнейшем это уже не понадобится.

PS: Данный способ не является панацеей и имеет ряд изъянов. Если какие будут предложения по доработке, милости просим.

PS: Идея и реализация не моя. Нарыл где-то в просторах инета, что уже не помню где. Так только, причесал децл.

PS: Есть возможность прикрутить в скрипте pptp-up предварительную проверку на доступность впн-сервера пингами, что бы лишний раз ррр демон не напрягать бесполезными попытками конекта.