Sistema de cache full MIKROTIK com SQUID do LINUX (DEBIAN 4|5)

Iniciado por remontti, 26 de Março , 2009, 04:35:22 PM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

remontti

Bom primeiramente, vou agradecer o Reeves q nessa tarde tava aqui de bobera e me pediu umas parada do mk, q foi então q pensei vou postar essa parada aqui!
A ideia é aseguinte, fazer o mikrotik buscar o cache do servidor linux, e o q ja estiver em cache ele nao  fazer o controle de banda no mikrotik. gostou?
se sua rede wireless (normalmente sao provedores q vao fazer isso) for ruim nem faça isso, pq vai ficar mais ruim, ja pensou o neguinho baixando a velocidade

total da rede?  por isso no meu conf do quid só 50 mb, mas q isso nao gravo em cache. não vou explicar muita coisa vou por mais o os arquivos de

configurações.
Tem duas maneiras, umas o mikrotik busca o cache do linux e nos log pega o ip do mk, e outra o squid pega os ips dos clientes. o segredo ta na hora do nat no

mk, e colocar um rota no linux. Parei de papo furado e vamos logo p/ o q interessa.

INTALANDO SQUID 2.6 + zph Debian 4

No D4 os squid é o 2.6 qual nao possie o patch Zero Penalty Hit (ZPH), vamos ter q compilar o bixinho.
Primeiramente vamos instalar os pacotes p/ nao ter erro na hora da "compilada".

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential libselinux1 \
libselinux1-dev debhelper linuxdoc-tools libcap-dev

cd /usr/src
apt-get source squid
apt-get build-dep squid
wget -c http://zph.bratcheda.org/squid-2.6.STABLE2-ToS_Hit_ToS_Preserve.patch
cd squid-2.6.5
patch -p1 < ../squid-2.6.STABLE2-ToS_Hit_ToS_Preserve.patch
dpkg-buildpackage -rfakeroot -uc -b
cd ..
dpkg -i squid*


Sem muita frescura ja estamos com o squid 2.6 + zph instalado
qualquer dor de cabeça http://zph.bratcheda.org/ e boa sorte!

INTALANDO SQUID 2.7 Debian 5

No D5 nao tem ganho zph ja vem na versao 2.7 do squid e é a padrao na instalcao do squid

apt-get install squid


Feito!

Configurando o squid.conf
Adicione as seguintes linhas no seu conf
Citar
# Para squid 2.6
# MARCAR PACOTES TOS
zph_tos_local 0x30
zph_tos_peer 0
zph_tos_parent off
zph_preserve_miss_tos on

# Para squid 2.7
# MARCAR PACOTES TOS
zph_mode tos
zph_local 0×30
zph_parent 0
zph_option 136

Bom para entender melhor a rede e não fazer nehuma besteira.
Diagamos q eu tenho um Debina configurado da seguinte maneita
Interface eth0:  192.168.0.100 onde busco a net! dã
Interface eth1:  169.254.0.2  essa ligo no Mk (cabo crossover) sempre tem uns expertos q pq linka acha q é lindo e funciona.
Ai vc poderia ter so uma interface, poderia ligar no mikrotik e dar internet p/ ele e depois devolver p/ o mk, mas sei la prefiro com 2 alface mesmo.
E em nosso mk temos a seguinte forma
ether 1 -> internet 192.168.0.200/24
ether 2 -> conexao linux 169.254.0.1/30
ether 3 -> clientes 10.0.0.0/8

Vou por aqui um modelinho de squid.conf q uso no 2.6 transparente

Citar
http_port 3128 transparent

visible_hostname www.seusite.com.br
cache_mgr gerentederedes@seusite.com.br
error_directory /usr/share/squid/errors/Portuguese

cache_mem 8 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 50 MB
minimum_object_size 0 KB
cache_swap_low 80
cache_swap_high 85

cache_dir ufs /var/spool/squid 5000 16 256

access_log /var/log/squid/access.log

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# SEM CACHE
acl NOCACHE url_regex localhost 192.0.0.0/8
no_cache deny NOCACHE

