//:
вы читаете...
Ubuntu Server 10.04

Прозрачный прокси Squid+DNS+DHCP на Ubuntu Server 10.04

Всем привет. Данная статья существует во многих вариантах. Я не буду писать о том как и когда мне это понадобилось а о том как создать простой Server Router (так мы и будем его называть). Например необходимо создать сервер который должен раздавать интернет по сети и всевозможные настройки, но при этом нам не бегать и не производить ни каких настроек на пользовательских компьютерах (User 1-4). И управлять на расстоянии (на любом компьютере который находится в одной сети). Предположим  что интернет у нас будет браться из ADSL модема и настроенного в режиме роутера. Показано на схеме:

И так  нам понадобится установленный дистрибутив Ubuntu Server 10.04 или выше. Две установленные сетевые карты или задействовать уже интегрированные сетевые разъёмы. Включаем наш будущий сервер.Вводим наш логин и пароль (ПАРОЛЬ ПРИ ВВОДЕ НЕ ВИДНО). Получаем права суперпользователя ROOT получить можно 2 способами:

sudo su

Даёт права суперпользователя только на одну сессию, или

sudo passwd root

Активирует суперпользователя (нужно будет указать желаемый нам пароль). Но сидеть под ROOT я бы вам не советовал по разным причинам. Для того чтобы нам можно было настраивать наш сервер удалённо, нужно установить такой замечательный сервис как  SSH

Установка SSH сервера и настройка:

apt-get install ssh

теперь можно устанавливать на удалённой машине клиент SSH, например PuTTY и управлять нашим сервером. Как настроить SSH сервер и как работать с PuTTY ознакомьтесь здесь

Настраиваем сеть:

Так как мы будем брать интернет из ADSL модема подключённого в режиме роутера к нашему серверу, модем должен иметь IP адрес. IP адрес нашего модема 192.168.0.1 и он же будет являться шлюзом на сетевом интерфейсе (сетевая карта) eth0. А интернет в сеть уходить у нас будет по сетевому интерфейсу eth1 и иметь сетевой IP адрес 10.0.0.1. И так чтобы всё это организовать нам потребуется сначала настроить эти самые интерфейсы. Настройки интерфейсов хранятся по адресу /etc/network/interfaces чтобы нам отредактировать этот конфигурационный файл сокр.конфиг. Нам нужно открыть это в редакторе NANO (это стандартный редактор) набрать следующую команду:

nano /etc/network/interfaces

Увидим следующую картитну

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

Теперь нам нужно дописать следуещее:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.0.2
        netmask 255.255.255.0
        gateway 192.168.0.1

этот символ # означает комментарий и никаких действий c этой строкой не произойдёт, так как вначале перед условием стоит решётка. Когда говорят снять комментарий это означает что надо просто удалить символ # а если говорится нужно закомментировать то надо наоборот поставить #

auto eth0 говорит о том что наш интерфейс eth0 (смотрит в сторону модема ADSL) включается вместе с загрузкой системы.

address 192.168.0.2 — это IP адрес интерфейса eth0

netmask 255.255.255.0 — это маска подсети.

 Например, узел с IP-адресом 192.168.0.1 и маской подсети 255.255.255.0 находится в сети 192.168.0.0/24. Это означает что в этой подсети IP адреса могут быть такого диапазона 192.168.0.0-254. Смотрите ниже схему

gateway 192.168.0.1 — это шлюз а точнее откуда будет браться интернет.

Должно выглядеть вот так

auto eth0
   iface eth0 inet static
     address 192.168.0.2
     netmask 255.255.255.0
     gateway 192.168.0.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 серверов, я вам советую прописать адреса провайдера в моём случае это первичный 46.42.0.65 и вторичный 46.42.4.65. Внимание!!!! Ваши DNS сервера должны соответствовать адресам которые выдал провайдер

# IP адреса DNS серверов вашего провайдера
 nameserver 46.42.0.65
 nameserver 46.42.4.65

Сохраняемся Ctrl + O и выходим Ctrl +x

После этого нужно перезагрузить сеть следующей командой:

/etc/init.d/networking restart

Далее обновляем список доступных нам пакетов следующей командой

apt-get update

Сразу обновим все пакеты:

sudo apt-get upgrade

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

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

sudo touch /etc/nat

После того как создали файл откроем его в редакторе Nano

 nano  /etc/nat
#!/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 -m state --state ESTABLISHED,RELATED -j ACCEPT

 # Запрещаем доступ снаружи во внутреннюю сеть
 iptables -A FORWARD -i eth0 -o eth1 -j REJECT

Сохраняемся Ctrl + O и выходим Ctrl + X

Чтобы наш созданный скрипт загружался автоматически нужно его прописать в интерфейсах. Открываем конфиг /etc/network/interfaces и в самый конец дописывем следующее

post-up /etc/nat

И даём ему разрешение на автоматический запуск командой:

sudo chmod +x /etc/nat

Снова перезапускаем сеть:

/etc/init.d/networking restart

По сути сеть настроена и интернет будет работать, но после того как мы в настройках клиентской машины укажем в качестве Шлюза и DNS сервера адрес нашего СерверРоутера: IP 10.0.0.1

Но это нам не подходит так как мы не хотим бегать по клиентским машинам и прописывать адреса (я это до ужаса как не люблю).

Чтобы избежать этих трудностей нам нужно поднять DNS сервер на нашем СерверРоутере. Мы чуток сделаем по другому и настроим кэширующий DNS в паре с DHCP сервером. Всё это вместе имеет такой пакет как Dnsmasq.  Чтобы это сделать пишем следующую команду:

apt-get install dnsmasq

И так наш пакет благополучно установился. И сразу же его открываем

nano /etc/dnsmasq.conf

Чтобы наш DNS сервер принимал запросы из сети нужно найти указанную  строку и раскомментировать её а точнее убрать этот символ # Для удобства рекомендую пользоваться поиском, командой Ctrl + W

listen-address=127.0.0.1, 10.0.0.1

Сохраняемся и выходим. Перезапускаем наш DNS сервер

/etc/init.d/dnsmasq restart

После всех этих манипуляций должен появиться интернет. Но нам и этого мало. Так как мы хотим минимум настроек на клиентских машинах нужно настроить DHCP сервер который установился вместе с DNS сервером.

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

Настраиваем снова этот конфиг /etc/dnsmasq.conf и ищем следующую строку и указываем в ней желаемый пул адресов а точнее какой диапозон IP адресов он будет выдавать нуждающимся клиентам. Просто напросто первый IP номер означает с какого начинать раздачу а второй предел выдачи. Например поставили новый компьютер (клиент) и подключили кабель к сетевой карте, в этот самый момент если в настройках сетевухи стоит отметка о автоматическом запросе настроек, наш клиент запрашивает у ближайшего DHCP сервера свободный IP адрес,  тот в свою очередь проверяет правила и условия прописанные в конфиге /etc/dnsmasq.conf

Если правила соответствуют по отношению к запросу клиента то он выдаёт ему свободный IP, Шлюз и DNS сервера. 12h означает на какое время выдаётся IP адрес.

dhcp-range=10.0.0.100,10.0.0.150,255.255.255.0,12h

Теперь нужно перезагрузить Dnsmasq

/etc/init.d/dnsmasq restart

А следующей командой мы можем посмотреть кому наш DHCP сервер выдал IP адреса

cat /var/log/syslog | grep DHCPOFFER

Дальше мы сделаем прокси сервер с функцией кэширования. Это нужно для того чтобы часто запрашиваемые ресурсы каждый раз по новой не шли через наш интернет-канал а оставался в виде кэша на самом сервере и по последующем запросе этого ресурса трафик не закачивался снова из интернета а брался уже из кэша который хранится на нашем сервере.

Создаём кэширующий прокси-сервер Squid

И так приступим к установке нашего кэширующего прокси-сервера SQUID

apt-get install squid

Приостановим прокси

/etc/init.d/squid stop

Открываем конфиг и редактируем его. Нужно раскомментировать указанные строки

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

Включаем кэш и задаём лимит (Вам советую установить 50 МВ)

 memory_pools on
 memory_pools_limit 300 MB

Вывод ошибок делаем на Кириллице

error_directory /usr/share/squid/errors/Russian-koi8-r

Всё это дело сохраняем Ctrl + O и выходим Ctrl + X

Создадим кэш

sudo /usr/sbin/squid -z

И запускаем

sudo /etc/init.d/squid start

В принципе всё готово но для удобства чтобы не прописывать на клиентских машинах IP адрес и порт нашего сервера мы сделаем его прозрачным а точнее чтобы весь трафик заворачивался автоматически без прописывания прокси. Открываем в Nano /etc/nat

 # Делаем прозрачный прокси
 iptables -t nat -A PREROUTING -i eth1 -d ! 10.0.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --t o 10.0.0.1:3128

Чтоб всё это заработало перезапускаем наши интерфейсы (сеть)

sudo /etc/init.d/networking restart

И вуоля всё работает! Если это не так значит вы допустили где то ошибку.

И так, что мы имеем? А мы имеем сервер который раздает интернет в сеть при этом сам указывает IP адрес, шлюз, DNS сервер и при этом весь трафик заворачивает на 80 и 8080 порты.

Обсуждение

Один ответ на “Прозрачный прокси Squid+DNS+DHCP на Ubuntu Server 10.04

  1. Добрый день.
    А правила запрета определённых сайтом можно прописать или они в прозрачном прокси не работают?

    Posted by Maks | 23/05/2013, 07:32
  2. а как теперь ограничить некоторым или всем пользователям доступ например к одноклассникам или VK ?
    если используем DHCP то как теперь этих пользователей идентифицировать ?

    Posted by Евгений | 26/06/2013, 14:43
  3. Здравствуйте,не могли бы Вы написать статью,о том,что должно входить в состав роутера (какие программы),если делать его на основе ПС и одного из миниобразов Убунты/Дебиана.
    Есть желание сделать роутер,но что в него доставить и как это настроить не понятно.Например у меня пока АДСЛ соединение.Хочу чтобы интернет входил в ПС роутер через модем настроенный бриджем.А дальше всем уже будет рулить этот ПС роутер.
    Пока понял, что нужно поставить (чтобы роутер был универсальным) DNS,DHCP,NAt,VPN,SMB,NFS,FTP,Torrent .

    Posted by Denis | 27/04/2014, 12:34
  4. # Делаем прозрачный прокси
    iptables -t nat -A PREROUTING -i eth1 -d ! 10.0.0.0/24 -p tcp -m multiport —dport 80,8080 -j DNAT —t o 10.0.0.1:3128
    У меня на это выдает: Bad argument `10.0.0.0./24`

    Posted by Seal | 28/09/2014, 15:19
  5. squid guard -им можно ограничивать доступ

    Posted by Leo | 17/12/2015, 21:38

Оставьте комментарий