Re: Mark traffic on one machine, match on another machine?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



IMHO, there is a bit of mess in your scheme.
Let's clarify it :)

If my assumptions are right then:
1. eth0.2 is the external shaper interface.
2. ifb0 is using for shaping incoming traffic on this interface.

To set marks for the traffic you should use something like these:

iptables -t manlge -N NEW_CONN
iptables -t mangle -A NEW_CONN -m tos --tos 12 -j MARK --set-mark 1
iptables -t mangle -A NEW_CONN -m tos --tos 28 -j MARK --set-mark 2
# to mark all the unmatched traffic and treat it separately in your shaper
iptables -t mangle -A NEW_CONN -m mark --mark 0  -j MARK --set-mark 3
iptables -t mangle -A NEW_CONN  -j CONNMARK --save-mark

iptables -t mangle -A PREROUTING -m conntrack --cstate INVALID -j DROP
iptables -t mangle -A PREROUTING -m conntrack --cstate ESTABLISHED -j
CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m conntrack --cstate NEW,RELATED -g NEW_CONN


2012/12/5, Jack Bates <uo4zau@xxxxxxxxxxxxxxxx>:
> Thanks for this help, I think the marks are getting saved/restored
> successfully, and I can successfully classify request traffic from the
> proxy server based on the mark (statistics on the eth0.2 classes are
> incrementing) but response traffic from the origin server isn't getting
> classified yet (statistics on the ifb0 classes remain zero).
>
> Here is my complete work in progress script. How can I investigate why
> response traffic isn't getting classified? Are there any more details
> that would help explain why not?
>
> How can I classify traffic based on the restored mark? or is there
> another way to classify response traffic from the origin server based on
> the TOS/DSCP field of the request?
>
>     1: # Save/restore connection mark based on TOS field
>     2: iptables -A PREROUTING -t mangle -j CONNMARK --restore-mark
>     3: iptables -A PREROUTING -t mangle -m tos --tos 12 -j MARK --set-mark
> 1
>     4: iptables -A PREROUTING -t mangle -m tos --tos 28 -j MARK --set-mark
> 2
>     5: iptables -A PREROUTING -t mangle -j CONNMARK --save-mark
>     6:
>     7: ifconfig ifb0 up
>     8:
>     9: insmod sch_ingress
>    10: tc qdisc add dev eth0.2 ingress
>    11:
>    12: # Classify response traffic from origin server based on restored
> mark
>    13: insmod cls_fw
>    14: insmod act_mirred
>    15: tc filter add dev eth0.2 parent ffff: protocol ip pref 1 handle 1
> fw flowid 2:1 action mirred egress redirect dev ifb0
>    16: tc filter add dev eth0.2 parent ffff: protocol ip pref 1 handle 2
> fw flowid 2:3 action mirred egress redirect dev ifb0
>    17:
>    18: # Send unmarked traffic to class 2:2
>    19: insmod cls_u32
>    20: tc filter add dev eth0.2 parent ffff: protocol ip pref 1 u32
> match u32 0 0 flowid 2:2 action mirred egress redirect dev ifb0
>    21:
>    22: # Limit up and downstream to 1mbit, to "own" the queue
>    23: insmod sch_tbf
>    24: tc qdisc add dev eth0.2 root handle 1 tbf rate 1mbit burst 5k
> latency 70ms
>    25: tc qdisc add dev ifb0 root handle 1 tbf rate 1mbit burst 5k
> latency 70ms
>    26:
>    27: # High, low, and "other" priority
>    28: insmod sch_prio
>    29: tc qdisc add dev eth0.2 parent 1: handle 2 prio
>    30: tc qdisc add dev ifb0 parent 1: handle 2 prio
>    31:
>    32: # Classify request traffic from proxy server based on mark
>    33: tc filter add dev eth0.2 parent 2: protocol ip pref 1 handle 1 fw
> flowid :1
>    34: tc filter add dev eth0.2 parent 2: protocol ip pref 1 handle 2 fw
> flowid :3
>
> On 05/12/12 01:12 AM, Eliezer Croitoru wrote:
>> Thanks Anatoly,
>>
>> My idea was that based on a mark he will jump the packets to another
>> table which HE will mark TOS/DSCP.
>>
>> Eliezer
>>
>> On 12/5/2012 4:39 AM, Anatoly Muliarski wrote:
>>> Hi Jack,
>>>
>>> --restore-mark should be used for existing connections and to mark new
>>> ones you may use something like that:
>>>
>>> iptables -t mangle -A PREROUTING -i eth0.2 -m tos --tos 1 -m conntrack
>>> --cstate NEW,RELATED -j MARK --set-mark 1
>>>
>>> The main idea consists in marking packets on the physical input
>>> interface and shaping them on ifb0( where they arrive already marked
>>> ).
>>> iptables' packet marks exist only in memory of one computer, TOS/DSCP
>>> may be used for transmitting a map of them to another one.
>>> BTW, use --restore-mark on the output interface of your shaper too.
>>>
>>> 2012/12/3, Jack Bates <uo4zau@xxxxxxxxxxxxxxxx>:
>>>> Thanks a lot for your help, how can I evaluate --restore-mark before I
>>>> classify and shape response traffic from the origin server?
>>>>
>>>> I think you mean something like:
>>>>
>>>>     # Copy ctmart to nfmark (e.g. 1, 2)
>>>>     iptables -A PREROUTING -t mangle -i eth0.2 -j CONNMARK
>>>> --restore-mark
>>>>
>>>>     # Classify by nfmark (e.g. 1, 2), send unmarked traffic to class
>>>> 2:2
>>>>     tc filter add dev eth0.2 parent ffff: protocol ip handle 1 fw
>>>> flowid
>>>> 2:1 action mirred egress redirect dev ifb0
>>>>     tc filter add dev eth0.2 parent ffff: protocol ip handle 2 fw
>>>> flowid
>>>> 2:3 action mirred egress redirect dev ifb0
>>>>     tc filter add dev eth0.2 parent ffff: protocol ip u32 match u32 0 0
>>>> flowid 2:2 action mirred egress redirect dev ifb0
>>>>
>>>> Just how can I get --restore-mark to evaluate before tc filter?
>>>>
>>>> Another way I can imagine is with the CLASSIFY target:
>>>>
>>>>     # Send unmarked traffic to class 2:2
>>>>     iptables -A PREROUTING -t mangle -i eth0.2 -m connmark --mark 1 -j
>>>> CLASSIFY 2:1
>>>>     iptables -A PREROUTING -t mangle -i eth0.2 -m connmark --mark 2 -j
>>>> CLASSIFY 2:3
>>>>     iptables -A PREROUTING -t mangle -i eth0.2 -j CLASSIFY 2:2
>>>>
>>>> But I have the same challenge, how can I evaluate the CLASSIFY target
>>>> before I shape traffic?
>>>>
>>>> Or is there another way to classify and shape response traffic from the
>>>> origin server based on the TOS/DSCP field of the request?
>>>>
>>>> On 03/12/12 03:52 AM, Eliezer Croitoru wrote:
>>>>> You use iptables mark + restore mark based on connection tracking.
>>>>> you can mark the TOS on the outgoing postrouting table.
>>>>> you can take a look at the iptabes man pages:
>>>>> http://ipset.netfilter.org/iptables.man.html
>>>>> which has --restore-mark  exaple.
>>>>>
>>>>> Eliezer
>>>>>
>>>>> On 12/3/2012 10:43 AM, Jack Bates wrote:
>>>>>> I can imagine a couple ways of classifying traffic from our proxy
>>>>>> server
>>>>>> based on the TOS/DSCP field, and also how to set the connection mark
>>>>>> based on this field. But how do I classify and shape response traffic
>>>>>> from the origin server based on the connection mark?
>>>> --
>>>> To unsubscribe from this list: send the line "unsubscribe netfilter" in
>>>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>>
>>>
>>>
>>
>


-- 
Best regards
Anatoly Muliarski
--
To unsubscribe from this list: send the line "unsubscribe netfilter" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux