Знаю, что по теме в интернете масса информации, но никак не получается сделать.
Есть сервер смотрящий одним интерфейсом в локалку (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
На что еще можно обратить внимание или проверить?
Iptables + squid перенаправление
вот мой (дальше сам разберёшься)
-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
надеюсь сам сквид ты сделал прозрачным.
В squid.conf прописал:
http_port 8080 transparent
При прописанных выше правилах смотрю что происходит:
iptables -nvL -t nat
Кол-во байт на DNAT увеличивается при попытке куда-либо зайти, а вот SNAT по нулям.
Ваше приведенное правило от моего отличается только наличием указания интерфейса, пробовал как добавлять так и без него, результат идентичный.
Что еще можно посмотреть?
Заранее благодарен всем откликнувшемся.
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_адрес_текущего_сервера
Попробуй без второго правила.
А в настройках клиентов основным шлюзом установлен айпишник сервера где настроен перенаправления на сквид.
postrouting странный.
Клиент отправляет запрос на 80, шлюз перенаправляет на сквид по 8080.
Далее сквид от своего имени делает запрос на 80 через шлюз.
Итого
iptables -t nat -A POSTROUTING -p tcp --dport 80 -s ip_адрес_сквида -j SNAT --to ip_адрес_текущего_сервера
Во блин не додумалса. верно зацыкливание получаетса нуна клиентов натравить на комп со сквидом и там заворачивать трафик.
oO :D
не читал все посты, у меня так:
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
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
Изначально как автор топика из приведенной ссылки я сделал только редирект на прокси-сервер, а после добавления второго правила, все заработало, ума не приложу что могло измениться, сервера те же, изменений не производил.
Если делали по статье то почему правило по Построутингу не написали так как там пишет
iptables -t nat -A POSTROUTING -s $ip_clienta -p tcp --dport 80 -d $ip_squid_hosta -j SNAT --to-source $ip_gateway Попробуйте.
Пробовал, мое правило отличается только в том что нет исходящего адреса, уже и так и так делал.
Ситуация следующая:
Смотрю 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.
Благодарю за помощь, нашел ошибку на роурете, дело в том, что у меня на нем подключено несколько каналов от разных провайдеров и есть таблицы для них, разные подсети ходили через разных провайдеров и получилось так, что у меня прокси-сервер и клиенты ходили через одного провайдера и на роутере дефолт гетвеем был другой, при добавлении всех в одну таблицу все заработало.
Правила сейчас следующие:
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
Еще раз всем спасибо.