Ubuntu NAT + DHCP + Squid Прозрачный кэширующий proxy-server

В этой статье поднимем сервер позволяющий использовать общий доступ в интернет для сети организации. Для этого я буду использовать Ubuntu Server 12.04. В данном случае я рассмотрю настройку прозрачной маршрутизации с использованием одного сетевого интерфейса на маршрутизаторе. Для достижения наших целей я использую iptables, dnsmasq и Прокси-Сервер SQUID.

Для начала введем в консоль команду

Ifconfig

Из ответа сервера видно, что у меня есть только один сетевой интерфейс eth0. Он подключен к общему свитчу и имеет адрес 192.168.1.253.

ifconfig

Для того что бы настроить сетевые интерфейсы отредактируем файл /etc/network/interfaces

Я редактировал в mc
sudo apt-get install mc
но можно в nano
sudo nano /etc/network/interfaces

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 eth0
iface lo inet loopback

# The primary network interface
iface eth0 inet static
address 192.168.1.253
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 8.8.8.8 4.4.4.4

post-up /etc/nat

где:
address – адрес вашего сетевого интерфейса (У меня это 192.168.1.253)
netmask – маска сети (У меня 255.255.255.0)
network – адрес сети (Мой 192.168.1.0)
broadcast – броадкаст адрес сети (У меня 192.168.1.255)
gateway – шлюз через который этот компьютер выходит в интернет (Мой 192.168.1.1)
dns -nameservers – адрес DNS серверов (Для моего сервера это  8.8.8.8 4.4.4.4)

Сеть у нас выглядит следующим образом:
nwork
То есть сервер на данный момент имеет доступ в интернет. Теперь раздадим его для компьютеров в локальной сети.

Настройка NAT

Для начала нужно создать сам файл с настройками NAT. В принципе расположение файла не имеет значения. Если хотите, можете его расположить в любой директории вашего сервера. Но удобнее когда все файлы конфигурации лежат в одном месте.
sudo touch /etc/nat
Открываем его и прописываем туда
#!/bin/sh
# При использовании одного сетевого интерфейса eth0 для доступа в локальную сеть и интернет.
# Включаем пересылку пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward
# Разрешим проход трафика на loopback-интерфейсе
iptables -A INPUT -i lo -j ACCEPT
# Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i eth0 -o eth0 -j ACCEPT
# Включаем NAT. Замените 192.168.1.0 на адрес своей сети
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE
#Заворачиваем порты 80 и 8080 на порт SQUID 3128
iptables -t nat -A PREROUTING -i eth0 ! -d 192.168.1.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.1.253:3128

Так как настройки iptables не сохраняются после перезагрузки системы , поэтому сделаем наш скрипт исполняемым:
sudo chmod +x /etc/nat
И добавим его в конец файла /etc/network/interfaces добавив туда вот такую инструкцию:
post-up /etc/nat
И перезапускаем сеть:
sudo /etc/init.d/networking restart

Установка Dnsmasq

Для установки пакета выполним команду:
sudo apt-get install dnsmasq
Теперь нужно что бы наш DNS принимал DNS запросы из внутренней сети предприятия. Для этого откроем /etc/dnsmasq.conf. Найдем в нем строку
#listen-address=
И заменим ее на:
listen-address=127.0.0.1, 192.168.1.253 #Указав адрес интерфейса смотрящего в локальную сеть.
Сохраняем изменения и перезапускаем наш DNS:
sudo /etc/init.d/dnsmasq restart
Для того что бы у пользователей появился интернет достаточно в настройках их подключения к локальной сети указать Шлюз: IP — адрес вашего сервера, DNS — адрес вашего сервера. Но ходить на каждый компьютер не удобно, по этому настроим DHCP сервер для автоматической раздачи настроек Вашей локальной сети.

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

На самом деле мы уже установили DHCP сервер в составе пакета dnsmasq. Теперь его осталось только настроить. Снова открываем /etc/dnsmasq.conf, и находим там строку
# dhcp-range=192.168.0.50,192.168.0.150,12h
Заменим эту строку вот такой (Укажем диапазон раздаваемых адресов от 192.168.1.2 до 192.168.1.100 Маска подсети 255.255.255.0 Для Вашей сети установите свой диапазон адресов.)
dhcp-range=192.168.1.2,192.168.1.100,255.255.255.0,12h

Адреса DNS сервера и шлюза будут подставлены автоматически из системных настроек вашего сервера. Перезапустим dnsmasq:
sudo /etc/init.d/dnsmasq restart
Теперь Ваш сервер не только раздает интернет для локальной сети, но и раздает IP адреса и настройки сети, теперь достаточно подключить новую машину в сеть и она будет иметь доступ в интернет без настроек вручную.

Кэширующий прокси-сервер Squid

Теперь установим прокси-сервер SQUID. Для чего это нужно? SQUID — это кэширующий прокси сервер, он позволит снизить долю потребляемого трафика для клиентов Вашей локальной сети. Мы не будем создавать ограничения для пользователей или запрещать кому-либо доступ.
Установим сам SQUID командой:
sudo apt-get install squid
и тут же его остановим
sudo /etc/init.d/squid3 stop
Для настройки SQUID отредактируем его конфигурационный файл /etc/squid3/squid.conf
Найдите строку
#http_port 3128
И измените ее на:
http_port 3128 transparent
теперь ищем строку
# cache_dir ufs /var/spool/squid 100 16 256
И меняем ее на:
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

Так как тут нет нашей сети, мы можем создать новую строку, либо раскомментировать и изменить уже существующую. Для начала закомментируем уже существующие строки поставив знак # перед ними. Теперь создадим вот такую строку:
acl localnet src 192.168.1.0/24
Теперь нужно разрешить доступ к прокси SQUID из нашей локальной сети. Найдите строку и раскомментируйте или допишите в случае ее отсутствия:
http_access allow localnet
Заодно чуть ниже проверьте, что бы строка http_access deny all была закомментирована. Иначе может случится так что вообще никто не будет иметь доступа к Вашему SQUID.

Снимем комментарии со строк:
memory_pools on
memory_pools_limit 50 MB

Эти строки определяют лимит использования памяти сервером SQUID.
Сохраняем конфигурационный файл и выходим из редактора. Теперь нужно построить кэш для SQUID сервера. Введите команду:
sudo /usr/sbin/squid3 –z
Теперь запустим наш прокси-сервер SQUID:
sudo /etc/init.d/squid3 start
Теперь Ваш сервер готов.

Примечание! Для того что бы посмотреть список адресов выданных Ваши DHCP сервером можно использовать команду:
cat /var/log/syslog | grep DHCPOFFER

Статья переписана по мотивам статьи MelfisFettel


Вы можете оставить комментарий, или ссылку на Ваш сайт.