- 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: Select all
http_port 192.168.0.5:3128
http_port 192.168.0.5:8080 tproxyCode: Select all
[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/0x1ip rule show
Code: Select all
0: from all lookup local
32765: from all fwmark 0x1/0x1 lookup 1
32766: from all lookup main
32767: from all lookup defaultCode: Select all
unicast default via 192.168.0.5 dev br0 proto static scope globalJeś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: Select all
local default dev br0 scope hostCode: Select all
[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
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...
