среда, 24 апреля 2013 г.

Установка и настройка Webmin в FreeBSD

Решил поставить на FreeBSD сервер Webmin для одного из клиентов.

Немного информации:
Webmin — это web-интерфейс для удобного администрирования
Unix систем. Используя любой баузер, Вы можете настраивать
аккаунты юзеров, сервер Apache, DNS, файловый сервер и многое другое.
  1. Для начала стоит обновить порты( если вы еще этого не сделали), чтоб иметь последнюю версию (на момент написания статьи - webmin-1.560).
    cd /usr/ports && make update 
     
  2. Устанавливаем собственно Webmin:
    cd /usr/ports/sysutils/webmin
    make install clean
    
    В конце видим:
    ===> Installing rc.d startup script(s)
    ===>   Registering installation for webmin-1.560
    ===>  Cleaning for p5-Authen-PAM-0.16_1
    ===>  Cleaning for webmin-1.560
     
  3. Конфигурация Webmin. Любым редактором (я mc-шный пользую) редактируем файл /etc/rc.conf, добавляем в конец
    webmin_enable="YES"
    
    Для установки всех необходимых конфигов и т.д.
    /usr/local/lib/webmin/setup.sh
    
    Надо будет ответить на несколько вопросов:
    ***********************************************************************                                                                                      
    *            Welcome to the Webmin setup script, version 1.510        *                                                                                      
    ***********************************************************************                                                                                      
    Webmin is a web-based interface that allows Unix-like operating                                                                                              
    systems and common Unix services to be easily administered.                                                                                                  
                                                                                                                                                                 
    Installing Webmin in /usr/local/lib/webmin ...                                                                                                               
                                                                                                                                                                 
    ***********************************************************************                                                                                      
    Webmin uses separate directories for configuration files and log files.                                                                                      
    Unless you want to run multiple versions of Webmin at the same time                                                                                          
    you can just accept the defaults.                                                                                                                            
                                                                                                                                                                 
    Log file directory [/var/log/webmin]:  [Жмем Enter]                                                                                                                  
                                                                                                                                                                 
    ***********************************************************************                                                                                      
    Webmin is written entirely in Perl. Please enter the full path to the                                                                                        
    Perl 5 interpreter on your system.                                                                                                                           
                                                                                                                                                                 
    Full path to perl (default /usr/bin/perl): [Жмем Enter]                                                                                                                   
                                                                                                                                                                 
    Testing Perl ...                                                                                                                                             
    Perl seems to be installed ok                                                                                                                                
                                                                                                                                                                 
    ***********************************************************************                                                                                      
    Operating system name:    FreeBSD
    Operating system version: 7.0
    ***********************************************************************
    Webmin uses its own password protected web server to provide access
    to the administration programs. The setup script needs to know :
     - What port to run the web server on. There must not be another
       web server already using this port.
     - The login name required to access the web server.
     - The password required to access the web server.
     - If the webserver should use SSL (if your system supports it).
     - Whether to start webmin at boot time.
    Web server port (default 10000): [Жмем Enter]
    Login name (default admin): [Жмем Enter]
    Login password: [Ввводим ваш пароль]
    Password again:
    Use SSL (y/n): [y]
    ***********************************************************************
    Creating web server config files..
    ..done
    Creating access control file..
    ..done
    Creating start and stop scripts..
    ..done
    Copying config files..
    ..done
    Changing ownership and permissions ..
    ..done
    Running postinstall scripts ..
    syslog-ng: not found
    ..done
     
  4. Запуск Webmin. Сразу после установки запустим Webmin
    /usr/local/etc/rc.d/webmin start
    
    Для доступа к Webmin-у браузере набираем
    https://your-domain.com:10000/
     
    Полезная информация:
    Для того чтобы поменять пароль есть одна простая команда:
    # /usr/local/lib/webmin/changepass.pl /usr/local/etc/webmin user password
    Вместо "user" введем имя пользователя, пароль которого надо изменить, а вместо "password" сам пароль соответственно.
     

Настройка DHCP сервера на FreeBSD 9.x

Задача:

Имеется интернет-шлюз на ОС FreeBSD 9 с работающей DNS-службой. "Внутренний" интерфейс (re0) сервера имеет ip-адрес 192.168.0.1. Хочется что бы сетевые карты клиентов локальной сети настраивались автоматически, для этого наш сервер должен выполнять функцию DHCP-сервера

Решение:
Начинаем с установки необходимых пакетов. Для этого переходим в нужный каталог:
gateway# cd /usr/ports/net/isc-dhcp41-server
Смотрим зависимости:
gateway# make all-depends-list
Скорее всего мы увидим, что их нет.. ну и хорошо.
gateway# make config
задаем параметры установки, вот такие: 
[*] DHCP_IPV6
[*] DHCP_PARANOIA
[  ] DHCP_LDAP
[*] DHCP_LDAP_SSL

Загружаем все необходимое:
gateway# make fetch
Устанавливаем:
gateway#  make install clean
Как поставится (это будет очень быстро), обновим пути поиска:
gateway#  rehash
 После установки редактируем файл /usr/local/etc/dhcpd.conf примерно до следующего содержания:
option domain-name "domain.ru";
option domain-name-servers 192.168.0.1;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
log-facility local7;
subnet 192.168.0.0 netmask 255.255.255.0 {
      range 192.168.0.200 172.16.0.250;
      option routers 192.168.0.1;
      option domain-name-servers 192.168.0.1;
}
Рассмотрим содежримое dhcpd.conf:
option domain-name  - указывается имя домена
option domain-name-servers  - здесь перечисляются ip-адреса DNS-серверов, которые будут получать клиенты локальной сети
option subnet-mask - маска подсетиполучаемая клиентами локальной сети
default-lease-time 600 - время аренды адреса в секундах (по-умолчанию)
max-lease-time 7200 - максимальное время аренды адреса в секундах
ddns-update-style none - не обновлять DNS при выдаче клиенту
authoritative - авторитарный режим (типа это главный DHCP сервер на деревне)
log-facility local7 - уровень детализации логов
subnet - обслуживаемая подсеть (может быть несколько) + маска подсети
range - диапазон выдаваемых адресов
option routers  - основной шлюз, получаемый клиентами локальной сети
option domain-name-servers  - DNS-сервер, получаемый клиентами локальной сети

Добавляем в файл /etc/rc.conf следующие строки:
dhcpd_enable="YES"
dhcpd_iface="re0"
Первая строка определяет автозапуск DHCP сервера при старте системы, вторая строка определяет сетевой интерфейс (интерфейсы), на котором (которых) будет работать DHCP сервер.
Пробуем запустить DHCP-сервер:
gateway# /usr/local/etc/rc.d/isc-dhcpd start
Также хочется иметь возможность фиксировать ip-адреса за некторыми ПК.
Для этого нужно в файл /usr/local/etc/dhcpd.conf добавить всего лишь несколько строк: 
host pc1 {
    hardware ethernet 08:00:27:E2:81:C9;
    fixed-address 192.168.0.2; }

Для того, что бы наши изменения вступили в силу, нужно перезапусить DHCP сервер:
gateway# /usr/local/etc/rc.d/isc-dhcpd restart

Остановить DHCP сервер можно командой:
testrouter# /usr/local/etc/rc.d/isc-dhcpd stop 

Запустить DHCP сервер можно командой: 
testrouter# /usr/local/etc/rc.d/isc-dhcpd start 

Сведения о выданных IP-адресах и еще много чего интересного о том, кому они были выданы хранятся в файле  /var/db/dhcpd/dhcpd.leases

понедельник, 22 апреля 2013 г.

Cisco и DHCP: статические привязки IP к хостам и разные IP для одного хоста

Итак, у нас имеется железка Cisco и на этой железке крутится DHCP-сервер. Я предположу, что сам сервер уже настроен и работает, а наша задача сейчас - это закрепить за определенным компьютером или хостом с определенным MAC-адресом определенный IP, который будет всегда одинаковый.

Как бонус - я подскажу - что делать, если искомый хост перемещается между несколькими подсетями и ему (т.е. одному и тому же MAC-адресу) нужно выдать разные IP в зависимости от того - на каком объекте он сейчас находится.


Закрепляем IP к MAC

