Jump to content

squid+nat


Recommended Posts

Привіт.

 

Раніше всіх пускав через сквід (бо обмежував по швидкості деяких юзерів). Працював непогано, але одна проблема - сквід дає тільки веб серфінг, тобто всякі донкі, емуле, thebat не працюють.

 

Потім підняв нат, все почало працювати (emule, thebat....). Але знов проблема - коли юзери забирають настройки проксі сервера, то вони валять на всій швидкості.

 

Покашо бачу одни вихід - поставити cbq, але тоді втрачаю класні можливості сквіда (кешуваня - шо зменшує наватнаженя каналу, і можливість завантажувати на повній швидкості сторінки які важать до встановленого числа Кб (напр. до 40Кб) )

 

Підкажіть як обєднати нат і сквід.

 

Дякую.

Link to post
Share on other sites

Вот пример

IP сервера 192,168,0,1

Реальный IP от провайдера 202.45.23.78

IP- юзера 192,168,0,2

тогда для коннекта юзера нужен такой скрипт

iptables -A FORWARD -s 192,168,0,2 -j ACCEPT

iptables -A FORWARD -d 192,168,0,2 -j ACCEPT

iptables -t nat -I POSTROUTING 1 -s 192,168,0,2 -j SNAT --to-source 202,45,23,78

iptables -t nat -I INPUT 1 -s 192,168,0,2 -d ! 192.168.0.0/24 -p tcp --dport 80 -j DNAT --to 192,168,0,1:3128

 

для дисконнекта

iptables -D FORWARD -s 192,168,0,2 -j ACCEPT

iptables -D FORWARD -d 192,168,0,2 -j ACCEPT

iptables -t nat -D POSTROUTING 1 -s 192,168,0,2 -j SNAT --to-source 202,45,23,78

iptables -t nat -D INPUT 1 -s 192,168,0,2 -d ! 192.168.0.0/24 -p tcp --dport 80 -j DNAT --to 192,168,0,1:3128

 

но в фаерволе нужно прописать

iptables -F

iptables -t nat -F

iptables -t mangle -F

 

iptables -P FORWARD DROP

iptables -t mangle -A PREROUTING -d 192.168.0.1 -p tcp --dport 3128 -j DROP

/sbin/iptables -F; iptables -t nat -F; iptables -t mangle -F

/sbin/iptables -t filter -P FORWARD DROP

Link to post
Share on other sites

тогда для коннекта юзера нужен такой скрипт

iptables -A FORWARD -s 192,168,0,2 -j ACCEPT

iptables -A FORWARD -d 192,168,0,2 -j ACCEPT

iptables -t nat -I POSTROUTING 1 -s 192,168,0,2 -j SNAT --to-source 202,45,23,78

iptables -t nat -I INPUT 1 -s 192,168,0,2 -d ! 192.168.0.0/24 -p tcp --dport 80 -j DNAT --to 192,168,0,1:3128

В таблиці NAT нема chain INPUT.

Там тільки PREROUTING, OUTPUT, POSTROUTING.

Link to post
Share on other sites
Guest Вадим

Привіт! Було б не погано якби ще хтось написав для мене такі ж правила тільки для FreeBSD. Буду дуже вдячний!

Link to post
Share on other sites

тогда для коннекта юзера нужен такой скрипт

iptables -A FORWARD -s 192,168,0,2 -j ACCEPT

iptables -A FORWARD -d 192,168,0,2 -j ACCEPT

iptables -t nat -I POSTROUTING 1 -s 192,168,0,2 -j SNAT --to-source 202,45,23,78

iptables -t nat -I INPUT 1 -s 192,168,0,2 -d ! 192.168.0.0/24 -p tcp --dport 80 -j DNAT --to 192,168,0,1:3128

В таблиці NAT нема chain INPUT.

Там тільки PREROUTING, OUTPUT, POSTROUTING.

Пакеты идут через шлюз двумя путями

1- через цепочку FORWARD - ТРАНЗИТНЫЕ

2- через локальные приложения в том числе и Squid цепочка INPUT

т.е. для того чтобы обединить NAT и Squid нужно учитывать что трафик будет протекать по двум ветвям по одной - это FORWARD по другой это INPUT - входящие пакеты в Squid. если написать так

iptables -t nat -I PREROUTING 1 -s 192,168,0,2 -d ! 192.168.0.0/24 -p tcp --dport 80 -j DNAT --to 192,168,0,1:3128

ТО ВЫЛАЗИТ СТРАННЫЙ ГЛЮК - при выполнение дисконнекта остаются незавершенные связи с чем я уже сталкивался. Например идет закачка с помощью FlashGat, выполняется дисконнект но закачка продолжается. на сайт вылезтия нельзя аска не работает, но FlashGat, еслия не обрывается связь докачивает файл до конца или до первого обрыва. поэтому лучше использовать

iptables -t nat -I INPUT 1 -s 192,168,0,2 -d ! 192.168.0.0/24 -p tcp --dport 80 -j DNAT --to 192,168,0,1:3128

что сразу же перестает пускать пакеты с Squid.

см доку. http://www.opennet.ru/docs/RUS/iptables/index.html

Link to post
Share on other sites

/etc/rc.conf

====

firewall_enable="YES"

firewall_logging="YES"

firewall_quiet="YES"

firewall_script="/usr/local/etc/ipfw/ipfw.conf"

natd_enable="YES"

natd_flags="-f /usr/local/etc/natd.conf -a <внешний ip адрес> -p 8668"

====

/usr/local/etc/natd.conf

====

use_sockets yes

same_ports yes

====

/usr/local/etc/ipfw/ipfw.conf

====

#!/bin/sh

# Firewall rulese

fwcmd="/sbin/ipfw"

$fwcmd -f flush

 

$fwcmd add 100 divert 8668 ip from 192.168.222.0/24 to any via <внешний ip адрес>

$fwcmd add 200 divert 8668 ip from 192.168.227.0/24 to any via <внешний ip адрес>

$fwcmd add 210 divert 8668 ip from 172.16.16.0/24 to any via <внешний ip адрес>

$fwcmd add 300 divert 8668 ip from any to <внешний ip адрес> in recv <внешний ip адрес>

 

дальше правила по вкусу

Link to post
Share on other sites

забыл про сквид

вот для сквида

$fwcmd add fwd <ip адрес squid>,3128 tcp from 192.168.222.0/24 to any 80 recv rl0 in

$fwcmd add fwd <ip адрес squid>,3128 tcp from 192.168.225.0/24 to any 80 recv ed0 in

$fwcmd add fwd <ip адрес squid>,2121 tcp from 192.168.222.0/24 to any 21 recv rl0 in

$fwcmd add fwd <ip адрес squid>,2121 tcp from 192.168.225.0/24 to any 21 recv ed0 in

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...