UfaNet.ru - Друзья всегда с тобой

UFANET ГЛАВНАЯ ИНТЕРНЕТ КАБЕЛЬНОЕ ТВ ЦИФРОВОЕ ТВ ТЕЛЕФОНИЯ IP-ТЕЛЕФОНИЯ КОНТАКТЫ

круглосуточная поддержка

Универсальный подход,
низкие цены,
выгодные тарифы










Рекомендую посетить:
Два VPN-подключения к Уфанет (Debian)

(c) http://vladimir-stupin.blogspot.com/2009/01/vpn.html

В прошлом месяце (и году) пытался настроить два VPN-подключения к Уфанет. Одно подключение - по безлимитному тарифу, а другое подключение с бесплатной локалкой. От первого я бы получил минимум ограничений по направлению трафика, а от второго - высокую скорость при работе в локальной сети Уфанет. Настроил, поработал с недельку, а потом перешёл к обычной схеме с безлимитным интернетом, потому что два соединения работали довольно неустойчиво - виной тому были недостаточно хорошо проработанные скрипты. Решил отложить чистую настройку до тех пор пока не появится настроение. И вот позавчера вечером я наконец набросал желаемую схему, вчера её успешно испытал и сегодня хочу поделиться наработками, которые мне не стыдно показать (хотя доработать ещё кое-что можно).

Для настройки двух VPN-соединений нам понадобятся пакеты pptp-linux, resolvconf, iproute, ifupdown, traceroute. Их можно установить командой:

aptitude install pptp-linux resolvconf iproute traceroute

ifupdown входит в минимальную поставку системы, поэтому в установке не нуждается.

1. Настроим сетевые интерфейсы.

Настроим локальный петлевой интерфейс, Ethernet-интерфейс Уфанет, и автоматическое подключение двух VPN-соединений.

/etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto iunlim
iface iunlim inet ppp
        provider iunlim

auto lunlim
iface lunlim inet ppp
        provider lunlim

Создадим скрипт, который создаст маршруты до VPN и DNS-серверов, необходимые для установки VPN-соединений и удалит маршрут по умолчанию через Ethernet-сеть.

/etc/network/if-up.d/ufanet:




#!/bin/sh

case $IFACE in
        eth0)
                VPN_DEV=$IFACE
                VPN_NAME=vpn.ufanet.ru
                DNS_IP=`/bin/grep nameserver /etc/resolvconf/run/interface/$VPN_DEV | cut -d" " -f2`
                DNS_GW=`/usr/sbin/traceroute -n $DNS_IP 2>&1 | /usr/bin/head -n2 | /usr/bin/tail -n1 | 
/bin/grep -oE "([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}"` /sbin/ip route add $DNS_IP via $DNS_GW dev $VPN_DEV VPN_IP=`/usr/bin/host $VPN_NAME | cut -d" " -f4` VPN_GW=`/usr/sbin/traceroute -n $VPN_IP 2>&1 | /usr/bin/head -n2 | /usr/bin/tail -n1 |
/bin/grep -oE "([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}"` /sbin/ip route add $VPN_IP via $VPN_GW dev $VPN_DEV /sbin/ip route del default via $VPN_GW dev $VPN_DEV ;; *) ;; esac

Вам может понадобиться заменить в скрипте интерфейс eth0 (он выделен жирным шрифтом) на тот, к которому подключен Ethernet-кабель Уфанет.
Не забудьте сделать скрипт исполняемым, например командой:

chmod +x /etc/network/if-up.d/ufanet

2. Настроим приоритеты DNS-серверов.

DNS-серверы на интерфейсах ppp должны быть приоритетнее DNS-серверов на интерфейсах Ethernet, поэтому в файле /etc/resolvconf/interface-order строчку ppp* поместим перед eth*.

/etc/resolvconf/interface-order:

# interface-order(5)
lo.inet*
lo.dnsmasq
lo.pdnsd
lo.!(pdns|pdns-recursor)
lo
tun*
tap*
ppp*
eth*
ath*
wlan*
*

3. Создадим таблицы маршрутизации.

Добавим две таблицы с именами lunlim и iunlim, которые будут содержать маршруты ответственные за работу ответного трафика соединений устанавливаемых снаружи.

/etc/iproute2/rt_tables:


#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep

201     iunlim
202     lunlim

4. Настроим VPN-соединения.

Зададим опции для PPP-соединений.

/etc/ppp/options:


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

Зададим опции для PPTP-соединений.

/etc/ppp/options.pptp:


lock
noauth
nobsdcomp
nodeflate
persist
maxfail 0

В файле /etc/ppp/chap-secrets пропишем логины и пароли на подключение к VPN-серверу Уфанет.

/etc/ppp/chap-secrets:


# Secrets for authentication using CHAP
# client           server          secret     IP addresses
main_login@local   vpn.ufanet.ru   password   *
freedom_login      vpn.ufanet.ru   password   *

main_login - это логин на подключение по основному тарифу.
freedom_login - это логин на подключение по тарифу "Свобода".
password - это соответствующие пароли на подключение.

Ваши логины необходимо прописать также в файлах /etc/ppp/peers/iunlim и /etc/ppp/peers/lunlim далее по тексту (они выделены жирным шрифтом).
Файл /etc/ppp/peers/iunlim задаёт настройки подключения по безлимитному тарифу "Свобода" и привязывает его к интерфейсу ppp0.

/etc/ppp/peers/iunlim:


pty "pptp vpn.ufanet.ru --nolaunchpppd"
name freedom_login
remotename vpn.ufanet.ru
file /etc/ppp/options.pptp
ipparam iunlim
unit 0

Файл /etc/ppp/peers/lunlim задаёт настройки подключения по основному тарифу и привязывает его к интерфейсу ppp1.

/etc/ppp/peers/lunlim:


pty "pptp vpn.ufanet.ru --nolaunchpppd"
name main_login@local
remotename vpn.ufanet.ru
file /etc/ppp/options.pptp
ipparam lunlim
unit 1

В скрипте /etc/ppp/ip-up.d/route происходит добавление маршрутов к локальным подсетям Уфанет на локальном соединении и добавление маршрутов к нелокальным узлам на внешнем соединении.

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


#!/bin/sh

case "$PPP_IPPARAM" in
        lunlim)
        ip route add 81.30.176.0/20 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 81.30.192.0/19 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 89.189.128.0/19 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 77.79.128.0/18 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 92.50.128.0/18 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 94.41.0.0/18 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 94.41.128.0/21 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 94.41.136.0/22 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 94.41.140.0/23 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 79.140.24.0/22 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 79.140.16.0/21 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 172.16.0.0/12 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 10.0.0.0/8 dev $PPP_IFACE src $PPP_LOCAL table main

        ip route add default dev $PPP_IFACE src $PPP_LOCAL table lunlim
        ip rule add from $PPP_LOCAL table lunlim
        ;;

        iunlim)
        ip route add 81.30.199.50 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 81.30.199.69 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 81.30.199.238 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add 81.30.197.10 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route add default dev $PPP_IFACE src $PPP_LOCAL table main

        ip route add default dev $PPP_IFACE src $PPP_LOCAL table iunlim
        ip rule add from $PPP_LOCAL table iunlim
        ;;

        *)
        echo "No PPP_IPPARAM defined"
        ;;
esac

Не забудьте сделать скрипт исполняемым, например командой:

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

В скрипте /etc/ppp/ip-down.d/route происходит удаление маршрутов к локальным подсетям Уфанет на локальном соединении и удаление маршрутов к нелокальным узлам на внешнем соединении.

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


#!/bin/sh

case "$PPP_IPPARAM" in
        lunlim)
        ip route del 81.30.176.0/20 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 81.30.192.0/19 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 89.189.128.0/19 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 77.79.128.0/18 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 92.50.128.0/18 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 94.41.0.0/18 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 94.41.128.0/21 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 94.41.136.0/22 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 94.41.140.0/23 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 79.140.24.0/22 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 79.140.16.0/21 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 172.16.0.0/12 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 10.0.0.0/8 dev $PPP_IFACE src $PPP_LOCAL table main

        ip route del default dev $PPP_IFACE src $PPP_LOCAL table lunlim
        ip rule del from $PPP_LOCAL table lunlim
        ;;

        iunlim)
        ip route del 81.30.199.50 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 81.30.199.69 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 81.30.199.238 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del 81.30.197.10 dev $PPP_IFACE src $PPP_LOCAL table main
        ip route del default dev $PPP_IFACE src $PPP_LOCAL table main

        ip route del default dev $PPP_IFACE src $PPP_LOCAL table iunlim
        ip rule del from $PPP_LOCAL table iunlim
        ;;

        *)
        echo "No PPP_IPPARAM defined"
        ;;
esac

Не забудьте сделать скрипт исполняемым, например командой:

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

Для ручного включения и отключения соединений можно пользоваться командами:
pon iunlim - включить безлимитный интернет,
poff iunlim - отключить безлимитный интернет,
pon lunlim - включить безлимитную локалку,
poff lunlim - отключить безлимитную локалку.

В файле /etc/network/interfaces настроена автоматическая установка обоих VPN-соединений. Можете изменить настройки в этом файле по своему желанию - оставить оба соединения, только одно из них или отключить оба. При этом вы всегда сможете установить или разорвать любое из соединений вручную, командами описанными выше.

Для настройки этого хозяйства воспользовался своими изысканиями в соответствующих областях (1, 2, 4) и официальной информацией (3):
1. Настраиваем VPN-соединение с Уфанетом в Debian
2. Кое-что об Ufanet - трафик внешний
3. DNAT и Policy Based Routing (portmapping и два канала) - трафик внешний


В материалах использована информация сисадминов "Уфанет"
Вопросы и отзывы приветствуются: mastera собака ufanet точка ru