Вариант создания маршрутизатора на 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. Это утили для “форточек” и они хорошо подходят для подобных нужд.
Итак, дело за малым, настроить всё остальное
Настройка основных сервисов.
Настройка 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, ведь мы не хотим каждый раз подключая к сети новый комп заморачиваться на настройках сети
#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 и пароля который вы установили.
Итак, теперь у нас есть полноценный маршрутизатор с удобным интерфейсом, со всеми нужными нам сервисами.