Iptables+ip_route+CONNMARK+MARK

Задача... есть два канала один по трафику, друго безлим, безлим дешовый но медленный, через него пустим весь нет пусть все кто что хоят то и делают в нете такая вот политика партии.

Вторая задача отпускать в нет по быстрому каналу только несколько сайтов тоесть либо несколько подсетей либо несколько хостов. это будет указанно в переменной $ip_adr
Уже обгуглился мановобкурился, раскажите где я накосячил...

Начинаю пинговать сайт который указал в $ip_adr а он не пингуется и ответов вообще от него нет..

хотя с роутреа на нужной нам сетевушке все прекрасно снимается
с клиента

ping nnm.ru

И тишина в ответ...

c роутера

tcpdump -i eth2 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth2, link-type EN10MB (Ethernet), capture size 96 bytes
14:31:41.432554 IP 10.0.0.77 > volkh.nnm.netserv.name: ICMP echo request, id 20069, seq 2369, length 64
14:31:41.434885 IP volkh.nnm.netserv.name > 10.0.0.77: ICMP echo reply, id 20069, seq 2369, length 64
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel

переменная $ip_adr

cat adr 
93.91.224.0/24
93.91.224.2
93.91.224.3
89.111.189.147
89.111.189.148
89.111.189.149
88.212.197.198

Код скрипта айпитаблес

#!/bin/bash
#
ipt=/sbin/iptables
# Clear Iptables
$ipt -F
$ipt -t nat -F
$ipt -t mangle -F

# Acept input output traffic
$ipt -P INPUT ACCEPT
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
$ipt -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

for ip_adr in `cat ./adr`
do
$ipt -t mangle -A PREROUTING -s 192.168.0.0/24 -d $ip_adr -j MARK --set-mark 1
$ipt -t mangle -A PREROUTING -s 192.168.0.0/24 -d $ip_adr -j CONNMARK --save-mark
done
#
$ipt -t mangle -A OUTPUT -s 192.168.0.0/24 -j CONNMARK --restore-mark
# dublicat
$ipt -t mangle -A OUTPUT -j CONNMARK --restore-mark
#
$ipt -A FORWARD -i eth1 -o eth0 -m connmark --mark 1 -j ACCEPT
$ipt -A FORWARD -i eth1 -o eth2 -j ACCEPT 

$ipt -t nat -A POSTROUTING -m connmark --mark 1 -j MASQUERADE


$ipt -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

в переменной $ip_adr подставляются адреса хостов которые должны ходить по второму каналу...
код скрипта для роута.

#/bin/bash
ip route flush table norm
ip route add 10.0.0.0/24 dev eth2 src 10.0.0.77 table norm
ip rule add fwmark 1 table norm
ip route add default via 10.0.0.200 dev eth2 table norm
ip route flush cacherouter iptables # 

route говорит

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        *               255.255.255.0   U     0      0        0 eth2
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
83.222.220.0    *               255.255.255.0   U     0      0        0 eth0
default         D1-MCH-gi0-2.80 0.0.0.0         UG    0      0        0 eth0
default         10.0.0.200      0.0.0.0         UG    1      0        0 eth2

Плиз айнид ХЕЛП...

зачем тут MARK? все это же

зачем тут MARK? все это же леается iproute2 tables(две таблицы, каждая со своим шлюзом). А в iptables два правила на NAT (правда с маскарадом я это не делал), форвардам не надо указывать исходящий интерфейс. (все что не разрешено то запрещено)

Чем это может делаться это

Чем это может делаться это понятно, просто марком можно помечать и отправлять разные пакеты снимать с портов и так далее...
по средствам route этого делать нельзя?!

Характер скверный, не женат!

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".