В прошлом месяце (и году) пытался настроить два VPN-подключения к Уфанет. Одно подключение - по безлимитному тарифу, а другое подключение с бесплатной локалкой. От первого я бы получил минимум ограничений по направлению трафика, а от второго - высокую скорость при работе в локальной сети Уфанет. Настроил, поработал с недельку, а потом перешёл к обычной схеме с безлимитным интернетом, потому что два соединения работали довольно неустойчиво - виной тому были недостаточно хорошо проработанные скрипты. Решил отложить чистую настройку до тех пор пока не появится настроение. И вот позавчера вечером я наконец набросал желаемую схему, вчера её успешно испытал и сегодня хочу поделиться наработками, которые мне не стыдно показать (хотя доработать ещё кое-что можно).
Для настройки двух VPN-соединений нам понадобятся пакеты pptp-linux, resolvconf, iproute, ifupdown, bind9-host. Их можно установить командой:
# aptitude install pptp-linux resolvconf iproute bind9-host
ifupdown входит в минимальную поставку системы, поэтому в установке не нуждается.
Настроим локальный петлевой интерфейс, 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
Добавляем в файл конфигурации DHCP-клиента /etc/dhcp3/dhclient.conf новую секцию, связанную с интерфейсом eth0:
interface "eth0" { script "/root/bin/dhclient-ufanet"; }
Копируем сценарий, выполняющийся по умолчанию, в каталог /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 for dns in $new_domain_name_servers; do route add -host $dns dev $interface gw $router $metric_arg vpn=`host -t A vpn.ufanet.ru $dns | cut -d" " -f4` route add -host $vpn dev $interface gw $router $metric_arg done done
Таким образом при получении настроек по DHCP мы не будем добавлять в систему маршрут по умолчанию, а добавим маршруты, необходимые для установки VPN-подключений: маршруты к VPN-серверу и маршруты к DNS-серверам (изменённый сценарий можно взять здесь: dhclient-ufanet).
Вам может понадобиться заменить в настройках интерфейс eth0 (выше он выделен жирным шрифтом) на тот, к которому подключен Ethernet-кабель Уфанет.
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* *
Добавим две таблицы с именами lunlim и iunlim, которые будут содержать маршруты ответственные за работу ответного трафика соединений устанавливаемых снаружи.
/etc/iproute2/rt_tables:
# # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 201 iunlim 202 lunlim
Зададим опции для 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 *
Где:
Ваши логины необходимо прописать также в файлах /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
Для ручного включения и отключения соединений можно пользоваться командами:
В файле /etc/network/interfaces настроена автоматическая установка обоих VPN-соединений. Можете изменить настройки в этом файле по своему желанию - оставить оба соединения, только одно из них или отключить оба. При этом вы всегда сможете установить или разорвать любое из соединений вручную, командами описанными выше.
Для настройки этого хозяйства воспользовался своими изысканиями в соответствующих областях (1, 2, 4) и официальной информацией (3):
Обновлено 23 февраля 2009 года.
Обновлено 6 апреля 2009 года.