tjwasiak n00b
Joined: 14 Jul 2015 Posts: 1 Location: okolice Warszawy, PL
|
Posted: Tue Jul 14, 2015 4:38 pm Post subject: [hardened] [~x86-64] problem z TPROXY (squid) [SOLVED] |
|
|
W pełni zaktualizowany system ~x86-64:
- jądro hardened-sources 4.0.7-r1
- squid 3.5.6 [+tproxy]
- iproute2 4.1.1
- iptables 1.4.21-r1
Sieć lokalna - br0 (LAN + WLAN), 192.168.0.0/24, router ma przypisane adresy 192.168.0.1-192.168.0.5
Łącze internetowe PPPoE - ppp0, dynamiczne IP
Konfiguracja squid:
Code: | http_port 192.168.0.5:3128
http_port 192.168.0.5:8080 tproxy |
Konfiguracja iptables - łańcuch PREROUTING tabeli mangle:
Code: | [0:0] -A PREROUTING -i ppp0 -p tcp -m tcp --sport 80 -j MARK --set-xmark 0x1/0x1
[0:0] -A PREROUTING -i br0 -p tcp -m tcp --dport 80 -j TPROXY --on-port 8080 --on-ip 192.168.0.5 --tproxy-mark 0x1/0x1 |
Routing:
ip rule show
Code: | 0: from all lookup local
32765: from all fwmark 0x1/0x1 lookup 1
32766: from all lookup main
32767: from all lookup default |
ip route show table 1
Code: | unicast default via 192.168.0.5 dev br0 proto static scope global |
/proc/sys/net/ipv4/conf/*/rp_filter: 0
Jeśli usunąć regułę TPROXY z łańcucha PREROUTING tabeli mangle to wszystko normalnie działa (jest włączony forwarding, MASQUERADE itp. itd.). Działa również sam Squid (przy połączeniu na port 3128). Jednak z uwagi na konieczność podziału łącza takie rozwiązanie nie jest optymalne (stosując REDIRECT/DNAT do Squid'a cały ruch WWW trafia do klasy dedykowanej routerowi). Z uwagi na ograniczone możliwości techniczne łącze jest dosyć mocno ograniczone jeśli chodzi o prędkość, a znaczna część ruchu WWW jest przez Squid'a cache'owana, co znacznie poprawia komfort korzystania z WWW.
Niestety zastosowanie reguły TPROXY powoduje że cały ruch z sieci lokalnej do portu 80 po prostu znika (nie trafia do Squid'a - potwierdziłem to stosując odpowiednią opcję debug_options).
Czy ktoś ma pomysł co jeszcze może mieć wpływ na takie zachowanie router'a?
EDIT: Znalazłem rozwiązanie problemu.
Po pierwsze - wpis w tabeli routing'u 1 powinien wyglądać następująco:
Code: | local default dev br0 scope host |
Po drugie - mała zmiana reguł łańcucha PREROUTING tabeli mangle
Code: | [0:0] -A PREROUTING -p tcp -m socket -j MARK --set-xmark 0x1/0x1
[0:0] -A PREROUTING -p tcp -m socket -j ACCEPT
[0:0] -A PREROUTING -i br0 -p tcp -m tcp --dport 80 -j TPROXY --on-port 8080 --on-ip 192.168.0.5 --tproxy-mark 0x1/0x1
|
Ważne - jeśli używacie firewall'a port 80 musi być otwarty w łańcuch INPUT dla każdego docelowego adresu IP!
Teraz wszystko działa jak trzeba i cały ruch jest odpowiednio kolejkowany przez QoS.
Szkoda że dokumentacja (zarówno ogólnie dla Linux'a jak również dla Gentoo) dotycząca QoS, policy routing oraz TPROXY jest taka jaka jest - czyli praktycznie nieistniejąca, w znacznej mierze zdeaktualizowana, a poza tym trzeba jej szukać w tak wielu miejscach... _________________ question = ( to ) ? be : ! be; |
|