На внешнем интерфейсе 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

sudo nano /etc/nat - создаем файл nat в папке /etc/
в него

#!/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
Настраиваем 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

#Отсекаем запросы нерезолвящиеся запросы
domain-needed
bogus-priv
filterwin2k
#Принимаем запросы на локальном адресе
listen-address=127.0.0.1,192.168.1.1
#Адрес серверов провайдера
server=89.252.34.107
server=89.252.34.110
#Не использовать resolv.conf, там у меня 127.0.0.1 указан, если не запретить читать его, то dnsmasq может
#пытаться сам себе запросы перенаправлять
no-resolv
no-poll
#Диапазон адресов, маска и время аренды адреса
dhcp-range=192.168.1.2,192.168.1.15,255.255.255.0,72h
#Пример статически выдаваемого адреса
dhcp-host=00:13:ce:47:09:0d,192.168.1.17
dhcp-authoritative
cache-size=150
no-negcache
log-queries
log-dhcp

 

Адреса DNS сервера и шлюза сервер из системных настроек берет автоматически. Затем еще раз перезапускаем Dnsmasq:

sudo /etc/init.d/dnsmasq restart

После проделанной работы можно выставить на клиенте автоматическое получение IP адреса и убедиться в нормальной работе сервера. Выданные адреса можно посмотреть, выполнив команду:

выставить на клиенте автоматическое получение IP адреса

cat /var/log/syslog | grep DHCPOFFER

Все выданные 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 запросы, а также раздает клиентским машинам для работы в сети необходимые настройки.

Права на оригинальную статью принадлежат ее автору http://mannix.ru/ubuntu/nastraivaem-router-na-linux-ubuntu-nat-dhcp-squid.html

Добавить комментарий

%d такие блоггеры, как: