1

Знаю, что по теме в интернете масса информации, но никак не получается сделать.

Есть сервер  смотрящий одним интерфейсом в локалку (eth0) а вторым в инет (eth1).
Есть squid на другом сервере, если в браузере прописать настройки то squid отлично работает.
Задача сделать прозрачное проксирование.

На сервере раздающем интернет, выполняю:
iptables -t nat -A PREROUTING -s адрес_клиента -p tcp --dport 80 -j DNAT --to ip_адрес_сквида:8080
iptables -t nat -A POSTROUTING -p tcp --dport 80 -d ip_адрес_сквида -j SNAT --to ip_адрес_текущего_сервера

Но при попытке зайти на какой-либо сайт, ничего не открывается.

# cat /proc/sys/net/ipv4/ip_forward
# 1


На что еще можно обратить внимание или проверить?

2

вот мой (дальше сам разберёшься)
-A PREROUTING -i eth1 -s 192.168.1.0/255.255.254.0 -p tcp --dport 80 -j DNAT --to 192.168.1.254:3128
надеюсь сам сквид ты сделал прозрачным.

3

В squid.conf прописал:
http_port 8080 transparent

При прописанных выше правилах смотрю что происходит:
iptables -nvL -t nat

Кол-во байт на DNAT увеличивается при попытке куда-либо зайти, а вот SNAT по нулям.

Ваше приведенное правило от моего отличается только наличием указания интерфейса, пробовал как добавлять так и без него, результат идентичный.

Что еще можно посмотреть?

Заранее благодарен всем откликнувшемся.

4

spv пишет:

iptables -t nat -A PREROUTING -s адрес_клиента -p tcp --dport 80 -j DNAT --to ip_адрес_сквида:8080
iptables -t nat -A POSTROUTING -p tcp --dport 80 -d ip_адрес_сквида -j SNAT --to ip_адрес_текущего_сервера

Попробуй без второго правила.
А в настройках клиентов основным шлюзом установлен айпишник сервера где настроен перенаправления на сквид.

Trouble  in WINDOWS reboot, trouble in UNIX be root.

5

postrouting странный.
Клиент отправляет запрос на 80, шлюз перенаправляет на сквид по 8080.
Далее сквид от своего имени делает запрос на 80 через шлюз.
Итого
iptables -t nat -A POSTROUTING -p tcp --dport 80 -s ip_адрес_сквида -j SNAT --to ip_адрес_текущего_сервера

6

Во блин не додумалса. верно зацыкливание получаетса нуна клиентов натравить на комп со сквидом и там заворачивать трафик.
oO  ag

Trouble  in WINDOWS reboot, trouble in UNIX be root.

7

не читал все посты, у меня так:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables -t nat -A PREROUTING -s локальная_сеть -p tcp -m multiport --dport 80 -j REDIRECT --to-port 8080

— Ты кто?
— Часть силы той, что без числа
Творит добро, всему желая зла. © Фауст

8

postrouting странный.
Клиент отправляет запрос на 80, шлюз перенаправляет на сквид по 8080.
Далее сквид от своего имени делает запрос на 80 через шлюз.
Итого
iptables -t nat -A POSTROUTING -p tcp --dport 80 -s ip_адрес_сквида -j SNAT --to ip_адрес_текущего_сервера

Что-то немного запутался, данное правило я применяю на сервере раздающем интернет?
Если так, то пробовал, но ситуация не изменилась.

не читал все посты, у меня так:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables -t nat -A PREROUTING -s локальная_сеть -p tcp -m multiport --dport 80 -j REDIRECT --to-port 8080

На сколько я знаю REDIRECT может перенаправить только порты, а у меня squid на отдельной машине.
---
Вообще примерно пол года назад была та же задача и реализовал я ее теми же правилами, которые нашел тут:
http://forum.sysadmins.su/index.php?showtopic=6968

Изначально как автор топика из приведенной ссылки я сделал только редирект на прокси-сервер, а после добавления второго правила, все заработало, ума не приложу что могло измениться, сервера те же, изменений не производил.

9

Если делали по статье то почему правило по Построутингу не написали так как там пишет

iptables -t nat -A POSTROUTING -s $ip_clienta -p tcp --dport 80 -d $ip_squid_hosta -j SNAT --to-source $ip_gateway 

Попробуйте.

Trouble  in WINDOWS reboot, trouble in UNIX be root.

10

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

11 (25.11.2011 09:58:00 отредактировано spv)

Ситуация следующая:

Смотрю tcpdump'ом на squid, прходящие запросы от клиента или шлюза, и ничего нету, хотя правило добавлено.
Далее смотрю приходящие пакеты от клиента на шлюз по 80-му порту, все приходит.
Смотрю на шлюзе происходящее на порту 8080 и ничего нету.
Хотя в таблице nat цепочки PREROUTING кол-во байтов проходящих прибавляется.

sysctl -a | grep forward
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.lo.forwarding = 1
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.conf.eth3.forwarding = 1
net.ipv4.conf.eth3.mc_forwarding = 0
net.ipv4.conf.eth5.forwarding = 1
net.ipv4.conf.eth5.mc_forwarding = 0
net.ipv4.conf.eth0.forwarding = 1
net.ipv4.conf.eth0.mc_forwarding = 0
net.ipv4.conf.eth2.forwarding = 1
net.ipv4.conf.eth2.mc_forwarding = 0
net.ipv4.conf.eth1.forwarding = 1
net.ipv4.conf.eth1.mc_forwarding = 0
net.ipv4.conf.eth4.forwarding = 1
net.ipv4.conf.eth4.mc_forwarding = 0
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 0
net.ipv6.conf.all.mc_forwarding = 0
net.ipv6.conf.default.forwarding = 0
net.ipv6.conf.default.mc_forwarding = 0
net.ipv6.conf.lo.forwarding = 0
net.ipv6.conf.lo.mc_forwarding = 0
net.ipv6.conf.eth5.forwarding = 0
net.ipv6.conf.eth5.mc_forwarding = 0
net.ipv6.conf.eth0.forwarding = 0
net.ipv6.conf.eth0.mc_forwarding = 0
net.ipv6.conf.eth4.forwarding = 0
net.ipv6.conf.eth4.mc_forwarding = 0
net.ipv6.conf.eth1.forwarding = 0
net.ipv6.conf.eth1.mc_forwarding = 0
net.ipv6.conf.eth2.forwarding = 0
net.ipv6.conf.eth2.mc_forwarding = 0
net.ipv6.conf.eth3.forwarding = 0
net.ipv6.conf.eth3.mc_forwarding = 0

В iptables все стоит в ACCEPT.
На squid-сервере правил нет и так же все в ACCEPT.

12

Благодарю за помощь, нашел ошибку на роурете, дело в том, что у меня на нем подключено несколько каналов от разных провайдеров и есть таблицы для них, разные подсети ходили через разных провайдеров и получилось так, что у меня прокси-сервер и клиенты ходили через одного провайдера и на роутере дефолт гетвеем был другой, при добавлении всех в одну таблицу все заработало.

Правила сейчас следующие:


iptables -t nat -A POSTROUTING -s $ip_client -p tcp -d $ip_squid -j SNAT --to-source $ip_gateway
iptables -t nat -A PREROUTING -s  $ip_client -p tcp --dport 80 -j DNAT --to-destination $ip_squid:$port_squid
iptables -A FORWARD -s $ip_client -d $ip_squid -p tcp --dport $port_squid -j ACCEPT

Еще раз всем спасибо.