среда, 13 июня 2012 г.

Простой маршрутизатор на ubuntu 12.04




Доброго всем времени суток.
Сегодня я расскажу вам как можно из старого системного блока сделать полнофункциональный маршрутизатор.
Что нам для этого понадобится:
  • Системный блок с двумя сетевыми картами (достаточно одноядерного, с 256-512мб. памяти на борту, и жестким на 10 Гб.)
  • Коммутатор (в моем случае TP-Link)
  • Установочный диск с ubuntu-server 12.04
  • Наличие подключения к сети интернет.


Начнем мы с того, что установим систему ubuntu server на компьютер предназначенный для создания маршрутизатора. Описывать досконально процесс установки я не буду т.к там нет ничего сложного. Единственное что скажу, так это то что не нужно устанавливать кучу компонентов, достаточно оставить галочку на пункте openSSH. Остальное нам не нужно. Ну по крайней мере в рамках этой статьи.

После окончания установки, нам необходимо настроить доступ в интернет. Если вы получаете все настройки по DHCP то все уже должно было настроится во время установки системы. Если же нет, то настроим все в ручную. Но для начала нам нужно определится с сетевыми интерфейсами. Дело в том что при наличии двух сетевых адаптеров система может по разному расставить порядок интерфейсов. Обычно встроенная в материнскую плату сетевая карта определяется как eth0 а та что стоит в PCI - eth1 соответственно. Но бывает что они меняются местами. Так что будьте внимательны при настройке.
Для того чтобы посмотреть интерфейсы можно воспользоваться командой

ifconfig

Теперь приступим непосредственно к настройке. Для этого нам нужны права суперпользователя. Вводим:

sudo su

Первым делом нужно настроить параметры сети. Для этого воспользуемся утилитой Nano. Вводим команду:

nano /etc/network/interfaces

и приводим конфигурацию примерно в такой вид:

auto lo
iface lo inet loopback

auto eth0 eth1
iface eth0 inet static
address 120.01.12.20                  #Ваш IP адрес (подставить свой)
netmask 255.255.255.0              #Маска сети    (подставить свой)
gateway 
120.01.12.1                 #Адрес шлюза провайдера  (подставить свой)
dns-nameservers 
120.01.12.1    #Предпочтительный DNS сервер (подставить свой)

iface eth1 inet static
address 192.168.0.1                   #Адрес нашей новой сети
netmask 255.255.255.0


Теперь что бы сохранить изменения нажмите Ctrl+o затем нажмите Enter. Для того чтобы выйти из редактора нажмите Ctrl+x. Теперь перезапустим сеть выполнив команду:

/etc/init.d/networking restart

Если вы все прописали правильно, то у вас должен заработать интернет.
Теперь чтобы настроить раздачу интернета в сеть, нам необходимо отредактировать еще несколько файлов. Для этого нам необходимо установить пакет dnsmasq, который является кеширующим DNS сервером. Установка:

apt-get install dnsmasq

После установки, немного отредактируем конфигурации:

nano /etc/dnsmasq.conf

Перед вами откроется файл конфигураций dnsmasq. Стоит обратить внимание что он довольно хорошо документирован, и если вы знаете английский язык, то без труда разберетесь что за что отвечает. Ну это уже по вашему желанию. А пока найдите и раскоментируйте строчку:

#dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h

На этом настройка dnsmasq закончена. Сохраните изменения и закройте файл.
Теперь нам необходимо создать правила по которым будет фильтроваться трафик на сетевых интерфейсах. Для этого создадим файл и отредактируем его так как показано ниже.

nano /usr/local/bin/set_firewall

Перед вами откроется пустой файл. В него нужно прописать следующие параметры:

#!/bin/sh

INET_IFACE="eth0"   #Интерфейс к которому подключен интернет
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward


Сохраните изменения и закройте редактор. Теперь нужно сделать это файл исполняемым. Для этого выполните:

chmod +x /usr/local/bin/set_firewall

Ну вот собственно и все, наш шлюз вполне готов к работе. Но вот есть один нюанс. После каждого перезапуска вам придется в ручную запускать файл set_firewall, и это не совсем правильно. Поэтому лучше будет если все это будет запускаться автоматически. Для этого нам придется еще немного потрудится. 

nano /etc/network/if-up.d/firewall

Впишем путь для запускаемого файла:

#!/bin/sh
/usr/local/bin/set_firewall


Сохраняем изменения и выходим. После этого выполним:

chmod +x /etc/network/if-up.d/firewall

Теперь режим роутера будет запускаться автоматически при запуске сетевых интерфейсов. Чтобы все заработало перезапустите сеть, или просто перезагрузите систему сочетанием клавиш Ctrl+Alt+Del.
После запуска проверяем настройки интерфейсов набрав ifconfig. Если все в порядке, то подключите коммутатор к выходящему сетевому интерфейсу. После этого можете подключать компьютеры к коммуникатору и IP адреса будут раздаваться автоматически а вместе с ним и интернет.  Так же обратите внимание что адреса будут выдаваться в том диапазоне в которые мы указали в dnsmasq. 

В принципе для простой локальной сети всего этого вполне достаточно. Но я хотел бы немного рассказать вам об очень полезном пакете squid который доступен для установки из репозитория ubuntu. И кстати говоря в ubuntu 12.04 пакет называется squid3 в то время как в ubuntu 10.04 просто squid. Для установки выполните:

apt-get install squid3

Для редактирования параметров:

nano /etc/squid3/squid.conf

По своим функциям "Сквид" очень многогранен. С помощью него можно настроить много различных параметров маршрутизации. Например запретить определенным ip выходить в интернет, заблокировать нежелательные сайты и.т.д. Дерзайте.

Спасибо за внимание. Буду рад ответить на ваши вопросы.

5 комментариев:

  1. Анонимный19 июля 2013 г., 18:29

    Как запретить определенным ip выходить в интернет?
    Как заблокировать нежелательные сайты? например vk.com

    ОтветитьУдалить
  2. apt-get install squid3
    sudo nano /etc/squid3/squid.conf
    В блоке acl добавить строчки:

    acl block-site dstdomain vk.com
    http_access deny block-site

    перезапустить сеть.

    ОтветитьУдалить
  3. Здравствуйте Михаил. Уже второй раз настраиваю сервер на ubuntu 12.04 по вашей статье. Почему то через свитч сеть у всех появилась а вот интернета нет. Что я мог сделать не так? У сервака есть интернет. Пинги проходят.

    ОтветитьУдалить
  4. После недолгого поиска нашел я все таки у себя ошибку
    Написал с нулем echo "0" > /proc/sys/net/ipv4/ip_forward
    После этого исправления интернет заработал.

    ОтветитьУдалить