Я безуспешно пытался настроить прозрачный прокси на маршрутизаторе, таком как компьютер. В большинстве найденных мною примеров нет шлюза и прокси на одном компьютере, поэтому я могу смотреть не на те примеры. Вот как настраивается мой компьютер-маршрутизатор:
Мой текущий сценарий настройки iptables (да, он очень простой и позволяет слишком много. Я заблокирую его гораздо лучше, когда у меня заработает прозрачный прокси):
LAN="wlp4s0"
WAN="enp3s0"
PROXY_PORT="8080"
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
#handle unmatched traffic
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
### Allow Loopback
iptables -A INPUT -i lo -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -o lo -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
#rules for NAT
iptables -A FORWARD -o $WAN -i $LAN -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
Вот различные правила, которые я пробовал:
#I quickly get a 'website unavailable' message with this one
iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port $PROXY_PORT
И
#Requests timeout with this one
iptables -t nat -A PREROUTING -i $LAN -s 192.168.0.0/24 -p tcp --dport 80 -j REDIRECT --to-port $PROXY_PORT
И
#Requests timeout with this one also
iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j DNAT --to 192.168.0.0:$PROXY_PORT
У кого-нибудь есть идеи, что я делаю неправильно? Мне не хватает других правил или есть существующие правила, которые мешают?
Я понял. Дело в том, что первое правило, iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port $PROXY_PORT
не тайм-аут, но сразу возвращался с ошибкой, это было ключом.
Dansguardian настроен на прослушивание 127.0.0.1, но не 192.168.0.1 (IP-адрес сервера). Мои тесты telnet раньше использовали 127.0.0.1. Как только я попробовал протестировать telnet на 192.168.0.1, я быстро понял проблему.