LINUX.ORG.RU
ФорумAdmin

Опять два канала и CONNMARK


0

1

Заранее прошу простить за очередное поднятие этого вопроса...
Два канала vlan1, vlan2. eth0 - локалка, 192.168.4.225. 192.168.4.99 - «И.О. сервера в DMZ»

Надо - разные типы траффика в разные каналы.

# ip rule list
0: from all lookup local
100: from all fwmark 0xa lookup T1
101: from all fwmark 0x14 lookup T2
200: from 178.76.236.86 lookup T2
201: from 178.76.236.82 lookup T1
32766: from all lookup main
32767: from all lookup default

# ip route show table T1
192.168.4.0/24 dev eth0 proto kernel scope link src 192.168.4.225
127.0.0.0/8 dev lo scope link
default via x.x.x.81 dev vlan1
# ip route show table T2
192.168.4.0/24 dev eth0 proto kernel scope link src 192.168.4.225
127.0.0.0/8 dev lo scope link
default via x.x.x.85 dev vlan2

# iptables -S -t nat
-A PREROUTING -d x.x.x.82/32 -i vlan1 -p tcp -m tcp --dport 8100 -j DNAT --to-destination 192.168.4.99:22
-A PREROUTING -d x.x.x.86/32 -i vlan2 -p tcp -m tcp --dport 8100 -j DNAT --to-destination 192.168.4.99:22
-A POSTROUTING -s 192.168.4.99/32 -o vlan1 -j SNAT --to-source x.x.x.82
-A POSTROUTING -s 192.168.4.99/32 -o vlan2 -j SNAT --to-source x.x.x.86


# iptables -S -t mangle
-A PREROUTING -i vlan1 -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A PREROUTING -i vlan2 -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A PREROUTING -i eth0 -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A PREROUTING -i vlan1 -j CONNMARK --set-xmark 0xa/0xffffffff
-A PREROUTING -i vlan2 -j CONNMARK --set-xmark 0x14/0xffffffff
-A PREROUTING -s 192.168.4.99/32 -i eth0 -j CONNMARK --set-xmark 0x14/0xffffffff
-A PREROUTING -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask 0xffffffff


# ip route show
x.x.x.84/30 dev vlan2 proto kernel scope link src 178.76.236.86
x.x.x.80/30 dev vlan1 proto kernel scope link src 178.76.236.82
10.2.128.0/24 dev vlan3 proto kernel scope link src 10.2.128.2
192.168.4.0/24 dev eth0 scope link metric 3
127.0.0.0/8 via 127.0.0.1 dev lo
default via x.x.x.81 dev vlan1 metric 9
default via x.x.x.85 dev vlan2 metric 10

Исходящий траффик с 192.168.4.99 упорно идет через vlan1, игнорируя set-mark. Входящее соединение на x.x.x.81:8100 проходит успешно, х.86 - не инициируется. Согласно tcpdump SYN пакет доходит до конечного компа, но ответ на него теряется где то в дебрях...

Подскажите куда копать? 2 дня ковыряюсь уже, мозг устал. Вполне вероятно что ошибка на самом видном месте...
Да, ip rule add from 192.168.4.99 table T2 - работает, но не подходит, нужно разрулить соединения по портам + внешние.

>-A PREROUTING -i vlan1 -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff

-A PREROUTING -i vlan2 -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff

-A PREROUTING -i eth0 -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff


-A PREROUTING -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask 0xffffffff



Выкинь это все нафиг.
Сначала все операции CONNMARK --set-mark, потом один раз CONNMARK --restore-mark, именно в таком порядке.

src 192.168.4.225


Во-первых, неправильно, во-вторых, все равно работать не будет, т.к. исходящий адрес выбирается по таблице main.

127.0.0.0/8 dev lo scope link


Вне таблицы local (id 0) излишне.

nnz ★★★★
()
Ответ на: комментарий от nnz

Привел к виду:

# ip route list table T1
192.168.4.0/24 dev eth0  scope link 
default via 172.16.0.1 dev vlan1 

# ip route list table T2
192.168.4.0/24 dev eth0  scope link 
default via 10.2.128.1 dev vlan2 

