lug-bg: Рутинг одисея.
- Subject: lug-bg: Рутинг одисея.
- From: Daniel Ivanov <sertys@xxxxxxxxxxxxxx>
- Date: Tue, 29 Nov 2005 18:25:15 +0200
- Delivered-to: lug-bg-list@xxxxxxxxxxxxxxxxxx
- Delivered-to: lug-bg@xxxxxxxxxxxxxxxxxx
Здрасти на сички земеделци. По същество:
клиентска мрежа -> рутер -> интернет (етх1 е вътрешен / етх3 външен
итерфейс)
Всичко ток и жици. Просто и работещо.
Сега обаче трябва да си добавя squid-а във веригата.
Тъй като ТРЯБВА да си запазя марките на пакети, защото са ми важни за
traversal-а, не ползвам policy routing, а също и че мястото където
решавам какъв трафик да отиде до squid-а е POSTROUTING веригата на
mangle таблицата, което обезмисля слагането на марки(от опити го пиша).
Както и да е. Слагам forced route с помощта на -j ROUTE (част от pom-ng)
и пакетите, които искам отиват до прокси машината. Там има редирект,
който праща сичко към локален сокет. Заявка минава, SYN отива, ACK се
връща ,стига до рутер И НЕ НАПУСКА ИНТЕРФЕЙСА. Което е удивително.
tcpdump показва, че минава нещо от сорта на :
x.x.x.x : 80 -> 192.168.x.x : spt
на вътрешния интерфейс, но до клиентската машина така или иначе НЕ СТИГА.
Когато пакета се върне директно към клиента(все пак са в една и съща
физическа мрежа), то той пристига успешно.Това обаче е безмислено, тъй
като трябва да се шейпи.
Опитах следните варианти :
client -> eth1 -> proxy(eth0 on router) -> internet -> proxy -> router(eth1)
client -> eth1 -> proxy(eth1 on router) -> internet ->proxy -> router(eth1)
Истината е че играейки си с iptables не виждам ако сложа правило от
сорта на
iptables -t mangle -I POSTROUTING -p tcp --dport 80 -s internet.host -j
ACCEPT
да се покачват броячите.
ако сложа същото правило в PREROUTING обаче, пакети удрят правилото.
Знам, че traversal-a е така :
mangle PREROUTING
nat PREROUTING
input FORWARD
mangle FORWARD
mangle POSTROUTING
nat POSTROUTING
Това е прекрасно, но
root@roller:/home/httpd# iptables -t mangle -L PREROUTING
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
valid_macs all -- anywhere anywhere
root@roller:/home/httpd# iptables -t mangle -L valid_macs
Chain valid_macs (1 references)
target prot opt source destination
DSCP all -- localnet/16 anywhere !set macs1
src DSCP set 0x0a
DSCP all -- 212.72.216.0/24 anywhere !set macs3
src DSCP set 0x0a
DSCP all -- 213.91.223.128/25 anywhere !set macs2
src DSCP set 0x0a
Нищо необикновено. Просто се слага DSCP стойност на пакети.
Няма правило или policy , което да спре пакета от травърсал.
Ето един tcpdump :
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 96
bytes
18:19:53.670460 IP (tos 0x0, ttl 128, id 54945, offset 0, flags [DF],
proto: TCP (6), length: 48) 192.168.10.2.3784 > 61.74.68.182.80: S,
cksum 0x6ef4 (correct), 3511086128:3511086128(0) win 64240 <mss
1460,nop,nop,sackOK>
18:19:53.670518 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto:
TCP (6), length: 48) 61.74.68.182.80 > 192.168.10.2.3784: S, cksum
0x66c6 (correct), 2500745007:2500745007(0) ack 3511086129 win 5840 <mss
1460,nop,nop,sackOK>
18:19:55.052399 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto:
TCP (6), length: 48) 61.74.68.182.80 > 192.168.10.2.3780: S, cksum
0x8fa8 (correct), 2441684349:2441684349(0) ack 3499751735 win 5840 <mss
1460,nop,nop,sackOK>
Вижда се, че пакетите би следвало да стигнат до машината, но те просто
не стигат(потвърдено с ethereal).
Дайте ми сламка, за която да се хвана.
|