Настраиваем VPN-соединение с Уфанетом в Debian

Дома у меня есть интернет от уфимского провайдера "Уфанет", пользуюсь системой Debian GNU/Linux. Для того, чтобы получить доступ в интернет, нужно установить VPN-соединение, а точнее - PPTP.

Первый этап предполагает настройку Ethernet-соединения, а точнее настройку интерфейса на получение настроек по DHCP.

Делается это элементарно. В файле /etc/network/interfaces нужно добавить пару строчек:

auto eth0
iface eth0 inet dhcp

eth0 - это имя сетевого интерфейса, подключенного к сети Уфанет. Узнать список доступных интерфейсов можно с помощью команды:

$ ifconfig -a

Далее установим pptp-клиент и пакет resolvconf:

# aptitude install pptp-linux resolvconf

Пакет resolvconf добавляет к клиентам dhcp и pptp специальные сценарии, которые перехватывают информацию о DNS-серверах, полученную от dhcp- и pptp-серверов соответственно. Основываясь на перехваченной информации сценарии выполняют корректное обновление списка DNS-серверов в файле /etc/resolv.conf

Процесс настройки состоял из серии проб и ошибок, но в конце концов получилось удачно скомпилировать информацию из разных источников. В результате появился работоспособный набор конфигурационных файлов и скриптов.

Краткие пояснения по файлам конфигурации:

Теперь сами файлы:

/etc/ppp/peers/ufanet:

pty "pptp vpn.ufanet.ru --nolaunchpppd"
name login
remotename vpn.ufanet.ru
file /etc/ppp/options.pptp
ipparam ufanet   # Этот параметр передаётся в скрипты настройки
                 # маршрутизации, о которых ниже

/etc/ppp/chap-secrets:

# Secrets for authentication using CHAP
# client    server           secret      IP addresses
login       vpn.ufanet.ru    password    *

/etc/ppp/options:

asyncmap 0
auth
crtscts
lock
hide-password
modem
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
noipx

/etc/ppp/options.pptp:

lock
noauth
nobsdcomp
nodeflate
persist    # Восстанавливать соединение при обрыве

Теперь собственно скрипты для прописывания маршрутов при поднятии линка и для удаления маршрутов при падении линка. Скрипты были почерпнуты в одной из Интернет-конференций и доработаны под наш случай (в исходном виде скрипты, увы не работали).

/etc/ppp/ip-up.d/route:

#!/bin/sh

case "$PPP_IPPARAM" in
  ufanet)
    SERVER=vpn.ufanet.ru
    GW=`route -n | grep ^0\.0\.0\.0 | awk '{print $2}'`
    route del $PPP_REMOTE dev $PPP_IFACE
    route add -host $SERVER gw $GW
    route add default dev $PPP_IFACE
    ;;
  *)
    echo "No PPP_IPPARAM defined"
    ;;
esac

/etc/ppp/ip-down.d/route:

#!/bin/sh

case "$PPP_IPPARAM" in
  ufanet)
    SERVER=vpn.ufanet.ru
    route del -host $SERVER
    route del default dev $PPP_IFACE
    ;;
  *)
    echo "No PPP_IPPARAM defined"
    ;;
esac

Для того, чтобы сценарии заработали, нужно добавить им бит исполняемости:

# chmod +x /etc/ppp/ip-up.d/route /etc/ppp/ip-down.d/route

Подключение осуществляется с помощью команды:

# pon ufanet

Отключение осуществляется с помощью команды:

# poff ufanet

Команды pon и poff нужно выполнять от пользователя root.

Чтобы соединение устанавливалось при старте системы, можно прописать в файл /etc/network/interfaces следующие строки:

auto ufanet
iface ufanet inet ppp
  provider ufanet

Написать автору