# iptables -S -t mangle
-A PREROUTING -i vlan1 -m connmark --mark 0x0 -j CONNMARK --set-xmark 0xa/0xffffffff
-A PREROUTING -i vlan2 -m connmark --mark 0x0 -j CONNMARK --set-xmark 0x14/0xffffffff 
-A PREROUTING -s 192.168.4.99/32 -i eth0 -m connmark --mark 0x0 -j CONNMARK --set-xmark 0x14/0xffffffff 
-A PREROUTING -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff 

Отслеживаю пинги на 8.8.8.8 по tcpdump - пакет выходит на внешку, через выбранный мной по connmark гейт, успешно возвращается на роутер.

Пакет прослеживается в Mangle-Prerouting, но в Nat-Prerouting его уже нет... В Mangle-Prerouting d-addr пакета внешний IP шлюза.

Вот картинка:

======= Mangle =========
Chain PREROUTING (policy ACCEPT 898 packets, 77261 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
       4      804 CONNMARK   all  --  vlan1  *       0.0.0.0/0            0.0.0.0/0           connmark match 0x0 CONNMARK set 0xa 
       1      296 CONNMARK   all  --  vlan2  *       0.0.0.0/0            0.0.0.0/0           connmark match 0x0 CONNMARK set 0x14 
      33     2337 CONNMARK   all  --  eth0   *       192.168.4.99         0.0.0.0/0           connmark match 0x0 CONNMARK set 0x14 
     907    78017 CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0           CONNMARK restore 
       9      756 ACCEPT     all  --  *      *       8.8.8.8              0.0.0.0/0           mark match 0x14 
       0        0 ACCEPT     all  --  *      *       8.8.8.8              0.0.0.0/0           

Chain INPUT (policy ACCEPT 544 packets, 53252 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 231 packets, 17761 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
       0        0 ACCEPT     all  --  *      *       8.8.8.8              0.0.0.0/0           mark match 0x14 
       9      756 ACCEPT     all  --  *      *       0.0.0.0/0            8.8.8.8             mark match 0x14 

Chain OUTPUT (policy ACCEPT 371 packets, 48588 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 611 packets, 67105 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
======= NAT ========
Chain PREROUTING (policy ACCEPT 11 packets, 1329 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
       0        0 ACCEPT     all  --  *      *       8.8.8.8              0.0.0.0/0           mark match 0x14 
      34     2633 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           mark match 0x14 
       0        0 DNAT       tcp  --  vlan1  *       0.0.0.0/0            172.16.0.2          tcp dpt:8192 to:192.168.4.99:22 
       0        0 DNAT       tcp  --  vlan2  *       0.0.0.0/0            10.2.128.3          tcp dpt:8192 to:192.168.4.99:22 

Chain POSTROUTING (policy ACCEPT 4 packets, 556 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
       0        0 SNAT       all  --  *      vlan1   192.168.4.99         0.0.0.0/0           to:172.16.0.2 
      33     2337 SNAT       all  --  *      vlan2   192.168.4.99         0.0.0.0/0           to:10.2.128.3 

Chain OUTPUT (policy ACCEPT 4 packets, 556 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Создается ощущение, что при обратной отработке SNAT ядро не знает куда деть пакет... Что подскажете?

hellstad
() автор топика
Ответ на: комментарий от nnz

Угу, оказался он самый. Только не all.rp_filter=0, а vlan{1,2}.rp_filter=1

Добавил в скрипт

for i in `ls -1 /proc/sys/net/ipv4/conf/*/rp_filter` ; do echo 0 > $i ; done

hellstad
() автор топика
Ответ на: комментарий от nnz

Отслеживал прохождение пакета - в магл - прероутинг пакет еще есть, а до клиента не доходит. Вот и вставлял проверки где не попадя. :-))

hellstad
() автор топика
Ответ на: комментарий от hellstad

>Отслеживал прохождение пакета - в магл - прероутинг пакет еще есть, а до клиента не доходит. Вот и вставлял проверки где не попадя. :-))

Рекомендую на будущее: можно использовать правила без действий (не указывать -j ...). Тогда будет работать только счетчик.

nnz ★★★★
()

ЗАРАНЕЕ ИЗВИНЯЮСЬ ЗА ОФФТОП

Выложите пожалуйста ответ системы на команду: #set | grep grub

Не могу запустить грубовую оболочку под рутом. А тему создавать чето не охота. И еще наз извиняюсь за офф....

sCat
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.