Iptables+ip_route+CONNMARK+MARK (Некоторые траблы с возвратом пакетов)

Sabayon, Calculate, Funtoo, Exherbo

Модератор: /dev/random

gmurik
Сообщения: 2
ОС: Ubuntu

Iptables+ip_route+CONNMARK+MARK

Сообщение gmurik »

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

Вторая задача отпускать в нет по быстрому каналу только несколько сайтов тоесть либо несколько подсетей либо несколько хостов. это будет указанно в переменной $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

Плиз айнид ХЕЛП...
Спасибо сказали: