воскресенье, 18 января 2009 г.

Запуск Quake на движке Nexuiz

Nexuiz - это игра распространяемая по лицензии GPL. Она основана на движке DarkPlaces, который в свою очередь был создан на основе движка Quake 1. Может показаться, что если игра основана на столь устаревшем движке, то и выглядит она не очень красиво. Но это не так!

Среди различных улучшений можно отметить: динамическое освещение, поддержка текстур с высоким разрешением, поддержка рельефного текстурирования, сжатие звуков ogg vorbis, карты в формате Quake 3, скелетную анимацию. Подробнее см. соответствующие статьи на Википедии DarkPlaces и Nexuiz.

При этом сама логика игры, как и прежде, реализуется программированием на языке QuakeC. Движок имеет встроенный интерпретатор байт-кода QuakeC, что позволяет создавать новые игры с новой игровой логикой не затрагивая код движка. Например, таким способом были сделаны первые игры типа CTF (Capture The Flag - захват флага) и игра с ботами. В Quake 2 разработчики по каким-то причинам отказались от реализации интерпретатора байт-кода, и выполнили реализацию игровой логики в виде загружаемой разделяемой библиотеки. Однако в Quake 3 разработчики вновь вернулись к прежнему подходу и реализовали интерпретатор байт-кода внутри игрового движка. C учётом того что в Quake 3 не было реализовано рельефное текстурирование и скелетная анимация, можно отметить, что движок Nexuiz по техническим характеристикам превосходит движок Quake 3.

Одним из следствий того, что движок Nexuiz содержит интерпретатор байт-кода Quake 1, является возможность запуска на этом движке игры Quake и любого мода Quake!

Для начала установим саму игру Nexuiz:
# aptitude install nexuiz
Теперь можете запустить игру и посмотреть на неё. По содержанию и графике игра показалась мне очень похожей на Unreal Tournament.

Для запуска Quake на движке nexuiz достаточно скопировать игровые ресурсы из оригинального Quake в каталог ~/.nexuiz/data/. Я скопировал туда файлы pak0.pak, pak1.pak, qrp-maptextures-2007-10-06r2.pk3 и каталог textures. Откуда взять эти файлы и каталоги - описано в моей предыдущей заметке Quake в Linux.

Вкратце: первые два файла берутся из каталога id1 с компакт-диска с оригинальной игрой Quake, третий берётся по ссылке http://qrp.quakeonline.net/qrp-maptextures-2007-10-06r2-7files.zip, а файлы в каталоге textures можно взять из архива по ссылке http://facelift.quakedev.com/download/SKINSbmodels-48files-4-23-05.zip. В принципе, для запуска игры вполне достаточно двух первых файлов взятых с компакт-диска. Два архива, ссылки на скачивание которых приведены выше, нужны лишь для улучшения качества картинки - они содержат более качественные текстуры, перерисованные энтузиастами.

Теперь можно запустить игру. К сожалению в Nexuiz не предусмотрено меню для запуска других игр, кроме как самого Nexuiz. Но любую игру можно запустить воспользовавшись консолью игры.

По умолчанию консоль открывается по одновременному нажатию клавиш Shift и Esc, а закрывается по нажатию клавиши Esc. После подключения игровых ресурсов от Quake консоль можно открыть простым нажатием на клавишу тильды - ~ (слева от клавиши 1 на основной клавиатуре).

Теперь запустим Quake. Для этого введём две команды:
deathmatch 0
map start
Первая команда отключает режим deathmatch и переключает игру в режим cooperative. Вторая команда грузит карту для выбора уровня сложности и эпизода игры. Всё, можно наслаждаться игрой.

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

Загрузить сохранённую игру так же просто:
load game
Где game - имя файла, в котором была сохранена игра.

Не остановимся на этом и попробуем загрузить какой-нибудь мод. Например, я взял с компакт-диска pak-файл pak0.pak от мода rogue. Создадим каталог ~/.nexuiz/rogue и скопируем туда pak-файл. Внимание: важно чтобы имя файла состояло только из строчных букв!