# MARCAR PACOTES MIKROTIK IDENDIFICA
zph_tos_local 0x30
zph_tos_peer 0
zph_tos_parent off
zph_preserve_miss_tos on

#http_access allow all
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

#AQUI VAMOS COLOCAR A CLASSE DOS CLIENTES NO CASO VC QUEIRA PEGAR OS IPS DOS CLIENTES
# OU ENTAO COLOCAMOS O IP DO MK
# CASO PASSE OS IP DOS CLIENTES:
acl mikrotik src 10.0.0.0/255.0.0.0 # USE ESSA!

# CASO PASSE APENAS O IP DO MKIROTIK
acl mikrotik src 169.254.0.1/255.255.255.252 # OU ESSA!
http_access allow mikrotik

http_access allow localhost

# BLOQUEIA O RESTO
http_access deny all

Se vc quer que passe os ips dos clientes (10.x.x.x)
adiciona ai junto com seu firewall, routas, em algum lugar p/ iniciar na incicializacao.
se nao cria um arquivo em /etc/init.d/
Ex:

vim /etc/init.d/inicializar.sh


Nele coloque:
Citar#!/bin/bash
route add -net 10.0.0.0 netmask 255.0.0.0 gw 169.254.0.1

/etc/init.d/
update-rc.d inicializar.sh defaults 80
chmod 755 inicializar.sh


Feito vai iniciar quando ligar. (e ate quando desligar kkk)

Vamos configura o Mikrotik V2 (na 3 é diferente os tos mude p/ 12)

Vamos fazer o direcionamento da porta 80 p/ 3128 não precisa fazer isso no seu firewall do linux. Após vamos marcar os pacotes aquele o q zph marcou, e

depois uma queue dizendo p/ ele libera para o cliente sem o controle da sua queue simples.
/ ip firewall nat
add chain=dstnat src-address=10.0.0.0/8 protocol=tcp dst-port=80 action=dst-nat to-addresses=169.254.0.2 to-ports=3128 \
comment="Direciona para Proxy" disabled=no


/ ip firewall mangle
add chain=postrouting protocol=tcp src-port=3128 tos=48 action=mark-connection new-connection-mark=n-cache passthrough=yes \
comment="Marca o com e sem TOS" disabled=no

add chain=postrouting protocol=tcp src-port=3128 tos=!48 action=mark-connection new-connection-mark=s-cache \
passthrough=yes comment="" disabled=no

add chain=postrouting connection-mark=n-cache action=mark-packet new-packet-mark=Cache-Packet passthrough=no \
comment="Libera cache full" disabled=no


/ queue type
add name="cache" kind=pcq pcq-rate=4800000 pcq-limit=50 pcq-classifier=dst-address pcq-total-limit=2000

/ queue tree
add name="CACHE-FULL" parent=global-out packet-mark=Cache-Packet limit-at=0 queue=cache priority=8 max-limit=0 \
burst-limit=0 burst-threshold=0 burst-time=0s disabled=no


Feito? Nemmmmmmmmm...
E a conectividade social, e o banco do brasil, e o bradesco que nao ta funcionando?
ahhhhhhhhhhhh meu Deooos!!!! O q eu faço?
Ja vi tanto lokinho mandando tirar o direcionamento do proxy p/ determinado cliente, ou colocar ele em outra classe....
Bom acho q essa config no mk vai te deixar mais tranquilo. (coloque elas antes de todas as regras)

/ ip firewall nat
add chain=dstnat dst-address=200.201.166.0/24 protocol=tcp dst-port=80 action=accept comment="CONECTIVIDADE SOCIAL" disabled=no
add chain=dstnat dst-address=200.201.173.0/24 protocol=tcp dst-port=80 action=accept comment="" disabled=no
add chain=dstnat dst-address=200.201.174.0/24 protocol=tcp dst-port=80 action=accept comment="" disabled=no

