Настройки считать верными для gated-3.5.11-2bc и BlackCat 6.2, и протокола маршрутизации rip1

Установить можно с локального cdrom или с ftp, например:

# rpm -ihv ftp://bulldozer.fb.nstu.ru/pub/Linux/BlackCat-6.2/i386/RedHat/RPMS/gated-3.5.11-2bc.i386.rpm

Включим форвардинг пакетов между интерфейсами командой из shell и внесем аналогичную с трочку в /etc/rc.d/rc.local, чтобы система выполнила эту команду автоматически при перезагрузке:

# /sbin/sysctl -a net.ipv4.ip_forward=1
# echo "/sbin/sysctl -a net.ipv4.ip_forward=1" >>
/etc/rc.d/rc.local

Мы имеем два интерфейса eth0 (xxx.xxx.233.2 и маской 255.255.255.240) - выход в мир и eth1 - внутренняя подсеть (xxx.xxx.233.192/255.255.255.240) с реальными адресами.

Все настройки читаются из /etc/gated.conf, который для нашего случая выглядит так:

#
# Generic configuration file for use with RIP
#
traceoptions
    "/var/log/gated.log"
    size 1000K
    files 2
    general
    route
;

options
    noresolv;
;

interfaces {
    define xxx.xxx.233.2 broadcast 193.xxx.233.15 netmask 255.255.255.240;
    define xxx.xxx.233.193 broadcast xxx.xxx.233.207 netmask 255.255.255.240;
};

rip yes {
    broadcast;
    interface lo noripin noripout;
    interface xxx.xxx.233.2 ripin ripout version 1;
    };

static{
    default gateway xxx.xxx.233.1 interface xxx.xxx.233.2 retain;
#       xxx.xxx.233.192 gateway xxx.xxx.233.193 interface xxx.xxx.xxx.193 retain;
};

import proto rip { all; default restrict; };

export proto rip interface xxx.xxx.233.2 {
    proto direct { all metric 1; };
};

А теперь запустим gated и подождем несколько секунд заполнения таблицы маршрутизации:

# service gated start

Настройка Domain Name System

"Доменная система имен (Domain Name System, DNS) - это распределенная база данных, которая содержит информацию о компьютерах, включенных в сеть Internet." (UNIX: руководство системного администратора, Эви Немет и др. Пер. с англ.).

Domain Name System

DNS преобразует имена машин в IP-номера, которые являются октетными адресами машин, также она преобразует из имен в адреса и из адресов в имена.
Существует два подтипа DNS серверов кэширующий и основной сервер DNS для домена. Кэширующий сервер найдет ответ на запрос об имени машины и запомнит его, чтобы ответить, когда вы запросите эту же информацию в следующий раз. Это значительно уменьшит время ожидания ответа при следующем запросе и уменьшит трафик, особенно если у вас медленное соединение.

Заглянем в /etc

Начнем с настройки /etc/resolv.conf.

search chushki.ru
nameserver 127.0.0.1

Строка `search` означает задает в каких доменах должен идти поиск машин с которыми вы хотите соединиться. Например, если вы запрашиваете машину с именем www, то подставятся по очереди домены из строки `search` и получим www.chushki.ru. Строка поиска не должна содержать ваш TLD (Top Level Domain - Домен Верхнего Уровня), в нашем случае `ru`. В строке `nameserver` указывается IP DNS сервера, таких строк может быть несколько. Если строки 'nameserver' нет, то по умолчанию обращение происходит к IP адресу 127.0.0.1
Файл /etc/nsswitch.conf описывает, как получить разные типы данных, из какого файла или базы данных. Найдем строку, начинающуюся с `hosts:'.

hosts:      files nisplus nis dns

Если у вас нет NIS или NIS+ сервера, то уберите `nis` и `nisplus` соответственно.
Если в этом файле нет строки начинающейся с `hosts:', то поместите вышеприведенную строку в файл. Эта строка указывает программам сначала выполнять поиск в файле /etc/hosts, а затем просматривать DNS в соответствии с порядком указанном в файле /etc/resolv.conf.
Аналогичным целям служит /etc/hosts.conf:

order hosts,bind
multi on
nospoof on
alert on

Если строки с `order' нет, то вы должны ее добавить. Она заставляет подпрограмму разрешения имен сначала посмотреть в файле /etc/hosts, а затем сделать запрос к серверу имен (который в /etc/resolv.conf указан как машина с адресом 127.0.0.1). `multi on` означает, что у нас нет multiple адресов. `nospoof on` проверка адреса spoof'ителя. `alert on` предупредить нас если кто-то занялся spoof'ингом.
Формат /etc/hosts - это IP адрес и его символьное представление. Например, чтобы sendmail "не тормозил" при загрузке, если нет DNS сервера, прописать в нем нужные адреса. Т.е. можно ускорить поиск некоторых машин, прописав их в этот файл, избежав поиска в DNS сервере.

127.0.0.1               localhost localhost.localdomain
198.162.2.1             www.cheburashki.com

Настройка кэширующего DNS

Подразумевается, что установлен bind 8-й версии. Конфигурационным файлом DNS сервера является /etc/namedb/named.conf.
Итак, начнем разбирать named.conf для кэширующего DNS сервера.

options {
    directory "/etc/namedb";

       forwarders {
            217.70.106.5;
            212.20.0.126;
        };
};

В этой секции описывается директория, относительно которой bind будет искать файлы необходимые для работы и по всем неотрезолвенным адресам, будет отсылать запросы вышестоящему DNS серверу, если ни один не ответит, запрос будет послан к одному из рутовых DNS серверов.

zone "." {
    type hint;
    file "root.hints";
};

Самый важный файл root.hints, в нем лежат адреса рутовых серверов, которые отвечают за зоны 1-го уровня и содержит следующую информацию:

G.ROOT-SERVERS.NET.     5w6d16h IN A    192.112.36.4
J.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.10
K.ROOT-SERVERS.NET.     5w6d16h IN A    193.0.14.129
L.ROOT-SERVERS.NET.     5w6d16h IN A    198.32.64.12
M.ROOT-SERVERS.NET.     5w6d16h IN A    202.12.27.33
A.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.4
H.ROOT-SERVERS.NET.     5w6d16h IN A    128.63.2.53
B.ROOT-SERVERS.NET.     5w6d16h IN A    128.9.0.107
C.ROOT-SERVERS.NET.     5w6d16h IN A    192.33.4.12
D.ROOT-SERVERS.NET.     5w6d16h IN A    128.8.10.90
E.ROOT-SERVERS.NET.     5w6d16h IN A    192.203.230.10
I.ROOT-SERVERS.NET.     5w6d16h IN A    192.36.148.17
F.ROOT-SERVERS.NET.     5w6d16h IN A    192.5.5.241

Эта информация изменяется, в разделе "Управление DNS сервером" написано, как хранить информацию соответствующую действительности.

zone "0.0.127.in-addr.arpa" {
    notify no;
    type master;
    file "s/127.0.0.bak";
};

Это значит, что bind отвечает за обратную зону 127.0.0.* и не уведомляет вышестоящие сервера об изменениях в зоне. Файл 127.0.0.bak находится в каталоге /etc/namedb/named/s/ и содержит следующую информацию:

@               IN      SOA     ns.localhost.localdomain. root.localhost.localdomain. (
                                2001081901       ; Serial
                                8H      ; Refresh
                                2H      ; Retry
                                1W      ; Expire
                                1D)     ; Minimum TTL
                        NS      ns.localhost.localdomain.
1                       PTR     localhost.

Символ `@` ознчает, что мы описываем сами себя. Описываемая зона держится сервером ns.localhost.localdomain и отвечает за нее человек доступный по адресу root.localhost.localdomain (`@` заменяется на `.`). Серийный номер у зоны 2001081901 (дата+номер ревизии зоны) - это нужно для серверов, которые берут данные с нашего. Последняя строчка, указывает, что машин с адресом 1 в зоне 127.0.0. имеет имя localhost. Не стоит забывать про точку в конце имени.

Настройка DNS для поддержки домена

Если вы еще не ознакомились с разделом "Настройка кэширующего DNS", сделайте это перед прочтением этого раздела.
DNS - это иерархическая система, организованная в виде дерева. Вершина (root) записывается как `.` (root). Существует несколько доменов верхнего уровня (TLD), например EDU, COM, NET и т.д.
Не все символы разрешено использовать в именах машин. Мы ограничимся символами английского алфавита: a-z, цифрами: 0-9 и символом '-' (тире). Прописные и строчные символы не различаются DNS.
Итак, начнем разбирать named.conf для поддерживающего домен DNS сервера.

options {
    directory "/etc/namedb";

       forwarders {
            217.70.106.5;
            212.20.0.126;
        };

zone "." {
        type hint;
        file "root.hints";
};

zone "named.root" {
  type hint;
  file "";
};

Секция `named.root` позволяет кэшировать и загружать информацию с root серверов, если откажут сервера из секции `forwarders`.

zone "kikimora.ru" in {
        type master;
 file "s/kikimora.ru";
 allow-transfer { 10.0.0.10; };
  };
};

bind держит зону kikimora.ru и является мастером, остальные DNS сервера синхронизируют свои записи по зоне kikimora.ru по мастеру. Зона описывается в файле kikimora.ru.
Опцией `allow-transfer` ограничиваем распространение зональных данных DNS IP адресом 10.0.0.10 (вторичный DNS сервер нашего домена).

zone "0.0.10.in-addr.arpa" in {
     notify no;
     type master;
     file "s/0.0.10.bak";
     };

Так же bind отвечает за обратную зону 10.0.0.* и не уведомляет вышестоящие сервера об изменениях в зоне. Зона описывается в файле 0.0.10.bak
Рассмотрим файл kikimora.ru поближе.

@                       IN  SOA ns.kikimora.ru. root.kikimora.ru. (
                    2001082601  ; serial number
                    10800       ; refresh
                    600         ; retry
                    432000      ; expire
                    3600      ) ; minimum TTL

Другие сервера будут обновлять информацию о вашем раз в 10800 секунд, при неудачной попытке попробуют через 600 секунд снова. На кэширующих DNS сервера информация о вашей зоне "устареет" через 432000 секунд, но не менее, чем через 3600.

@                       NS      ns.kikimora.ru.
@                       A       10.0.0.1
@                       MX      5      mx.kikimora.ru.
@                       MX      20     mx1.kikimora.ru.

Держателем зоны является сервер ns.kikimora.ru с IP адресом 10.0.0.1. Так же имеется почтовый сервер для данного домена mx.kikimora.ru с приоритетом 5, если он не доступен, то почта пойдет на mx1.kikimora.ru. Не забывайте про точки в конце имен серверов!!!

mx                      A       10.0.0.1 
ns                      A       10.0.0.1
www                     A       10.0.0.1
ftp                     A       10.0.0.1
mx1                     A       10.0.0.10
ns1                     A       10.0.0.10

Описывается соответствие имени сервера его IP адресу.
Файл 0.0.10.bak имеет почти аналогичный вид:

@       IN      SOA     ns.kikimora.ru. root.kikimora.ru. (
                    2001082601 ; Serial, todays date + todays serial
                    8H      ; Refresh
                    2H      ; Retry
                    1W      ; Expire
                    1D)     ; Minimum TTL
IN NS      ns.kikimora.ru.
1               IN PTR     mx.kikimora.ru.
1               IN PTR     ns.kikimora.ru.
1               IN PTR     www.kikimora.ru.
1               IN PTR     ftp.kikimora.ru.
10              IN PTR     mx1.kikimora.ru.
10              IN PTR     ns1.kikimora.ru.

Последние строчки говорят, что машина с адресом 1 в зоне 10.0.0. имеет имя mx.kikimora.ru и т.д. А машина с адресом 10 имеет имя mx1 и ns1.

Управление DNS сервером

Содержание DNS сервера в рабочем состоянии включает в себя регулярное обновление root.hints. Для этого можно воспользоваться программой dig, запросив с ее помощью один из корневых DNS серверов. Например 'dig @g.root-servers.net . ns > root.hints.new' и замените им свой root.hints. Затем перезапустите DNS сервер.
Для автоматизации этого процесса возьмите этот shell скрипт:


#!/bin/sh
#
# Обновляет информацию кеша сервера имен раз в месяц.
# Он автоматически запускается раз в месяц с помощью cron.
#

# Original by Al Longyear
# Updated for bind 8 by Nicolai Langfeldt
# Miscelanious error-conditions reported by David A. Ranch
# Ping test suggested by Martin Foster
#
(

echo "To: hostmaster "
echo "From: system "
echo "Subject: Automatic update of the named.conf file"
echo
PATH=/sbin:/usr/sbin:/bin:/usr/bin:

export PATH
cd /var/named
# Мы подключены? проверка подключения к серверу вашего ISP
case `ping -qnc some.machine.net` in
*'100% packet loss'*)
    echo "The network is DOWN. root.hints NOT updated"

    echo
    exit 0
    ;;
esac

dig @rs.internic.net . ns >root.hints.new 2>&1

case `cat root.hints.new` in
*NOERROR*)
    # It worked
    :;;
*)
    echo "The root.hints file update has FAILED."

    echo "This is the dig output reported:"
    echo
    cat root.hints.new
    exit 0
    ;;
esac

echo "The named.conf file has been updated to contain the following information:"
echo
cat root.hints.new
chown root.root root.hints.new
chmod 444 root.hints.new
rm -f root.hints.old

mv root.hints root.hints.old
mv root.hints.new root.hints
ndc restart
echo
echo "The nameserver has been restarted to ensure that the update is complete."
echo "The previous root.hints file is now called
/var/named/root.hints.old."

) 2>&1 | /usr/lib/sendmail -t
exit 0

Измените email адрес, пути для своей машины и вставьте в cron для запуска раз в месяц.

Часто задаваемые вопросы

Q: Как получить домен второго уровня?
A: Обратитесь в http://www.nic.ru/ Региональный Сетевой Информационный Центр, приготовьте деньги и DNS сервер (master, slave).
Q: Для делегирования домена нужно иметь ведомый DNS сервер, что для этого нужно?
A: Например ведущий DNS сервер имеет IP адрес 10.0.0.1, то в /etc/named.conf ведомого сервера нужно добавить:

zone "kikimora.ru" {
 type slave;

 file "s/kikimora.ru";
 masters { 10.0.0.1; };
};

Может быть несколько основных DNS серверов для зоны, отделяются знаком `;` внутри списка `masters`.
Q: Как использовать DNS сервер за firewall?
A: В секцию `options` файла named.conf добавьте/раскоментируйте строчку:

query-source address * port 53;

BIND 8-й версии по умолчанию использует непривилегированный порт.
Q: Как отключить логи у DNS сервера?
A: Добавьте секцию `logging` в файл named.conf:

logging {
 category lame-servers { null; };

 category cname { null; };
};

Установка и настройка DialUp in server

Настройки считать верными для FreeBSD 4.4-STABLE и RedHat 6.x (и его клонов).

Настройка mgetty

Аналогом COM1 является /dev/ttyS0 (Linux), /dev/cuaa0 (FreeBSD). COM2 - /dev/ttyS1, /dev/cuaa1 и т.д.
mgetty должен быть собран с опцией -DAUTO_PPP. Конфигурационные файлы находятся в директории mgetty+sendfax. Раскоментировать строчку /AutoPPP/ в login.config:

/AutoPPP/ -  a_ppp /usr/sbin/pppd auth -chap +pap login debug

Для новых версий pppd эта строчка выглядит так:

/AutoPPP/ -  a_ppp /usr/sbin/pppd auth refuse-chap require-pap login debug

Файл mgetty.config должен содержать примерно следующее:

port cuaa0
debug 4
fax-id 00 00 000000
speed 57600
direct NO
blocking NO
port-owner uucp
port-group dialer
port-mode 0660
toggle-dtr YES
toggle-dtr-waittime 500
data-only YES
fax-only NO
modem-type data
init-chat "" ATZ OK
modem-check-time 3600
rings 7
answer-chat "" ATA CONNECT c r
answer-chat-timeout 80
autobauding NO
ringback NO
ringback-time 30
ignore-carrier false
issue-file /etc/issue
prompt-waittime 500
login-prompt @!login: 
login-time 240
diskspace 1024
notify root
fax-owner uucp
fax-group dialer
fax-mode 0660

nologin.cuaaX

Если нужно, чтобы модем не поднимал трубку в определенное время, то можно по крону создавать nologin.cuaaX в директории etc, где X номер порта.

options

modem
asyncmap 0
mtu 576
idle 600

options.cuaa0

passive
10.0.0.1:10.0.0.2
proxyarp
ms-dns 10.0.0.1

pap-secrets

Пароль пользователя max берется из системы и разрешена любая линия.

max  * ""  *

Пароль пользователя max указан явно (не зашифрован) и доступ возможен только с двух линий.

max * asdfg 10.0.0.2 10.0.0.3

Настройка Linux (pppd)

В файле /etc/inittab прописываем запуск mgetty:

S0:2345:respawn:/sbin/mgetty ttyS0
S1:2345:respawn:/sbin/mgetty ttyS1

Если при подъеме ppp в /var/log/messages появляются такие строчки:

modprobe: Can't locate module ppp-compress-21
modprobe: Can't locate module ppp-compress-24
modprobe: Can't locate module ppp-compress-26
Нужно добавить в /etc/{modules.conf|conf.modules}:

alias ppp-compress-21 bsd_comp
alias ppp-compress-24 ppp_deflate
alias ppp-compress-26 ppp_deflate

Для прохождения пакетов между интерфейсами, нужно включить форвардинг пакетов /etc/sysctl.conf:

net/ipv4/ip_forward = 1

Если используется диапазон адресов из приватной сети (в нашем случае), то пакеты идущие от интерфейса ppp0 нужно маскировать. Маскарадинг с помощью ipchains:

# /sbin/ipchains -F
# /sbin/ipchains -P forward DENY
# /sbin/ipchains -A forward -j MASQ -s 10.0.0.0/255.0.0.0 -d 0.0.0.0/0

Маскарадинг с помощью iptables:

# /sbin/iptables -P FORWARD ACCEPT 
# /sbin/iptables -A FORWARD -i ppp0 -m state --state NEW,INVALID -j REJECT 
# /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Настройка FreeBSD (pppd)

В файл /etc/ttys добавим запуск mgetty:

cuaa0 "/usr/local/sbin/mgetty"        unknown on insecure

Ядро должно быть регенерировано с options IPFIREWALL и IPDIVERT. Подразумевается, что интерфейс ed0 смотрит в мир. Файл /etc/rc.conf должен содержать:

gateway_enable="YES"
firewall_enable="YES"
firewall_type="open"
natd_enable="YES"
nat_interface="ed0"

А в /etc/rc.local добавим alias для интерфейса ed0 (подразумевается, что в сервере всего один интерфейс, который имеет реальный адрес), чтобы использовать proxyarp.

/sbin/ifconfig ed0 alias 10.1.1.1

Проверяем

Если адрес ppp-соединения входит в туже подсеть и используется proxyarp, то мы увидим перманентное соединение с помощью команды:

# arp -a

© 2001-2015 NLG