Теперь запустим игру rogue из командной строки таким образом:
nexuiz -game rogue
Запустить новую игру, сохранять и загружать игры можно точно таким же образом, как было описано выше.

суббота, 17 января 2009 г.

Quake в Linux

Некоторое время меня интересовал вопрос запуска Quake 1 в Linux. Готовых пакетов для Debian или Ubuntu я не нашёл, а запускать Quake в Wine как-то глупо, потому что исходники Quake открыты и было сделано очень много портов и модификаций этой игры.

В частности есть Quake использующий библиотеку OpenGL (оригинальная игра для отрисовки изображения пользовалась ТОЛЬКО программными расчётами). Неоднократно слышал, что Quake портировали на Linux, на мобильные телефоны и т.п.

Наткнулся на один из таких неофициальных движков на сайте http://ezquake.sourceforge.net/. Это Quake работающий на платформах Linux, FreeBSD, MacOS X, Windows и для отрисовки изображения использующий OpenGL. По ссылкам на сайте можно скачать два варианта для Linux: для архитектуры x86 и x86_64. Первое соответствует принятому в Debian названию архитектуры i386, второе - amd64.

Поскольку я пользуюсь Lenny i386, то я скачал и распаковал первый Linux-архив:
$ wget http://downloads.sourceforge.net/ezquake/ezquake_linux-x86_1.9.2.tar.gz
$ tar xzvf ezquake_linux-x86_1.9.2.tar.gz
$ mv ezquake_linux-x86_1.9.2 ezquake
Теперь сделаем исполняемым файл ezquake-gl.gfx, чтобы впоследствии можно было запустить игру:
$ chmod +x ezquake/ezquake-gl.gfx
Теперь нужно добавить к движку игры игровые ресурсы. Их я взял с имеющегося у меня компакт-диска с игрой для Windows. Это файлы pak0.pak и pak1.pak, которые нужно скопировать в подкаталог ezquake/id1. Файлы ресурсов должны обязательно состоять только из строчных букв, иначе движок их не найдёт.

Далее, на сайте проекта ezquake в разделе downloads упоминаются три проекта, посвящённые более качественной перерисовке текстур и моделей из Quake.

Скачаем оба архива с перерисованными текстурами: http://qrp.quakeonline.net/qrp-maptextures-2007-10-06r2-7files.zip и http://facelift.quakedev.com/download/SKINSbmodels-48files-4-23-05.zip и распакуем их туда, где они должны лежать в соответствии с информацией из readme-файлов в архивах.
$ wget http://qrp.quakeonline.net/qrp-maptextures-2007-10-06r2-7files.zip
$ unzip qrp-maptextures-2007-10-06r2-7files.zip -d ezquake/id1/
$ wget http://facelift.quakedev.com/download/SKINSbmodels-48files-4-23-05.zip
$ mkdir ezquake/id1/textures
$ unzip SKINSbmodels-48files-4-23-05.zip -d ezquake/id1/trextures
В принципе игра готова к запуску, однако я обнаружил одну небольшую проблему - отсутствие звука. Я пробовал менять настройки звука в игре. Не смотря на то, что в движке заявлена поддержка звуковой подсистемы ALSA, игра не воспроизводила звук. Я попробовал поставить пакет-переходник alsa-oss, эмулирующий интерфейс OSS для тех программ, которые не умеют пользоваться интерфейсом ALSA и запустить игру с указанием переключиться на интерфейс OSS, но ничего не помогало. Звука либо не было вообще, либо звук был прерывисто-заикающийся через очень короткие интервалы времени (менее секунды).

Я решил поискать решение этой проблемы в интернете. Я нашёл тему на одном из форумов: http://www.quakeworld.nu/forum/viewtopic.php?id=1956, где посоветовали указать принудительное использование подсистемы OSS и частоты дискретизации звука в 48 килогерц. Я попробовал и мне помогло!

Правильно игру нужно запускать так:
$ ezquake/ezquake-gl.glx +set s_noalsa 1 +set s_device /dev/dsp +set s_khz 48 +set s_bits 16
Можно сделать специальный скрипт, в котором указать команду запуска ezquake со всеми нужными параметрами.

воскресенье, 11 января 2009 г.

famd vs gamin

Периодически при работе в KDE с NTFS-разделами, смонтированными с помощью модуля fuse ntfs-3g спотыкался о неприятное свойство famd. Иногда famd начинает отъедать почти 100% процессорного времени, останавливая прорисовку содержимого окон в KDE-программах.

famd - это демон, отслеживающий изменения в файловой системе и оповещающий об этом подписавшиеся приложения. Например можно открыть в Konqueror каталог, параллельно с помощью shell создать или удалить файл в этом каталоге. famd оповестит об изменениях Konqueror, а тот в свою очередь перерисует окно со списком файлов.

Сегодня в списке рассылки порекомендовали заменить famd на gamin. Оба предоставляют библиотеку с одинаковым интерфейсом, но famd является демоном периодически опрашивающим каталоги, а gamin является библиотекой взаимодействующей с подсистемой ядра Linux, называющейся inotify. Эта подсистема позволяет обходиться без отдельного демона и доставляет необходимую информацию всем подписавшимся программам напрямую, без лишних посредников, из первых рук.

Установил gamin, система вроде бы стала ощутимо быстрее отображать содержимое каталогов. И главное - нет демона, который мог бы зациклиться и начать отжирать до 100% процессорного времени.

По каким-то причинам при установке KDE по-умолчанию ставится famd, а не gamin. Я погуглил на эту тему и встретил высказывание, что в большинстве дистрибутивов famd уже давно заменили gamin'ом. Консервативность Debian в этом случае просто озадачивает... Раз уж оба варианта поддерживаются, почему бы не выбрать в качестве используемой по умолчанию более технически продвинутую и надёжную систему?

суббота, 10 января 2009 г.

Программы, которыми я пользуюсь в Linux

На всякий случай зафиксирую свои изыскания в области используемых мною программ. Может кому и пригодится.

Вообще сейчас я пользуюсь средой KDE3, но чаще всего не упираюсь в графический интерфейс, а пользуюсь bash'ем - привычка сисадмина. Можно было бы выкинуть тяжёлый KDE и заменить его на что-нибудь вроде Fluxbox или IceWM, но меня KDE не напрягает, а устраивать чистку на почве идеологии я не собираюсь.

Сеть:

1. Клиент Direct Connect

LinuxDC++ - клиент с графическим интерфейсом. Увы, не поддерживает многопоточнные закачки. Есть клиент Valknut, который их поддерживает, но у меня он наотрез отказывался создавать полный список файлов - останавливался примерно на 99%. Поскольку списка файлов не было, у меня не получалось войти на хаб - я как будто-бы не расшарил ни одного файла.

2. Torrent-клиент

rtorrent - консольный torrent-клиент. Не умеет создавать torrent-файлы, в остальном вполне функционален. Когда нужно что-то скачать - держу его на сервере в сессии screen.

3. FTP-клиент

В зависимости от того что мне нужно сделать и что ближе всего находится пользуюсь одним из следующих:

Iceweasel или Konqueror - когда нужно просто скачать несколько файлов.

Krusauder - когда нужно хорошо поработать над разгребанием FTP-помойки.

lftp или ncftp - когда я работаю в консоли или мне нужно работать с FTP-сервером из скрипта.

4. Web-браузер

Iceweasel (Firefox) - предпочтительный браузер для долгого сёрфинга, имеет кучу плагинов, некоторыми из которых я пользуюсь.

Konqueror - для недолгого сеанса.

5. Почтовый клиент

IceDove (Thunderbird)

