VPN-подключение к Уфанет и локальные ресурсы через Ethernet

Примерно в середине февраля стало известно, что Уфанет плавно модернизирует свою сеть и теперь у некоторых абонентов локальные ресурсы стали доступны без VPN-подключения. По неофициальной информации от сотрудников Уфанет локальные ресурсы доступны без VPN-подключения тем абонентам, которые по DHCP получают адреса из диапазона 10.160.0.0-10.191.255.255 (10.160.0.0/11). Проверьте адрес, который вам выдаёт DHCP-сервер, возможно вы один из счастливчиков :)

У меня стали спрашивать, как бы переделать два VPN-подключения на новую схему, чтобы можно было обойтись одним подключением, а локальный трафик направить через Ethernet. Я решил написать второй вариант настройки, однако проверить я его не могу, поэтому работоспособность не гарантирую (впрочем, как и раньше). Если что не получается - вам придётся приложить усилия к наладке самостоятельно, я по мере возможности постараюсь помочь.

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

# aptitude install pptp-linux resolvconf iproute bind9-host

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

Добавляем в файл конфигурации DHCP-клиента /etc/dhcp3/dhclient.conf новую секцию, связанную с интерфейсом eth0:

interface "eth0" {
  script "/root/bin/dhclient-ufanet";
}

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

Копируем сценарий, выполняющийся по умолчанию, в каталог /root/bin/ под именем dhclient-ufanet:

# mkdir /root/bin/
# cp /sbin/dhclient-script /root/bin/dhclient-ufanet

Заменяем в скопированном сценарии строчки следующего вида в двух местах:

for router in $new_routers; do
  route add default dev $interface gw $router $metric_arg
done

на блок:

for router in $new_routers; do
  ip route add 81.30.176.0/20 via $router dev $interface src $new_ip_address table main
  ip route add 81.30.192.0/19 via $router dev $interface src $new_ip_address table main
  ip route add 89.189.128.0/19 via $router dev $interface src $new_ip_address table main
  ip route add 77.79.128.0/18 via $router dev $interface src $new_ip_address table main
  ip route add 92.50.128.0/18 via $router dev $interface src $new_ip_address table main
  ip route add 94.41.0.0/18 via $router dev $interface src $new_ip_address table main
  ip route add 94.41.128.0/21 via $router dev $interface src $new_ip_address table main
  ip route add 94.41.136.0/22 via $router dev $interface src $new_ip_address table main
  ip route add 94.41.140.0/23 via $router dev $interface src $new_ip_address table main
  ip route add 79.140.24.0/22 via $router dev $interface src $new_ip_address table main
  ip route add 79.140.16.0/21 via $router dev $interface src $new_ip_address table main
  ip route add 172.16.0.0/12 via $router dev $interface src $new_ip_address table main
  ip route add 10.0.0.0/8 via $router dev $interface src $new_ip_address table main

  ip route add default via $router dev $interface src $new_ip_address table lunlim
  ip rule add from $new_ip_address table lunlim
done

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
freedom_login      vpn.ufanet.ru   password   *

Ваш логин необходимо прописать также в файле /etc/ppp/peers/iunlim далее по тексту (он выделен жирным шрифтом).

Файл /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/ip-up.d/route происходит добавление маршрутов маршрутов к нелокальным узлам на внешнем соединении.

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

#!/bin/sh

case "$PPP_IPPARAM" in
  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
  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

Для ручного включения и отключения соединения можно пользоваться командами:

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

Ссылка на исходную статью: Два VPN-подключения к Уфанет

Обновлено 6 апреля 2009 года.

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