add chain=dstnat dst-address=200.219.137.0/24 protocol=tcp dst-port=80 action=accept comment="IPS NAVEGAM SEM PROXY" disabled=no
add chain=dstnat dst-address=200.252.8.0/24 protocol=tcp dst-port=80 action=accept comment="" disabled=no
add chain=dstnat dst-address=201.2.207.0/24 protocol=tcp dst-port=80 action=accept comment="" disabled=no
add chain=dstnat dst-address=200.196.226.0/24 protocol=tcp dst-port=80 action=accept comment="" disabled=no
add chain=dstnat dst-address=201.24.72.0/24 protocol=tcp dst-port=80 action=accept comment="" disabled=no
add chain=dstnat dst-address=78.46.46.139 protocol=tcp dst-port=80 action=accept comment="" disabled=no
add chain=dstnat dst-address=192.168.0.0/24 protocol=tcp dst-port=80 action=accept comment="" disabled=no
add chain=dstnat dst-address=10.0.0.0/8 protocol=tcp dst-port=80 action=accept comment="" disabled=no

Agora quando alguem precisar navegar em um site q nao passe pelo proxy, da um crtl + c e crtl + v!
Não esqueça de colocar elas antes de todas as regras.

Lindo, maravilhor!!!
NÃO!

Vc acha q se sua maquina for ruim e vc tiver um monte de requisicao vai funcionar quanto tempo???
Então coloque no minimo 3 GB de memoria, e tenha um processador q preste.
Mesmo assim vai durar 1 dia no maximo e vai travar se vc não limpar a memoria.
Limpar a memória?! Sim limpa ela, agua e sabao em pó, e deixa bem limpinho! AIUhAIUA
tah tah to brincando... desculpa!

Vamos criar um arquivinho p/ checar nossa memoria e limpar ela.

cd /etc/init.d/
vim limpamemoria.sh


Citar#!/bin/sh
PATH="/bin:/usr/bin:/usr/local/bin"

# Porcentagem maxima (mude se vc achar q deve) eu deixo em 85%
percent=85

# Total da memoria:
ramtotal=`grep -F "MemTotal:" < /proc/meminfo | awk '{print $2}'`
# Memoria livre:
ramlivre=`grep -F "MemFree:" < /proc/meminfo | awk '{print $2}'`

# RAM utilizada pelo sistema:
ramusada=`expr $ramtotal - $ramlivre`

# Porcentagem de RAM utilizada pelo sistema:
putil=`expr $ramusada \* 100 / $ramtotal`

echo =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
date
echo
echo "Mem. utilizada: $putil %";

if [ $putil -gt $percent ]
then
   date=`date`
   echo $date >> /var/log/memoria.log
   echo "Mem. utilizada: $putil %" >> /var/log/memoria.log

   echo "Memoria acima de $percent %, cache foi limpado!";
   sync
   # 'Dropando' cache:
   echo 3 > /proc/sys/vm/drop_caches
   echo
    free -m
   echo
echo =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
else
    echo "Cache nao foi limpado!";
echo =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    unset percent ramtotal ramlivre ramusada putil
    exit $?
fi


Gostou? obrigado! fui em q fiz, um dia q tava cansado de ficar difiganto free -m hahahah ou olhando o phpsyinfo
mas se vc quiser limpar o comando é esse: echo 3 > /proc/sys/vm/drop_caches
cada vez q ele limpar vai gerar um log em var/log/memoria.log
bom..
chmod 755 limpamemoria.sh

agora adicione no cron para rodar a cada 30 min

vim /etc/crontab
Citar00-59/30  *   * * *   root   /etc/init.d/limpamemoria.sh

Mistura tudo bate com dois ovos de galinha caipira. Leve ao forno e deixe por 40 min.
Sirva-se!



Reeves

huaUhaHuaUHaUHuhahaua

muito bom!
vlww!

sempre bem-vindo remontti   o/
  °vº   NÃO USE DROGAS,
/(_)\  USE GNU/LINUX
^ ^

danusio

Amigo, por qual motivo foi necessario utilizar 3 interfaces no mikrotik?, meu interesse é pegar os ips dos clientes, isso funciona com o mikrotik estando configurando como hotspot?

spl0w

danusio:

1|Internet -------Mikrotik -------- 2|Debian
                         |
                         |
                        3|Lan

1 - Entrada de Link;
2 - Conexão do Mikrotik com Debian em PARALELO, em redes distintas;
3 - Rede Cliente

[ ]'s  8)
Unix é para poucos
FreeBSD User.