Вообще-то я пользуюсь GMail, поэтому какой-либо почтовый клиент мне не нужен. Но если бы я работал с почтовым сервером, не имеющим веб-интерфейса или имеющим неудобный веб-интерфейс, то я бы воспользовался именно им.

6. RDP-клиент

KRDP - для подключения на работу через ssh-тоннель или через проброшенный во внутрь сети порт.

7. Эмулятор терминала

Konsole - стандартный эмулятор терминала среды KDE. Особых требований к эмуляторам терминала не предъявляю, главное чтобы вкладки были и можно было выбирать кодировку.

screen - незаменимая вещь для работы по ssh.

8. IM-клиент

Psi - Jabber-клиент, позволяет подключаться к конференциям. Через транспорты настроены IM-сети ICQ и Mail.ru.

Kopette - не пользуюсь, просто запасной вариант. Возможно существуют более удобные многопротокольные IM-клиенты, не знаю.

Офисные программы:

1. Офисный пакет

Openoffice.org-KDE - в комментариях не нуждается.

2. Калькулятор

KCalc - в среде KDE.

bc - в консоли.

3. Просмотр PDF

KPDF или KGhostView.

4. Просмотр DjVu

DjView4

5. Англо-русский словарь

KSocrat - англо-русский и русско-английский словарь.

6. Файловый менеджер

Konqueror - для просмотра содержимого CD и DVD-дисков.

Krusauder - для разгребания файловых помоек.

bash - универсальный и привычный инструмент.

7. Архиватор

File-Roller - графический интерфейс к различным архиваторам и компрессорам.

Эти инструменты я применяю в консоли:
tar
bzip2/bunzip2
gzip/gunzip
unzip
unrar

Картинки:

1. Просмотр картинок

GwenView - некий аналог ACDSee.

2. Редактор картинок

KolourPaint - некий аналог Paint.

3. Скриншоты

KSnapShot

CD/DVD-диски:

1. CD-риппер

KAudioCreator - риппер сграфическим интерфейсом.

ripit - консольный риппер.

2. Запись CD/DVD

K3b

Музыка:

1. Аудио-плеер

Amarok - графический интерфейс.

mpd mpdscribble ncmpc - связка из музыкального проигрывателя-демона, демона-скробблера last.fm и ncurses-клиента к музыкальному демону.

2. Простановка тегов в музыкальных треках

ExFalso

3. Регулятор громкости

KMix - не пользуюсь.

Видео:

1. Видеоплеер

KMPlayer и Kaffeine. Не могу определиться какой из них лучше. Последнее время нравится Kaffeine.

Разработка:

1. HTML-редактор

Quanta Plus - практически не пользуюсь.

vim

2. Текстовый редактор

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

vim - для более крупных и сложных редактирований (фактически поьзуюсь vim-lite, вызываемым командой vi).

Kate и KWirte - в среде KDE.

Игры:

1. Игры

OpenArena - аналог Quake 3, разработанный на его движке. Полностью переработанные уровни, текстуры, модели.

KWalk - простейшая "головомойка" типа DOS-овской "Ветки" или Windows'овской "АйТи". Поворачивая куски трубопровода нужно объединить компьютеры в сеть.

Ещё я пользуюсь рядом самописных и подсмотренных где-то скриптов. В частности это скрипты для конвертирования кодировок текстовых файлов (на основе iconv), конвертирования кодировок в тегах mp3-файлов (на основе mid3iconv из пакета python-mutagen), конвертирования из doc, rtf и html в текст (antidoc, unrtf и unhtml соответственно).

воскресенье, 4 января 2009 г.

Два VPN-подключения к Уфанет

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

Для настройки двух 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

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-серверам (изменённый сценарий можно взять здесь: http://stupin.su/files/dhclient-ufanet).

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

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. Официальная страница Уфанет со списком локальных подсетей
  4. DNAT и Policy Based Routing (portmapping и два канала)
Обновлено 23 февраля 2009 года.

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