1 |
On 10/22/10 09:53, Nikita Kipriyanov wrote: |
2 |
|
3 |
> 21.10.2010 18:25, Sergey Kobzar пишет: |
4 |
>> On 10/21/10 14:42, Nikita Kipriyanov wrote: |
5 |
>> |
6 |
>>> Пример: |
7 |
>>> |
8 |
>>> postup() { |
9 |
>>> if [ "$IFACE" = "ppp0" ]; then /etc/conf.d/ns_update.tcl; fi |
10 |
>>> return 0 |
11 |
>>> } |
12 |
>>> |
13 |
>>> postup() вызывается на поднятии каждого интерфейса. Если это ppp0, то |
14 |
>>> вызывается скриптик ns_update.tcl, который определяет полученный адрес и |
15 |
>>> общается с dns-сервером; в данном случае так реализовано динамическое |
16 |
>>> обновление DNS. |
17 |
>> |
18 |
>> Спасибо - понял. |
19 |
>> |
20 |
>> У меня не работает PBR: |
21 |
>> |
22 |
>> Добавил postup() и postdown() в /etc/conf.d/net из |
23 |
>> /etc/conf.d/net.example. Также добавил в /etc/conf.d/net: |
24 |
>> |
25 |
>> config_eth2=( "10.10.252.1 netmask 255.255.255.252" ) |
26 |
>> routes_eth2=( "default via 10.10.252.2 table ukrtel" ) |
27 |
>> rules_eth2=( "from 10.10.252.1 table ukrtel" ) |
28 |
>> |
29 |
>> # ip rule list |
30 |
>> 0: from all lookup local |
31 |
>> 32765: from 10.10.252.1 iif eth2 lookup ukrtel |
32 |
>> 32766: from all lookup main |
33 |
>> 32767: from all lookup default |
34 |
>> |
35 |
>> # ip route list table ukrtel |
36 |
>> default via 10.10.252.2 dev eth2 metric 1 |
37 |
>> |
38 |
>> 'mtr -a 10.10.252.1' даже до 10.10.252.2 не доходит. |
39 |
>> |
40 |
>> Что не так? |
41 |
>> |
42 |
> Согласно правилу RPDB, которое вы привели, ЕСЛИ ((адрес источника стоит |
43 |
> 10.10.252.1) |
44 |
|
45 |
да |
46 |
|
47 |
> И (пакет попал в систему через интерфейс eth2)), |
48 |
|
49 |
мне надо описать, что src ip (int) является eth2. Я полагаю, Squid при |
50 |
отправке пакета выполняет bind() и отсылает пакет через выбранный интерфейс. |
51 |
|
52 |
> ТО он |
53 |
> будет маршрутизироваться по таблице ukrtel. Если там маршрут не будет |
54 |
> найден, то дальше будет использованы другие таблицы (по порядку номеров, |
55 |
> которые вы им задали в /etc/iproute2/rt_tables). |
56 |
|
57 |
это понятно |
58 |
|
59 |
> В данном случае, как вы уже сами поняли, условие не выполнится никогда, |
60 |
> т.е. правило не выполнится, а в других таблицах подходящих маршрутов нет. |
61 |
|
62 |
угу - пакет уходит через eth1, на который смотрит dgw. |
63 |
|
64 |
|
65 |
> Linux умеет выбирать таблицу маршрутизации исходя из разных свойств |
66 |
> пакета: источник, приёмник, интерфейс, флаги режима обслуживания, метка |
67 |
> netfilter. Приведённые в примерах обработчики переменных rules_... |
68 |
> автоматически к каждому правилу добавляют iif $IFACE, т.е. "данное |
69 |
> правило маршрутиации применять к пакетам только вошедшим через данный |
70 |
> интерфейс". (В противном случае смысла делать для каждого интерфейса |
71 |
> свою переменную rules_... нет -- правила больше никак не зависят от |
72 |
> интерфейса.) |
73 |
|
74 |
мне нужно описать, что правил применять для пакетов, исходящих с |
75 |
указанного интерфейса. |
76 |
|
77 |
|
78 |
> В общем, вам либо поменять функции и убрать это добавление iif $IFACE, |
79 |
> либо добавлять правила другим способом. |
80 |
|
81 |
Никита, спасибо за подробное объяснение - буду смотреть... |