Настройка VPN через PPTP

Опубликовано mensh - ср, 06/17/2009 - 11:22

Некоторые провайдеры используют технологию VPN для предоставления доступа в интернет. На сайтах провайдеров есть, как правило, настройки лишь для Windows. 

В связи с вышеизложенным предлагается способ установки VPN-соединения под Linux с использованием pptp-клиента.

Содержание

Установка PPTP

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

В первую очередь необходимы пакеты ppp и pptp. Первый пакет, как правило, включён в состав дистрибутива, а второй необходимо скачать и установить. При отсутствии пакета pptp, собранного под определённый дистрибутив, можно скачать его с сервера SourceForge или скачать тарболл, а затем собрать программный пакет или выполнить установку «классическим» способом.

В файл /etc/ppp/chap-secrets дописывается строка:

[your_login] * [your_password]

Здесь указываем свои логин и пароль.

Редактируем файл (при отсутствии создаем его) /etc/ppp/peers/pptp:

persist
noauth
pty "/usr/sbin/pptp [vpn-сервер] --nolaunchpppd"
user [your_login] 

Здесь указываем свой логин и адрес vpn-сервера.

Запуск и остановка

В /usr/local/sbin создаем файлы visconn и disconn:

root@localhost:~:# cd /usr/local/sbin
root@localhost:/usr/local/sbin:# touch visconn disconn

Содержание файла visconn:

#! /bin/sh
[ -x /usr/sbin/pppd ] && /usr/sbin/pppd call pptp && 
echo
echo Connecting to Internet via VPN...
sleep 10
INET_IP=`ifconfig ppp0 | grep inet | cut -d : -f 2 | cut -d ' ' -f 1` 
route add default gw $INET_IP ppp0 
route add 83.142.161.17 gw $INET_IP ppp0 
rm /etc/resolv.conf 
echo "nameserver 83.142.161.17" >>/etc/resolv.conf 
echo "nameserver 83.142.161.19" >>/etc/resolv.conf 
INET_IP=`ifconfig ppp0 | grep inet | cut -d : -f 2 | cut -d ' ' -f 1` 
echo Successfully connected! 
echo 

Содержание файла disconn:

#!/bin/sh
killall pppd
rm /etc/resolv.conf
echo "nameserver 83.142.161.17" >>/etc/resolv.conf
route add default eth0 

IP серверов имён следует поменять на IP, выданные провайдером.

Устанавливаем права на файлы:

root@localhost:/usr/local/sbin:# chmod +x visconn disconn

Теперь можно подключаться к интернет, запуская visconn, и отключаться, запуская disconn.

Установка маршрутов

Для того, чтобы при установке соединения не происходило зацикливания GRE пакетов, следует дописать необходимые маршруты в скрипт установки соединения или скрипт, исполняемый при старте системы (rc.local).

Выполняем команду:

host -t A [vpn-сервер]

Здесь <vpn_сервер> — адрес vpn-сервера.

В скрипт автозапуска rc.local (для установки маршрутов при загрузке компьютера) записываем все IP, полученные командой host (каждый с новой строки):

route add [адрес_который_вы_получили_командой_host] eth0 

VPN на Slackware 13

В некоторых сетях возникают проблемы с выходом в локальную сеть. Решаются они довольно просто использованием пакета dhcpcd-2.0.8-i486-1 из Slackware 12.2.

VPN на CRUX 2.6

В CRUX для запуска сетевого соединения необходимо отредактировать файл /etc/rc.d/net (это описано в руководстве по установке):

# vim /etc/rc.d/net

...
# ethernet
	/sbin/dhcpcd -t 10 -h $HOSTNAME eth0
	;;
stop)
	/usr/bin/killall -q /sbin/dhcpcd
...

В большинстве случаев опции и их значения -t 10 -h $HOSTNAME можно опустить.

Далее редактируем файл /etc/rc.conf, вписав запуск сценария net и dhcp для сетевой карты:

# vim
...
SERVICES=(net crond)
eth0="dhcp"

Последним штрихом будет вписывание в файл /etc/rc.local выше строк route add [адрес_который_вы_получили_командой_host] eth0 следующей строки:

# vim /etc/rc.local

...
route add -net 0/0 gw [ваш_шлюз]
...

Автозапуск интернета

Для автозапуска сетевого соединения при загрузке компьютера в файл rc.local дописываем последней строкой:

# vim /etc/rc.d/rc.local
...
/usr/local/sbin/visconn

Источники

Для написания были использованы материалы форумов. Работа скриптов проверялась на дистрибутивах Slackware, Arch Linux, CRUX.