У меня есть локальный прозрачный прокси, но моя проблема в том, что пакеты при перенаправлении имеют IP-адрес маршрутизатора, а не пользователя. Вот правила, которые у меня сейчас есть:
iptables -t nat -A PREROUTING -i eth0 -s ! 192.168.1.231 -p tcp -m multiport --dport 80 -j DNAT --to 192.168.1.231:3128
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/16 -d 192.168.1.231 -j SNAT --to 192.168.1.1
iptables -A FORWARD -s 192.168.0.0/16 -d 192.168.1.231 -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT
iptables -I FORWARD -i eth0 -p tcp -m multiport --dport 80 -j DROP
Вроде все работает, но IP в ЖУРНАЛЕ прокси всегда 192.168.1.1
вместо возможно 192.168.1.46
или 192.168.4.25
это важно для меня, потому что у меня разные правила кальмаров для 192.168.4.XX
(DHCP) против 192.168.1.XX
или 192.168.2.XX
и это действительно помогло бы мне найти тех, кто скучает по Интернету.
с помощью этого метода вы можете избежать изменения пакетов NAT.
в коробке iptables
iptables -t mangle -A PREROUTING -j ACCEPT -p tcp --dport 80 -s squid-box
iptables -t mangle -A PREROUTING -j MARK --set-mark 3 -p tcp --dport 80
ip rule add fwmark 3 table 2
ip route add default via squid-box dev eth1 table 2
в коробке с кальмарами
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
подробнее см. здесь http://www.tldp.org/HOWTO/TransparentProxy-6.html
Итак, ваша установка выглядит так: clients
-> router
-> proxy
. Если трафик из proxy
к clients
течь через router
, вы можете просто удалить SNAT
правило, ничего не нарушая, поскольку router
увидит ответные пакеты и сможет выполнить для них необходимую трансляцию IP. Если это не так, вы можете добавить маршруты на proxy
к clients
через router
Итак, мы вернулись к делу №1. Если это невозможно, вы также можете установить HTTP-прокси на router
, который проинформирует ваш proxy
IP исходного пользователя через X-Forwarded-for
заголовок.
Вы также можете использовать ответ Пэта с небольшими изменениями:
iptables -A PREROUTING -t nat -i eth0 ! -d $proxy_ip -p tcp --dport 80 -j REDIRECT --to-port 3128
Таким образом, только перенаправленный трафик снова перенаправляется на прокси-сервер squid, и apache, работающий на том же сервере, может использоваться как обычно.
Я не уверен в своей интерпретации вашей установки. Но, возможно, переадресация работает так:
# HTTP Forward (TCP Port 80)
iptables -t nat -A PREROUTING -p tcp -s 0/0 -d 192.168.1.1 --dport 80 -j DNAT --to 192.168.1.231:3128
iptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.231 -j SNAT --to-source 192.168.1.1
iptables -A FORWARD -p tcp -s 192.168.1.1 --sport 80 -j ACCEPT
# DNS Forward (TCP & UDP Port 53)
iptables -t nat -A PREROUTING -p udp -s 0/0 -d 192.168.1.1 --dport 53 -j DNAT --to 192.168.1.231:53
iptables -t nat -A PREROUTING -p tcp -s 0/0 -d 192.168.1.1 --dport 53 -j DNAT --to 192.168.1.231:53
iptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.231 -j SNAT --to-source 192.168.1.1
iptables -A FORWARD -p udp -s 192.168.1.1 --sport 53 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.1.1 --sport 53 -j ACCEPT