Grad-Soft Провайдер технологий.

English
Новости
Статьи
Ноу-хау
Услуги
Продукты
Контакты
Для клиентов
 поиск

Установка VPN-сервера на Gentoo Linux

Установку VPN-сервера можно разделить на четыре части:

  1. Установка Oracle.
  2. Установка radius-сервера.
  3. Установка pptpd и pppd.
  4. Установка биллинга.

Необходимое ПО:

  1. Установленный Gentoo Linux c X-сервером.
    X-сервер необходим только для инсталляции Oracle и биллинга.
    Можно также использовать внешний X-сервер.
    Дистрибутив можно скачать на http://www.gentoo.org.
  2. Инсталляционные файлы Oracle 9.2.0.4.0.
    ship_9204_linux_disk1.cpio.gz, размер 538 906 295;
    ship_9204_linux_disk2.cpio.gz, размер 632 756 922;
    ship_9204_linux_disk3.cpio.gz, размер 296 127 243.
    Дистрибутив можно скачать на http://www.oracle.com.
  3. Обновления для Oracle.
    а. Обновление дистрибутива p3006854_9204_LINUX.zip, размер 1 523;
    б. Обновление Oracle до 9.2.0.5.0 p3501955_9205_LINUX.zip, размер 328 923 077;
    в. Инструмент для работы с патчами p2617419_220_GENERIC.zip, размер 225 374;
    г. Патч для agentctl p3238244_9204_LINUX.zip, размер 286 639.
    Патчи можно скачать с http://support.oracle.com. Тем же, кто не имеет пароля, можно поискать их на http://www.google.com и http://www.filesearch.ru.
    Патч Б является не обязательным. Патчи В и Г входят в патч Б. Вам необходимо достать или то, или другое.
    Всю установку будем производить в /opt и условимся, что наш сервер имеет ip-адрес 10.0.0.1, локальная сеть 10.0.0.0/24, VPN-сеть 192.168.0.0/24.

Установка Oracle

Для удобства перед установкой сложим все установочные файлы по местам:

Инсталляционные файлы Oracle в /opt/install/oracle, обновления для Oracle в /opt/install/oracle_update.

Распакуем инсталляционные файлы:

# cd /opt/install/oracle
# gunzip *.gz
# cpio -idmv <ship_9204_linux_disk1.cpio
# cpio -idmv <ship_9204_linux_disk2.cpio
# cpio -idmv <ship_9204_linux_disk3.cpio

Перед распаковкой обновлений убедимся, что у нас установлен unzip:

# emerge -u app-arch/unzip

Распакуем обновления:

# cd /opt/install/oracle_update
# unzip p3501955_9205_LINUX.zip
# unzip p3006854_9204_LINUX.zip
# unzip p2617419_220_GENERIC.zip
# unzip p3238244_9204_LINUX.zip
# cpio -idmv <9205_lnx32_release.cpio

Для установки нам потребуются библиотеки совместимости:

# emerge sys-libs/lib-compat

И менеджер пакетов Redhat:

# emerge app-arch/rpm

Так как инсталляция Oracle проводится не от root, необходимо создать группу и пользователя:

# groupadd -g 407 dba
# useradd -u 407 -g dba -d /opt/oracle -s /bin/bash -m oracle

Конфигурируем параметры ядра, для этого в файл /etc/sysctl.conf необходимо добавить:

kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

Устанавливаем Shell Limits:

В файл /etc/security/limits добавляем:

oracle               soft    nproc   2047
oracle               hard    nproc   16384
oracle               soft    nofile  4096
oracle               hard    nofile  63536

В файл /opt/oracle/.bash_profile добавляем:

ulimit -u 16384 -n 63536

Настраиваем переменные окружения Oracle:

Создаем файл /etc/env.d/87oracle, в нем указываем:

ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/OraHome
ORACLE_SID=GRAD
ORACLE_TERM=xterm
ORACLE_OWNER=oracle
LD_LIBRARY_PATH=${ORACLE_HOME}/lib
LD_PATH=${ORACLE_HOME}/lib
PATH="${ORACLE_HOME}/bin"

Применяем переменные окружения:

# env-update
# source /etc/profile

Так как в дистрибутиве Oracle содержится ошибка, применяем патч А:

# sh /opt/install/oracle_update/3006854/rhel3_pre_install.sh

Теперь можно начать установку. Как написано выше, она производится от пользователя oracle. Меняем пользователя:

# su - oracle

Если вы используете внешний X-сервер, установите переменную окружения DISPLAY:

$ export DISPLAY=x-server-ip:0.0

Запускаем инсталлятор:

$ cd /opt/install/oracle/Disk1
$ ./runInstaller

После его запуска, вы должны увидеть окно инсталлятора:

На следующем экране оставьте все по-умолчанию:

Укажите группу пользователя oracle - dba:

Перейдите в консоль и запустите скрипт /tmp/orainstRoot.sh от пользователя root. Затем вернитесь в графический режим и нажмите <CONTINUE>.

Здесь все также нужно оставить по-умолчанию:

Указываем необходимый продукт - Oracle 9i Database 9.2.0.4.0:

Указываем тип инсталляции - Enterprise Edition:

Базу данных пока что не устанавливаем, выбираем Software Only:

Все готово к установке - нажимаем <Install>

Перед окончанием установки необходимо запустить от рута скрипт /opt/oracle/OraHome/root.sh:

Установка завершена. Нажимаем <Exit>:

Запустится Enterprise Manager - закрываем его, пока что он не нужен.

Теперь необходимо исправить ошибку с agentctl. Этот шаг могут пропустить те, у кто скачал обновление до Oracle 9.2.0.5.0 (патч Б).

$ export PATH=$PATH:/opt/install/oracle_update/OPatch
$ cd /opt/install/oracle_update/3238244
$ opatch apply

Патч спросит о нашем согласии применить обновление. Соглашаемся не раздумывая.

После этого необходимо перелинковать dbsnmp:

$ cd $ORACLE_HOME/network/lib
$ make -f ins_oemagent.mk install

После этих мероприятий agentctl начнет работать.

Следующий шаг - исправляем ошибку с dbca:

Запускаем от пользователя root:

# echo "dummy" > /etc/rac_on

Для тех, кто скачал обновление до Oracle 9.2.0.5.0 (патч Б) - обновим наш Oracle до версии 9.2.0.5.0.

Запускаем инсталлятор:

$ cd /opt/install/oracle_update/Disk1
$ ./runInstaller -ignoreSysPrereqs

На второй вкладке в разделе Destination в поле name нужно выбрать OUIHome:

Сначала устанавливаем Oracle Universal Installer:

Дожидаемся окончания установки, затем снова запускаем инсталлятор и ставим Oracle 9iR2 Patchsets 9.2.0.5.0.

Снова выполняем скрипт /opt/oracle/OraHome/root.sh от пользователя root.

На запрос перезаписать файлы в /usr/local/bin отвечаем положительно.

Добавим Oracle в автозагрузку. Для этого создаем в /etc/init.d файл oracle:

#!/sbin/runscript

source /etc/profile
source ~oracle/.bash_profile
export PATH="${ORACLE_HOME}/bin:${PATH}"

start() {
        ebegin "Starting Oracle"
        su oracle -c $ORACLE_HOME/bin/sqlplus /nolog <<EOF
connect /as sysdba
startup
EOF
        su oracle -c "$ORACLE_HOME/bin/lsnrctl start"
        eend $?
}

stop() {
        ebegin "Stopping Oracle"
        su oracle -c $ORACLE_HOME/bin/sqlplus /nolog <<EOF
connect /as sysdba
shutdown immediate
EOF
        su oracle -c "$ORACLE_HOME/bin/lsnrctl stop"
        eend $?
}

И добавляем полученный скрипт в автозагрузку:

# rc-update add oracle default

Существует несколько способов создать базу в Oracle. Вот один из них:

Создаем файл /opt/oracle/OraHome/dbs/initGRAD.ora:

instance_name='GRAD'
db_block_size=8192
db_cache_size=290455552
db_name=GRAD
db_domain='local.net'
db_files = 1000
db_file_multiblock_read_count = 32
shared_pool_size=96468992
large_pool_size=56623104
log_checkpoint_interval = 10000
processes = 200
parallel_max_servers = 16
log_buffer = 163840
max_dump_file_size = 10240
global_names = TRUE
control_files='/opt/oracle/OraHome/dbs/control01.ctl','/opt/oracle/OraHome/dbs/control02.ctl','/opt/oracle/OraHome/dbs/control03.ctl'
compatible='9.2.0.0.0'
dispatchers='(protocol=TCP)'
fast_start_mttr_target=300
hash_join_enabled=TRUE
java_pool_size=20971520
job_queue_processes=20
open_cursors=300
pga_aggregate_target=128974848
query_rewrite_enabled='FALSE'
sort_area_size=524288
star_transformation_enabled='FALSE'
timed_statistics=TRUE

Запускаем sqlplus:

$ sqlplus /nolog

Выполняем в нем следующие команды (не забудьте поменять пароли на свои!):

connect /as sysdba

startup

create database GRAD character set RU8PC866;

alter tablespace SYSTEM
    add datafile '/opt/oracle/OraHome/dbs/dbs2GRAD.dbf'
    size 10M autoextend on;

@$ORACLE_HOME/rdbms/admin/catalog.sql
@$ORACLE_HOME/rdbms/admin/catproc.sql

CREATE TABLESPACE GRAD_DATA
DATAFILE ' /opt/oracle/OraHome/dbs/GRAD.dbf' SIZE 128M AUTOEXTEND ON NEXT 20M MAXSIZE UNLIMITED
DEFAULT STORAGE (INITIAL 1K NEXT 1K MINEXTENTS 1 MAXEXTENTS UNLIMITED);

CREATE TABLESPACE ROLLBACK_DATA
DATAFILE '/opt/oracle/OraHome/dbs/rollback.dbf' SIZE 50M AUTOEXTEND ON NEXT 20M MAXSIZE UNLIMITED
DEFAULT STORAGE (INITIAL 20M NEXT 20M MINEXTENTS 10 MAXEXTENTS UNLIMITED);

create public rollback segment temp;
alter rollback segment temp online;

CREATE PUBLIC ROLLBACK SEGMENT ROLLBACK TABLESPACE ROLLBACK_DATA
STORAGE ( INITIAL 20M  NEXT 20M  MINEXTENTS 10  OPTIMAL 200M  MAXEXTENTS UNLIMITED  );

alter rollback segment temp offline;
drop public rollback segment temp;

ALTER ROLLBACK SEGMENT ROLLBACK ONLINE;

ALTER USER sys IDENTIFIED BY mypassword;
alter user sys account unlock;
ALTER USER system IDENTIFIED BY mypassword;
alter user system account unlock;

Заодно создадим пользователя для биллинга:

CREATE USER "GRAD"  PROFILE "DEFAULT"
    IDENTIFIED BY "mybillingpassword" DEFAULT TABLESPACE "GRAD_DATA"
    ACCOUNT UNLOCK;
GRANT CONNECT TO "GRAD";
GRANT ALTER ANY SEQUENCE TO "GRAD";
GRANT CREATE ANY DIRECTORY TO "GRAD";
GRANT CREATE ANY SEQUENCE TO "GRAD";
GRANT DROP ANY DIRECTORY TO "GRAD";
GRANT DROP ANY SEQUENCE TO "GRAD";
GRANT EXECUTE ON  "SYS"."DBMS_LOCK" TO "GRAD";
GRANT "CONNECT" TO "GRAD";
GRANT "RESOURCE" TO "GRAD";

Останавливаем базу:

shutdown immediate

Выходим из sqlplus:

exit

Теперь настроим listener. Для этого создадим файл /opt/oracle/OraHome/network/admin/listener.ora:

LISTENER =
  (ADDRESS_LIST =
        (ADDRESS= (PROTOCOL= TCP)(Host=10.0.0.1)(Port= 1521))
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME= grad-db.local.net)
      (ORACLE_HOME= /opt/oracle/OraHome)
      (SID_NAME = GRAD)
    )
  )
STARTUP_WAIT_TIME_LISTENER = 0
CONNECT_TIMEOUT_LISTENER = 10
TRACE_LEVEL_LISTENER = OFF

