1. Вы находитесь в архивной версии форума xaker.name. Здесь собраны темы с 2007 по 2012 год, большинство инструкций и мануалов уже неактуальны.
    Скрыть объявление

Настраиваем роутер на Linux Ubuntu NAT + DHCP + Squid

Тема в разделе "FAQ", создана пользователем Jason Bourne, 2 окт 2011.

  1. Jason Bourne

    Jason Bourne [email protected]:~# Модератор

    Регистрация:
    28 ноя 2009
    Сообщения:
    0
    Симпатии:
    96
    Баллы:
    0
    [​IMG]

    Linux сервер чаще всего применяют для того, чтобы организовать общий доступ в интернет для определенного количества машин. Отдать предпочтение этой операционной системе можно благодаря ее низкой стоимости и относительно невысоким требованиям к железу. Чаще всего Linux сервер устанавливают первым в организации, а это может вызвать определенные сложности у администраторов, которые ранее не использовали данную операционную систему. В этой статье мы детально опишем настройку роутера (что включает в себя NAT, DHCP, Squid) на базе Ubuntu Server.

    Установка и настройка первоначальных параметров.

    Ubuntu Server имеет возможность предустановки выбранных ролей сервера, а также отличается от своей настольной версии тем, что в ней отсутствуют пользовательские приложения и графические оболочки GUI, хотя по большому счету это относиться к любой версии Ubuntu, а также с небольшими поправками для любого Linux дистрибутива. Установка Ubuntu Server обычно не вызывает сложностей так как происходит на русском языке в текстовом режиме.
    Из предложенного списка программного обеспечения, нам нужен только OpenSSH, который используется для удаленного доступа к серверу. Опытный пользователь может без проблем установить все необходимые пакеты при помощи пункта Manual package selection. Но если это первый сервер, который вы настраиваете, то лучше мы установим все необходимые для работы программы позже. Такая последовательность нужна для того, чтобы мы могли успешно справиться с возможными неполадками, которые могут возникнуть в процессе установки, а также это позволит иметь четкое представление о назначении каждого устанавливаемого пакета.
    Итак, после установки Ubuntu Server система перезагружается и мы видим черный экран командной строки. Конечно администраторов, которые привыкли к консоли Windows, это может слегка удивить, но следует учесть, что все серверные роли Linux настраиваются только через консоль и файлы конфигурации.
    Вначале следует настроить сетевые соединения. Для этого в консоли вводим:

    Код:
    sudo nano /etc/network/interfaces
    [​IMG]

    Данная команда открывает в консольном редакторе nano файл конфигурации с сетевыми интерфейсами, аналогично рисунку. Пока там прописан только один интерфейс eth0, который настроен на работу по DHCP. К eth0 в нашем случае подключен ADSL модем (хотя это может быть любая сеть провайдера), а eth1 смотрит во внутреннюю сеть. На внешнем интерфейсе IP адрес 192.168.1.2, шлюз (ADSL модем) 192.168.1.1, внутренняя сеть находиться в диапазоне 10.0.0.1 – 254. Тогда наши настройки будут выглядеть следующим образом:

    Код:
    auto eth0
    iface eth0 inet static
    address 192.168.1.2
    netmask 255.255.255.0
    gateway 192.168.1.1
    auto eth1
    iface eth1 inet static
    address 10.0.0.1
    netmask 255.255.255.0
    Для сохранения изменений нажимаем сочетание клавиш Ctrl+O и для выхода — Ctrl+X.
    Следующий этап подразумевает настройку DNS, для этого выполняем команду:

    Код:
    sudo nano /etc/resolv.conf
    В данном файле нужно указать DNS провайдера или адреса DNS серверов иначе несможете просматривать сайты. OpenDNS:

    Код:
    #OpenDNS Servers
    nameserver 208.67.222.222
    nameserver 208.67.220.220
    Далее сохраняем настройки и перезагружаемся. Также вместо перезагрузки можно перезапустить сетевые службы:

    Код:
    sudo /etc/init.d/networking restart
    Попробуйте пингануть любой сайт

    Код:
    ping ya.ru
    Если пинг проходит значит всё хорошо.

    Итак, сеть у нас уже настроена, а это значить, что можно переходить к следующим этапам настроек, но прежде для удобства администрирования следует установить несколько программных пакетов. Обновляем список доступного программного обеспечения:

    Код:
    sudo apt-get update
    А затем обновляем их до актуальной версии:

    Код:
    sudo apt-get upgrade
    Следующим этапом устанавливаем файловый менеджер подобный к Norton Commander или Far — Midnight Commander (mc):

    Код:
    sudo apt-get install mc
    Для того чтобы запустить Midnight Commander достаточно ввести его короткое имя — mc в консоли. Также для удобства рекомендуем сразу включить встроенный редактор, он намного удобней, чем nano. Для этого выполняем следующее: F9 — Настройки — Конфигурация — Встроенный редактор.
    Чтобы не бегать к серверу каждый раз, устанавливаем OpenSSH, он помогает удаленно управлять сервером из любого места (например, из дома) по защищенному протоколу:

    Код:
    sudo apt-get install ssh
    Для того чтобы подключиться с Windows можно использовать программу PuTTY, а для корректного отображения символов в закладке Window – Translation выбираем кодировку UTF8. Если есть необходимость ограничения доступа к серверу можно дописать в файл /etc/ssh/sshd_config параметр AllowUsers, указав пользователя, который имеет удаленный доступ по SSH, например пользователь admin:

    Код:
    AllowUsers admin
    Для разрешения доступа группе пользователей используют параметр AllowGroups, а для блокировки доступа определенным группам или пользователям используют DenyGroups и DenyUsers.

    Настраиваем NAT

    Для того чтобы организовать общий доступ к сети интернет нужно настроить трансляцию сетевых адресов (NAT), это позволяет сетевым службам внутренней сети получить доступ к внешней сети. Для данной настройки достаточно будет выполнить одну команду, правда есть одна особенность: все будет работать только для перезагрузки. На данный момент в Linux нет механизма сохраняющего настройки iptables при перезагрузке сети или сервера. Для устранения данного неудобства мы вынесем эти настройки в отдельный скрипт, который запускается при загрузке системы. Для начала создаем файл скрипта:

    Код:
    sudo touch /etc/nat
    Затем открываем его в редакторе Midnight Commander (F4) и вносим следующий текст:

    Код:
    #!/bin/sh
    # Включаем форвардинг пакетов
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # Разрешаем трафик на loopback-интерфейсе
    iptables -A INPUT -i lo -j ACCEPT
    # Разрешаем доступ из внутренней сети наружу
    iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
    # Включаем NAT
    iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE
    # Запрещаем доступ снаружи во внутреннюю сеть
    iptables -A FORWARD -i eth0 -o eth0 -j REJECT
    Внеся вышеуказанные настройки, сохраняем их (F2), а для автоматического запуска скрипта вновь открываем /etc/network/interfaces и в самом конце файла дописываем:

    Код:
    post-up /etc/nat
    Также не забываем дать нашему скрипту права на исполнение:

    Код:
    sudo chmod +x /etc/nat
    Перезапускаем сеть:

    Код:
    sudo /etc/init.d/networking restart
    Если нигде небыли допущены ошибки все будет работать. Для того чтобы проверить работоспособность, на машинах внутренней сети укажем в качестве шлюза и DNS адрес нашего роутера: 10.0.0.1 и пропингуем любой внешний адрес, к примеру один из OpenDNS серверов: 208.67.222.222. Вы, наверное, удивитесь — интернет не работает. Почему? Ведь мы указали наш роутер в качестве DNS сервера, а он пока что таким не является. Конечно, можно прописать DNS на клиентской машине, но если внезапно изменяться DNS сервера? Очень неудобно будет каждый раз бегать их перепрошивать.
    Самым приемлемым решением будет поднять на нашем роутере полноценный DNS сервер, но, как правило, это избыточно, поэтому ограничиваемся простым DNS (а также и DHCP) сервером Dnsmasq.

    Код:
    sudo apt-get install dnsmasq
    После выполнения установки открываем /etc/dnsmasq.conf, находим, раскомментируем и вносим изменения в строку, что разрешает серверу принимать DNS запросы из внутренней сети:

    Код:
    listen-address=127.0.0.1, 10.0.0.1
    Перезапускаем DNS сервер:

    Код:
    sudo /etc/init.d/dnsmasq restart
    После правильного выполнения вышеуказанных настроек на клиентских машинах начнет работать интернет.


    Настраиваем DHCP

    Теперь, когда наш сервер начал работу необходимо настроить клиентские машины. Конечно, все нужные параметры можно прописать вручную, но что делать, если клиентских машин слишком много, и они расположены по всему зданию? В этом случае мы и воспользуемся протоколом DHCP. Он позволяет автоматически получать все, необходимые для корректной работы, сетевые настройки. Ранее установленный Dnsmasq и выступит в качестве DHCP сервера, который очень просто настроить. Для этого открываем /etc/dnsmasq.conf и указываем диапазон выдаваемых адресов (в нашем случае 10.0.0.100-150), сетевую маску и время использования IP адреса:

    Код:
    dhcp-range=10.0.0.100,10.0.0.150,255.255.255.0,12h
    Адреса DNS сервера и шлюза сервер из системных настроек берет автоматически. Затем еще раз перезапускаем Dnsmasq:

    Код:
    sudo /etc/init.d/dnsmasq restart
    После проделанной работы можно выставить на клиенте автоматическое получение IP адреса и убедиться в нормальной работе сервера. Выданные адреса можно посмотреть, выполнив команду:

    Код:
    cat /var/log/syslog | grep DHCPOFFER
    [​IMG]

    Все выданные IP адреса и MAC адреса будут перечислены, с указанием кому они присвоены.

    Настройка кэширующего прокси-сервера Squid.

    В достаточно большой сети некоторая часть трафика повторяется, и часть его иногда достигает 50%. Очень удобно кэшировать часто повторяющиеся запросы, снизив нагрузку на канал, тем самым ускорить выдачу пользователю запрашиваемых страниц и сэкономить входящий трафик. Для выполнения этих задач используем Squid — кэширующий прокси с огромными возможностями.

    Код:
    sudo apt-get install squid
    Устанавливаем прокси-сервер и настраиваем его:

    Код:
    sudo /etc/init.d/squid stop
    Открываем /etc/squid/squid.conf, находим и корректируем следующие строки, не забыв их раскомментировать:
    Указываем порт:
    http_port 3128 transparent
    Выполняем настройки кэша:

    Код:
    cache_dir ufs /var/spool/squid 4096 32 256
    Указываем внутренние сети, лишние комментируем:

    Код:
    acl localnet src 10.0.0.0/24 # RFC1918 possible internal network
    #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
    #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
    Разрешаем доступ из внутренних сетей (найти и раскомментировать):

    Код:
    http_access allow localnet
    Устанавливаем лимит использования памяти:

    Код:
    memory_pools on
    memory_pools_limit 50 MB
    Задаем язык вывода ошибок для пользователя

    Код:
    error_directory /usr/share/squid/errors/Russian-koi8-r
    Важное замечание! В версии Ubuntu 9.10 эта строка может выглядеть так, поэтому рекомендуем проверить правильность пути:

    Код:
    error_directory /usr/share/squid/errors/ru
    Затем сохраняем файл конфигурации. Теперь строим кэш и запускаем:

    Код:
    sudo /usr/sbin/squid -z
    sudo /etc/init.d/squid start
    Для того чтобы проверить настройки на клиентской машине в браузере указываем использование прокси-сервера с адресом 10.0.0.1 и портом 3128 и убеждаемся что все исправно работает.
    Теперь остается только настроить работу прокси-сервера, чтобы http трафик заворачивался на Squid автоматом, без прописывания прокси на клиенте. Для этого следует открыть /etc/nat и дописать в конце строку:

    Код:
    # Заворачиваем http на прокси
    iptables -t nat -A PREROUTING -i eth1 -d ! 10.0.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 10.0.0.1:3128
    Перезапускаем сеть:

    Код:
    sudo /etc/init.d/networking restart
    Все настройки выполнены, и мы можем наслаждаться работой нашего сервера, который позволяет не только организовать общий доступ к сети интернет, но и кэширует http трафик и DNS запросы, а также раздает клиентским машинам для работы в сети необходимые настройки.


    Код:
    [B][COLOR="Blue"](C) http://mannix.ru/ubuntu/nastraivaem-router-na-linux-ubuntu-nat-dhcp-squid.html[/COLOR][/B]
     
    1 человеку нравится это.

Поделиться этой страницей