суббота, 19 апреля 2008 г.

Простой DHCP-сервер + прозрачный прокси на Squid

Для начала опишу ситуацию, почему я установил у себя на компьютере связку dhcp-сервера и прозрачного прокси на squid. Все дело в том, что мне частенько приходится дома работать с несколькими компьютерами одновременно (что-нить настроить и т.п.), но постоянно каждому компьютеру прописывать ручками ip, а так же прописывать настройки прокси очень не удобно, можешь забыть, что ты уже использовал какой-то ip - поэтому и получаешь конфликты ip-адресов.
Хочу сразу предупредить, что описал лишь только те параметры конфигурационных файлов, которые необходимы для простой работы dhcp-сервера и прокси Squid. Так как этих параметров уйма, предлагаю вам самим с ними поразбираться, а не упрекать меня в том, что я что-то не описал.

Установка DHCP-сервера

1. Устанавливаем dnsmasq
$
sudo apt-get install dnsmasq

2. Редактируем файл /etc/dnsmasq.conf
$
sudo nano /etc/dnsmasq.conf

3. Ищем закомментированную строку (что то вроде этого):
#interface=eth0
и раскомментируем ее
interface=eth0
при этом не забываем поменять название сетевой карты - eth0 на название вашей сетевой карты, к которой будут конектиться другие компьютеры из вашей сети.
4. Дальше, в этом же файле, раскомментируем или добавляем свою строку: dhcp-range= . К примеру, вот как она выглядит у меня:
dhcp-range=192.168.0.2,192.168.0.15,12h
данная запись означает, что всем компьютерам подключающимся к моей сети, будут автоматически выдаваться ip-адреса, c 192.168.0.2 по 192.168.0.15. И аренда этих адресов будет составлять 12 часов.
5. Перезапускаем сервис dnsmasq:
$
sudo /etc/init.d/dnsmasq restart

6. Подключаем в сеть какой-нить компьютер, при этом не забываем поставить ему в сетевых настройках, получение ip-адреса автоматически. Если все верно - то компьютеру присвоится ip-адрес из заданного нами в настройках диапазона.

Установка прозрачного прокси.

1. Устанавливаем squid (и если потребуется, другие нужные пакеты, которые он запросит автоматически):
$
sudo apt-get install squid

2. Редактируем файл настроек squid:
$
sudo nano /etc/squid/squid.conf

3. Ищем параметр http_port , и выставляем ему следующее значение (к примеру, как у меня):
http_port 3128 transparent
ключевое слово здесь - это transparent, в результате его мы и получим "прозрачный" прокси. А 3128 - это порт для протокола http.
4. В этом же файле ищем параметр visible_hostname и выставляем ему следующее значение:
visible_hostname (название прокси)
где (название прокси) - можете заменить на любое слово или словосочетание. Если вы не заполните данный параметр - squid будет очень сильно ругаться ))
5. Ищем дальше. Теперь ищем параметр acl our_networks заменяем его на такие строки (вот как к примеру у меня):
acl our_networks src 192.168.0.0/255.255.0.0
http_access allow our_networks

Данными строками мы разрешили доступ к прокси для компьютеров из нашей сети 192.168.0.0
Проверяем настройки сквида
cat /etc/squid/squid.conf | sed '/ *#/d; /^ *$/d'


6. Перезапускаем сервис squid:
$
sudo /etc/init.d/squid restart

7. Ну и наконец-то завершающий аккорд. Добавим правило перенаправления портов в наш файервол.
$
sudo iptables -t nat -A PREROUTING -i eth0 -d ! 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.1:3128

8. Теперь компьютеры в вашей сети смогут выходить в интернет через ваш "прозрачный" прокси, при этом нам нигде не надо прописывать настройки прокси вручную !! Все работает автоматом.

P.S. Чтобы снова, при каждом включении компьютера, не запускать по новой правило для файервола, проделываем следующее:
1. Запускаем правило для файервола:
$
sudo iptables -t nat -A PREROUTING -i eth0 -d ! 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.1:3128

2. Сохраняем список всех правил файервола в файл:
$
iptables-save /etc/iptables.rules

3. Редактируем файл /etc/network/interfaces
$
sudo nano /etc/network/interfaces

и после блока про сетевую карту eth0 (к примеру, у меня так), вставляем строку
pre-up iptables-restore < /etc/iptables.rules

Вот собственно и все ))


1 комментарий:

MaxJet комментирует...

Помогите пожалуйста.
Сделал все по описанию, а клиенты конектятся только с настройкой порта прокси, прозрачный не получатся в чем беда.
iptables:
# Generated by iptables-save v1.3.6 on Tue May 6 21:41:41 2008
*nat
:PREROUTING ACCEPT [192:11576]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [6:361]
-A PREROUTING -d ! 192.168.0.0/255.255.255.0 -i eth1 -p tcp -m multiport --dports 80,8080 -j DNAT --to-destination 192.168.0.4:3128
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Tue May 6 21:41:41 2008

В конфиге squid'а поставил,
HTTP_port 3128 transparent

заранее благодарен!
Ответ можно присылать на e mail: maxjet@yandex.ru