Маршрутизатор на CDS

Вариант создания маршрутизатора на CLS (Calculate Linux Scratch) не единственный. Теперь следует рассмотреть вариант установки маршрутизатора на CDS (Calculate Directory Server) + ко всему прочему добавить к нему функцию почтового сервера, dns (полноценного), а так же допустим, что у нас есть большой жесткий диск (желательно дополнительный) на котором мы будем хранить свои фильмы, музыку и прочее.

Нам понадобится:

  • Комп или сервер, на котором будет процессор с >=1,1GHz, ОЗУ >=512 мб (больше лучше), >=2 жд (на системный и 10 GB за глаза, под файлы сколько душа пожелает), 2 и больше сетевых карт.
  • Дистрибутив CDS (желательно 10.0)
  • Настройки вашего провайдера
  • Около 1-2 часа свободного времени
  • Свитч, чтоб могли подключаться остальные компы в сети.

Установка системы.

Итак, начнём с начала.
После загрузки с LiveCD, “пойдём” настраивать сеть. Нам нужен статический адрес на интерфейсе смотрящем в локалку и настроенный интерфейс для провайдера.
Как пример, возьмём внутренний адрес 192.168.0.1/24 на eth1, а внешний будет настаиваться через DHCP-провайдера (eth0).
В LiveCD настроим пока только провайдера (#net-setup eth0).
Обновим оверлей (#eix-sync) и установщик (#emerge -ua calculate).
Далее:

#cfdisk /dev/sda

где sda самый маленький жд, под систему.

Разметку диска сделаем стандартную (sda1=ОЗУх4 с поправкой на размер жд, sdb2>=8GB), не забудьте при разметке поменять тип раздела (82) под swap, ибо иначе он “пролетит” при установке.
Файловую систему выбираем из предпочтений. Кто-то советует форматировать в ext3, кто-то в reiser. Мы так как нам особо ничего вычислять не надо отформатируем в ext3 ибо говорят, что надёжнее:

#mkswap /dev/sda1 && swapon /dev/sda1
#mkfs.ext3 /dev/sda2

Установим систему, за имя возьмём “router”, если в дальнейшем на сервер будем заходить через ssh, то можно выставить разрешение поменьше (800х600, например, или 640x480) дабы видеокарта не испытывала лишний раз перегрузки и не грелась (взято из личного опыта):

#calculate -d /dev/sda2 --set-format=ext3 --set-hostname=router --set-video_resolution=800x600

После устанавливаем пароль root и

#reboot

Итак, система загрузится, но в локалку по прежнему смотреть не сможет. Надо настроить сеть:

/etc/conf.d/net:

modules_eth0=( "!plug" )
modules_eth1=( "!plug" )
config_eth1=( "192.168.0.1/24" )
config_eth0=( "dhcp" )

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

#/etc/init.d/net.eth1 start
#rc-update add net.eth1 boot

Всё, теперь можно поставить сервер в угол, отключить от него монитор и клавиатуру и спокойно зайти с другого компа по ssh. Лично я использую PuTTY, его можно скачать у меня с сайта ( Вот ссылка ) вместе с менеджером файлов WinSCP. Это утили для “форточек” и они хорошо подходят для подобных нужд.

Итак, дело за малым, настроить всё остальное :wink:

Настройка основных сервисов.

Настройка DNS.

В CDS нужные нам сервисы устанавливаются при помощи простой команды cl-setup (подробнее cl-setup --help-all)
Все учётные данные в CDS хранятся в LDAP, поэтому сперва нам нужно установить сервисы:

#cl-setup ldap && cl-setup unix

Теперь возьмёмся за настройку DNS и DHCP:

#cl-setup dns

Сервис установится сам, но нам придётся кое-что подправить в конфиге
/etc/bind/named.conf:

//Эти строки можно вставить или разкомментировать и подправить
//они указывают на какие сервера будут перенаправляться dns запросы
forwarders {
                123.123.123.123;
                123.123.123.123;
        };

И теперь можно создать свою зону

#cl-dns-zoneadd -n mydomain.ru --server mydomain.ru --ipserver 192.168.0.1
//Создадим псевдоним для нашего маршрутизатора
#cl-dns-recadd -t cname --host mail.maydomain.ru --cname mydomain.ru
//Укажем на какие сервера отсылать почтовые запросы, в данном случае это наш роутер
#cl-dns-zonemod --mx mail.mydomain.ru,mydomain.ru --email ваше_мыло@mydomain.ru

В принципе, если вы указали 127.0.0.1 в /etc/resolv.conf, то все адреса должны пинговаться

Настройка DHCP-сервера.

Теперь возьмемся за DHCP, ведь мы не хотим каждый раз подключая к сети новый комп заморачиваться на настройках сети :wink:

#cl-setup --net 192.168.0.0/24 --router 192.168.0.1 --dnames mydomain.ru --dnsip 192.168.0.1 --range 192.168.0.2,192.168.0.254 dhcp

Теперь каждый подключённый в сеть комп будет иметь свой ip, получит настройки интернета и собственное имя в доменной сетке mydomain.ru.

Настройка почтового сервера.

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

#cl-setup -t pop3,imap -c tls --host mydomain.ru mail

Поясню: мы указали тип почты (сразу два, но я обычно использую только pop3), указали, что будет использоваться шифрование tls и имя хоста mydomain.ru;

В CDS для каждого сервиса пользователи добавляются в сервис командой cl-useradd. Добавим почтовые акки для наших юзверей:

#cl-useradd -p -e admin@mydomain.ru -c "Administrator" admin mail
#cl-useradd -p -e ivanov@mydomain.ru,ivan_i@mail.ru -c "Ivanov Ivan Ivanovich" ivan mail
... и т.д.

Настройка маршрутизации.

Сейчас наши пользователи автоматически получают ip с нужными нам настройками, при желании можно им сделать почтовый акк, даже могут получать ip нужного хоста, но по прежнему не имеют выхода в Интернет.

Теперь можно настроить iptables, чтобы пользователи могли использовать глобальную сеть. Для этого можно использовать скрипт, приведённый ниже:

#!/bin/bash

#################################################################
 # Данный скрипт основан на древнем мануале с сайта gentoo.ru.   #
 # За всё время не дал ни одной осечки, если конечно я его хорошо#
 # скопировал! ;) Удачи всем!                                    #
#################################################################

#Обнуляем все правила в iptables
iptables -F
iptables -t nat -F
#Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#Для наглядности
export LAN=eth1
export WAN=eth0
#Теперь закроем наши сервисы так, чтобы они могли работать только для LAN
iptables -I INPUT 1 -i ${LAN} -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -A INPUT -p UDP --dport bootps -i ! ${LAN} -j REJECT
iptables -A INPUT -p UDP --dport domain -i ! ${LAN} -j REJECT
#Дадим доступ к портам dns(53), почте (995,25) и если хотите, можете раскомментировать SSH, но это не всегда полезно.
iptables -A INPUT -p TCP --dport 53 -i ${WAN} -j ACCEPT
iptables -A INPUT -p TCP --dport 995 -i ${WAN} -j ACCEPT
iptables -A INPUT -p TCP --dport 25 -i ${WAN} -j ACCEPT
#iptables -A INPUT -p TCP --dport 22 -i ${WAN} -j ACCEPT
#Отбросим все TCP/UDP-пакеты, обращающиеся к привилегированным портам
iptables -A INPUT -p TCP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP
iptables -A INPUT -p UDP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP
#Создадим правила для NAT
iptables -I FORWARD -i ${LAN} -d 192.168.0.0/255.255.0.0 -j DROP
iptables -A FORWARD -i ${LAN} -s 192.168.0.0/255.255.0.0 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.0.0/255.255.0.0 -j ACCEPT
iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE
#Сообщаем ядру, что ip-форвардинг разрешен
echo 1 > /proc/sys/net/ipv4/ip_forward
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done
#Сохраняем правила, чтоб не запускать больше этот скрипт и добаляем iptables в автозагрузку
/etc/init.d/iptables save
rc-update add iptables default
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.rp_filter = 1" >> /etc/sysctl.conf
#Закомментируйте, если у вас статический адрес у провайдера
echo "net.ipv4.ip_dynaddr = 1" >> /etc/sysctl.conf
/etc/init.d/iptables start

################################################
 #               end script                     #
################################################

Всё, теперь можно радоваться жизни… хотя ещё нет.
А что если у нас в сети стоит web-сервер? Притом он стоит не на маршрутизаторе, а внутри сети.
Для этого есть другой скрипт:

#!/bin/bash
#################################################################
#Порядок использования:                                         #
#1. Закиньте его в /usr/sbin                                    #
#2. запускайте по принципу "имя_скрипта адрес порт тип(tcp,udp)"#
#################################################################

export LAN=eth1
export WAN=eth0
iptables -t nat -A PREROUTING -p $3 --dport $2 -i ${WAN} -j DNAT --to $1
/etc/init.d/iptables save
################################################
 #                end script                    #
################################################

Настройка файлового сервера.

#cl-setup -w WORKGROUP -n ROUTER samba

Поясню:мы указали рабочую группу в которую будет входить наш сервер и net-BIOS имя хоста. При настройке самбы создадутся 2 пользователя: admin и client. Поменяем им пароль, чтобы потом их записи использовать:

#cl-passwd admin samba
#cl-passwd client samba

В целом, осталось только добавить строчки в /etc/samba/smb.conf для расшаривания нужных нам директорий.
Создадим необходимые папки:

#mkdir /home/share/
#mkdir /home/share/video/
#mkdir /home/share/music/
#mkdir /home/share/documents/

Разобъём второй диск на 3 раздела:1/2 диска, 1/3 диска, 1/6 диска. И отформатируем их: xfs, reiserfs, ext3. Это самая удачная схема для расшаренной информации, имхо.
Добавим в /etc/fstab необходимые пункты:

#echo "/dev/sdb1    /home/share/video   xfs noatime 0 2" >> /etc/fstab
#echo "/dev/sdb2    /home/share/music   reiserfs    noatime 0 2" >> /etc/fstab
#echo "/dev/sdd3    /home/share/documents   ext3    noatime 0 2" >> /etc/fstab

Примонтируем разделы:

#mount /dev/sdb1 && mount /dev/sdb2 && mount /dev/sdb3

Расставим права:

#chmod 777 /home/share/video
#chmod 777 /home/share/documents
#chmod 777 /home/share/music

Теперь заглянем в /etc/samba/smb.conf

#nano -w /etc/samba/smb.conf

Тут мы особо ничего не будем менять, лишь, чтоб особо не путаться в сетевых папках, мы поменяем параметр “browseable = yes”, на “browseable = no”. Это поможет спрятать ненужные нам по сути директории.
А теперь мы добавим следующие строки:

[files]
    path = /home/share
    browseable = yes
    writable = yes
    comment = SHARE files

Закрываем, сохраняем. Всё! Теперь когда захотите посмотреть или изменить что-либо на расшаренном пространстве, вы можете войти при помощи логина admin и пароля который вы установили.

Итак, теперь у нас есть полноценный маршрутизатор с удобным интерфейсом, со всеми нужными нам сервисами. :wink:

… нет, я может быть параноик - но
1 - маршрутизировать на центральном АД сервере - как-то стремно :wink:
2 - вывод nmap внешнего интерфейса способен убить любого разумного оптимиста :wink: Давайте оставим кесарю кесарево - CDS очень хорош в качестве центрального сервера предприятия, а вот маршрутизить, подрывать почтовик и т.д. - давайте на том, что для этих задач “роднее” :slight_smile:

а что роднее? :slight_smile: CLS? Так он вообще ни под что не заточен. А другие так тем более десктопы…

Теперь возьмемся за DHCP, ведь мы не хотим каждый раз подключая к сети новый комп заморачиваться на настройках сети :wink:

#cl-setup --net 192.168.0.0/24 --router 192.168.0.1 --dnames mydomain.ru --dnsip 192.168.0.1 --range 192.168.0.2,192.168.0.254

забыл указать название сервиса dhcp

забыл указать название сервиса dhcp

Да, спасибо! :slight_smile:

//Создадим псевдоним для нашего маршрутизатора
#cl-dns-recadd -t cname --host mail.maydomain.ru --cname mydomain.ru
//Укажем на какие сервера отсылать почтовые запросы, в данном случае это наш роутер
#cl-dns-zonemod --mx mail.mydomain.ru,mydomain.ru --email ваше_мыло@mydomain.ru

У меня с CNAME записью не прокатило, просит А запись. Я делал так:

 # cl-dns-recadd -t a --host mail.mydomain.ru --ip 192.168.0.1 --autoptr off
 # cl-dns-zonemod --mx mail.mydomain.ru -n mydomain.ru

P.S.

  1. "-autoptr off" добавил т.к. запись в обратной зоне уже существует, если не выключить добавление, то не создаст А запись.
  2. "n mydomain.ru" помоему Вы забыли указать зону “-n”, куда именно прописываем.
  3. "-email" уже прописан поэтому не вписывал.

И пару вопросов:

  1. Авторизацию прикручивал к SMTP, если да, то как (кучу всего перечитал и на форуме и в доках … увы :frowning: )
  2. Если конектиться через Mozilla Thunderbird 3.* то он ругается на то, что SMTP не защищен шифрованием … как прикрутить шифрование к SMTP?
  1. Авторизацию прикручивал к SMTP, если да, то как (кучу всего перечитал и на форуме и в доках … увы :()

Не понял суть вопроса…

  1. Если конектиться через Mozilla Thunderbird 3.* то он ругается на то, что SMTP не защищен шифрованием … как прикрутить шифрование к SMTP?

В плане гибкой настройки calculate пока проигрывает (при использовании стандартных средств). Для почты, ftp, web и файловых серверов рекомендую юзать две вещи в совокупности: CLS+WebMin. Лучшего сочетания пока не нашёл…

Сергей Клюйков писал(а):

Не понял суть вопроса…

Есть такая общеизвестная проблема, “как заставить ВСЕХ пользователей вводить логин и пароль при отправке почты т.е. при авторизации на SMTP сервере”!

В плане гибкой настройки calculate пока проигрывает (при использовании стандартных средств). Для почты, ftp, web и файловых серверов рекомендую юзать две вещи в совокупности: CLS+WebMin. Лучшего сочетания пока не нашёл…

По поводу гибкости я чет не понял! Там к SMTP поидее должна быть возможность ручками прикрутить TLS шифрование.
Web-Min не люблю, максимум для просмотра, постоянно в нем какието косяки при настройке. Да и присутствие тут web-mina не понял к чему!

Если конкретно шифрование интересует, то вообще-то его при установке сервиса можно установить при помощи ключа "-crypt". Правда есть нюанс (или скорее баг) протокол pop защищается шифрованием и может использоваться только с ним, а smtp, почему-то его хоть и использует, но не “считает” обязательным. Пока решения не придумал, да и не требовалось.

А авторизацию по логину и паролю обязательную не прикручивал? А то и без логина с паролем я с любого почтового ящика могу письма через мой cvng посылать!

Хм… Каким макаром? Я просто как-то не задумывался над сим вопросом.

не хотели бы обновить инструкцию, а ток команды система не находит: net-setup eth0, calculate -d и так далее.

Когда-нибудь может и дойдут руки :see_no_evil: Тогда у меня он был в роли маршрутизатора.
Сейчас Микротик стоит, поэтому если только в чисто учебных целях, но времени пока нет на это.

1 Like