В Cisco есть пулы. Пулы раздают для определенной подсети IP-адреса. И вроде как понятие "пул" ассоциируется сразу с набором адресов, из которого DHCP сервер будет динамически выдавать свободный.

Однако понятие "закрепления" MAC=IP в Cisco тоже реализуется через пулы. И создаются пулы совершенно так-же, как и обычные, за исключением одного момента: для обычных пулов мы определяем директиву "network" для того, чтобы указать подсеть, из которой выдавать адреса, а для статической привязки пулы мы НЕ используем директиву "network", а используем "host", добавляя к ней "client-identifier".

Вот пример объявления статической привязки MAC-адреса к IP:

CISCO# config t
CISCO(config)# ip dhcp pool MyHost
CISCO(dhcp-config)# host 10.0.99.15 255.255.255.0
CISCO(dhcp-config)# client-identifier 0194.39e5.c0c2.a9
CISCO(dhcp-config)# default-router 10.0.99.1
CISCO(dhcp-config)# dns-server 10.0.0.1 10.0.1.1
CISCO(dhcp-config)# end

Здесь:
  • host : определяет IP адрес для данного хоста
  • client-identifier : задает MAC-адрес, по которому будем привязываться
  • default-router : Шлюз по-умолчанию
  • dns-server : Серверы DNS

Внимание! Очень внимательно посмотрите на строку client-identifier. Видите, что MAC адрес почему-то на одно слово длиннее, чем должен быть? Дело в том, что впереди мы добавили "01" (на самом деле MAC выглядит 94:39:E5:C0:C2:A9). Дело в том, что во время запроса на Cisco прилетает MAC в таком вот виде, т.е. с "01" вначале. Прилетает он так с Windows, с Unix-систем вначале добавляется "00" вместо "01". Возможно, на других железках запрос прилетает еще по-своему. Лучше всего сначала не привязывать хост, а посмостреть через
CISCO# sh ip dhcp bind
в каком виде прилетел MAC.

Итого, для Windows и BSD/Unix/MacOS MAC будет прилетать в таком виде:
  • Unix: 0094.39e5.c0c2.a9
  • Windows: 0194.39e5.c0c2.a9


Закрепляем за одним хостом разные IP в зависимости от местоположения

Представим себе схему: у нас есть предприятие с распределенной сетью. Скажем, что в офисе А народ использует адресацию 10.0.10.0/24, а в офисе Б - 10.0.11.0/24. Офис А сидит на VLAN10, а офис Б - на VLAN11 (это для примера). Некой роуминговой подсети, например, не существует и сотрудники в офисе А могут использовать только адресацию из сети 10.0.10.0/24. В офисе Б - аналогично.

Теперь представим себе сотрудника с ноутбуком, который то поработает в офисе А, то поработает в офисе Б. Очевидно, что этому сотруднику нужно выдавать разные IP в зависимости от того, где он в данный момент подключен - в офисе А или в офисе Б. Например, в офисе А у него должен быть IP=10.0.10.44, а в офисе Б - IP=10.0.11.44.

Как нам на Cisco DHCP это прописать?


Итак, мы используем два пула - для офиса А и для офиса Б соответственно. Пулы, конечно, назовем по-разному. Ниже пример такой настройки:

CISCO# config t
CISCO(config)# ip dhcp pool MyRoumingHost_OfficeA
CISCO(dhcp-config)# host 10.0.10.44 255.255.255.0
CISCO(dhcp-config)# client-identifier 0194.39e5.c0c2.a9
CISCO(dhcp-config)# default-router 10.0.10.1
CISCO(dhcp-config)# dns-server 10.0.0.1 10.0.1.1
CISCO(dhcp-config)# end
CISCO# config t
CISCO(config)# ip dhcp pool MyRoumingHost_OfficeB
CISCO(dhcp-config)# host 10.0.11.44 255.255.255.0
CISCO(dhcp-config)# client-identifier 0194.39e5.c0c2.a9
CISCO(dhcp-config)# default-router 10.0.11.1
CISCO(dhcp-config)# dns-server 10.0.0.1 10.0.1.1
CISCO(dhcp-config)# end

Просто, не правда ли? Т.е. мы создали два пула с разными именами, с одинаковым MAC, но с разными сетевыми реквизитами.