iptables с прозрачным прокси, как передать пользовательский IP

У меня есть локальный прозрачный прокси, но моя проблема состоит в том, что пакеты, когда перенаправленный, имеют 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
  • 192.168.1.231 = прокси-сервер (сквид) + сервер DNS
  • 192.168.1.1 = iptable/router (песни)

Все кажется работой, но 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 и действительно помогло бы мне также с нахождением, кто использование мисс Интернет.

0
задан 31 August 2015 в 19:00
3 ответа

Я не уверен в своей интерпретации вашей установки. Но, возможно, пересылка работает следующим образом:

# 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
0
ответ дан 4 December 2019 в 13:47

этим методом можно избежать изменения пакетов NAT.

в iptables box

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

в squid box

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

подробнее см. Здесь http://www.tldp.org/HOWTO/TransparentProxy-6.html

2
ответ дан 4 December 2019 в 13:47

Итак, ваши настройки выглядят так: клиенты -> маршрутизатор -> прокси . Если трафик от прокси к клиентам проходит через маршрутизатор , вы можете просто удалить правило SNAT , ничего не нарушая, поскольку router будет видеть ответные пакеты и выполнять для них необходимую трансляцию IP. Если это не так, то вы можете добавить маршруты на прокси к клиентам через маршрутизатор , так что мы вернемся к случаю №1. Если это невозможно, то вы также можете установить HTTP-прокси на маршрутизатор , который будет информировать ваш прокси 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, работающий на том же сервере, может использоваться как обычно.

0
ответ дан 4 December 2019 в 13:47

Теги

Похожие вопросы