Предварительно заменив 10.0.0.1 на Ваш ip-адрес и grad-db.local.net на dns-имя сервера.

Теперь настроим алиас для соединения с базой. Создаем файл /opt/oracle/OraHome/network/admin/tnsnames.ora:

GRAD =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = GRAD)
      (SERVER = DEDICATED)
    )
  )

В нем также необходимо заменить 10.0.0.1 на ip-адрес сервера.

Все, Oracle установлен и готов к первому запуску. Запускаем:

# /etc/init.d/oracle start

Установка radius-сервера

Для установки radius-сервера необходимо наложить патч radius.patch. Для этого копируем его в /usr/portage/net-dialup/freeradius/files.

Затем исправляем последний ebuild (на момент написания статьи freeradius-1.0.1.ebuild): находим строку "unpack ${P}.tar.gz", добавляем после нее "epatch ${FILESDIR}/radius.patch".

Теперь можно устанавливать:

# emerge freeradius

Настраиваем. В файле /etc/raddb/radiusd.conf находим секцию pam. Она должна быть раскомментирована, после строки

pam_auth = radiusd
добавляем строку
chap_password = yes

В секции authenticate раскомментируем строчку pam.

В секции detail исправляем

detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d

на

detailfile = ${radacctdir}/detail.log

Файл users приводим к такому виду:

DEFAULT Auth-Type = Pam
        Fall-Through = 1

DEFAULT Service-Type == Framed-User
        Framed-IP-Address = 255.255.255.254,
        Framed-MTU = 576,
        Service-Type = Framed-User,
        Fall-Through = Yes,
        Acct-Interim-Interval = 60

DEFAULT Framed-Protocol == PPP
        Framed-Protocol = PPP,
        Framed-Compression = Van-Jacobson-TCP-IP

DEFAULT Hint == "CSLIP"
        Framed-Protocol = SLIP,
        Framed-Compression = Van-Jacobson-TCP-IP

DEFAULT Hint == "SLIP"
        Framed-Protocol = SLIP

Строка Acct-Interim-Interval указывает время в секундах, через которое pppd будет сбрасывать статистику radius-серверу.

В файле clients.conf стираем все строки и пишем:

client 127.0.0.1 {
        secret              = myradiussecret
        shortname       = localhost
}

Не забудьте заменить myradiussecret на свой пароль.

Теперь настроим PAM:

Создаем файл /etc/pam.d/radiusd:

auth            required        /opt/Billing/lib/pam_billing.so dummy --hname Inet -ORBInitRef NameService=corbaloc::10.0.0.1:3901/NameService
account         required        /opt/Billing/lib/pam_billing.so dummy --hname Inet -ORBInitRef NameService=corbaloc::10.0.0.1:3901/NameService

10.0.0.1 замените на ip-адрес Вашего сервера.

Добавляем radius в автозагрузку, но пока что не запускаем его:

rc-update add radiusd default

Установка radius-сервера закончена.

Установка pptpd и pppd

Устанавливаем pptpd:

# emerge pptpd

Для того, чтобы Ваш сервер поддерживал протокол шифрования MPPE и протокол сжатия MPPC (с которыми работает Microsoft Windows), нужно применить MPPE-MPPC патч к ядру. Его можно взять по адресу http://www.polbox.com/h/hs001/. В ядре должны быть включены опции:

<*>     PPP (point-to-point protocol) support
[*]     PPP filtering
<*>     PPP support for async serial ports
<*>     PPP support for sync tty ports
<*>     PPP Deflate compression
<*>     PPP BSD-Compress compression
<*>     Microsoft PPP compression/encryption (MPPC/MPPE)

Для установки pppd необходимо наложить патч pppd.patch. Для этого копируем его в /usr/portage/net-dialup/ppp/files.

Затем исправляем последний ebuild (на момент написания статьи ppp-2.4.3.ebuild): находим строку "unpack ${A}", добавляем после нее "epatch ${FILESDIR}/pppd.patch".

Чтобы установилась самая последняя версия pppd, добавляем в файл /etc/portage/package.keywords (если его нет - создаем) строку:

net-dialup/ppp      ~*

Теперь можно устанавливать:

# USE='mppe-mppc' emerge ppp

Устанавливаем radiusclient:

# emerge radiusclient

Теперь настраиваем.

/etc/pptpd.conf:
speed 115200
option /etc/ppp/options-pptpd
localip 10.0.0.1
remoteip 192.168.0.1-254

Где 10.0.0.1 - ip-адрес Вашего сервера,
192.168.0.1-254 - диапазон адресов для клиентов.

/etc/ppp/options-pptpd:
lock
name pptpd
mtu 1490
mru 1490
ms-dns 10.0.0.1
proxyarp
auth
refuse-pap
refuse-chap
refuse-mschap
refuse-eap
require-mschap-v2
mppe required,stateless,no40,no56
lcp-echo-failure 3
lcp-echo-interval 5
deflate 0
plugin radius.so
plugin radattr.so
noipx
asyncmap 0

Где 10.0.0.1 - адрес DNS-сервера.

/etc/radiusclient/servers:
127.0.0.1			myradiussecret

Не забудьте заменить myradiussecret на свой пароль, который Вы указывали при настройке radius-сервера.

Осталось добавить pptpd в автозагрузку:

# rc-update add pptpd default

И запустить его:

# /etc/init.d/pptpd start

Установка биллинга

Для установки нам понадобится jre. Установим его:

# emerge jre

Обновим переменные окружения:

# env-update
# source /etc/profile

Предполагается, что дистрибутив биллинга находится в /opt/install/grad.

Если вы используете внешний X-сервер, установите переменную окружения DISPLAY:

# export DISPLAY=x-server-ip:0.0

Запускаем инсталлятор:

# cd /opt/install/grad
# java -jar Billing*.jar

Выбираем язык, на котором будет происходить установка:

Указываем каталог установки - /opt/Billing.

Указываем параметры:

ip-адрес хоста - ip-адрес сервера;
Oracle Home - /opt/oracle/OraHome;
Логин - GRAD;
Пароль - mybillingpassword;
Алиас базы данных - GRAD;
SMTP-сервер - ip-адрс SMTP сервера.

Так как базы у нас еще нет, выбираем "Пересоздать".

Указываем данные для сертификата - пароль, и реквизиты Вашей компании.

Указываем серийный номер биллинга:

Выбираем необходимые нам компоненты:

Обязательно нужно оставить PAM module и Radius Collector.

Установка файлов успешно завершена.

Теперь создается база и сертификаты:

После завершения этой процедуры биллинг установлен.

Запустите его:

# /opt/Billing/bin/startBilling.sh >/dev/null 2>&1 &

Добавьте также эту команду в файл /etc/conf.d/local.start для автоматического запуска биллинга при старте системы.

Также запустите добавьте в /etc/conf.d/local.start PPPDKicker, для отключения пользователей, у которых закончились деньги на счету:

# /opt/Billing/bin/PPPDKicker --check-interval 15 -ORBInitRef NameService=corbaloc
::10.0.0.1:3901/NameService --hname Inet --leave-on-failure >/dev/null 2>&1 &

И коллектор трафика:

# tail -f /var/log/radius/radacct/detail.log | /opt/Billing/bin/RadiusCollector --online -ORBInitRef NameService= corbaloc::10.0.0.1:3901/NameService -OrbNoResolve -ORBCallTimeout 5 --aggregation-time 15 >/dev/null 2>&1 &

Ваш биллинг доступен по адресу:
https://10.0.0.1:8082 - для администраторов
и
http://10.0.0.1:8081 - для пользователей

Указываем путь к библиотекам биллинга:

Создаем файл /etc/env.d/88billing, в нем указываем:

LDPATH="/opt/Billing/lib"

Применяем изменения:

# env-update

Теперь запускаем radius:

/etc/init.d/radiusd start

И нам остается только настроить тарифные планы, создать пользователей и VPN-сервер готов к работе.



Альтманн Николай Сергеевич,
Пятигорский государственный лингвистический университет.

Техническая поддержка и разработка: GradSoft™. Copyright 2000-2004.