URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 4421
[ Назад ]

Исходное сообщение
"iptables + iproute2 + fwmark . Пакеты не возвращаются."

Отправлено Nas_tradamus , 17-Ноя-09 15:50 
Здравствуйте!

Помогите, пожалуйста, уже сил нет.
Ни как не пойму что я делаю не так.

Задача: пропускать пакеты, помеченные как 10 через провайдера tel.

Конфиг iptables:
###
NET_LOCAL="192.168.9.0/24" # локальная сеть.

$i -t mangle -A PREROUTING -s 192.168.9.37 -d ! $NET_LOCAL -j MARK --set-mark 10 # Метим все пакеты, идущие с локального ПК 192.168.9.37

$i -t nat -A POSTROUTING -m mark --mark 10 -j MASQUERADE # Маскарадим все пакеты, которые имеют метку 10

$i -t nat -A POSTROUTING -s 192.168.9.0/24 -j MASQUERADE

$i -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
### Конец

Конфиг iproute2:

###
ip route add default via 81.231.7.211 dev eth2 table tel
ip route add 127.0.0.0/8 dev lo table tel # Loopback 1

ip route add default via 143.12.217.142 dev eth1 table centel
ip route add 127.0.0.0/8 dev lo table centel # Loopback 2

# Устанавливаем шлюз по умолчанию (143.12.217.142 - centel, 81.231.7.211 - tel)
ip route add default via 143.12.217.142 # centel gateway as default GW

# Устанавливаем правила для внешних IP, пускаем "себя" через нужные шлюзы:
ip ru add from 143.12.217.143 table centel
ip ru add from 81.231.7.212 table tel

ip ru add fwmark 10 table tel # Пускаем пакеты с меткой 10 через tel
#### Конец

-------------

В общем, как только я добавляю правило в iproute2, Интернет на машине 192.168.9.37 перестает работать.
traceroute с этой машины показывает, что пакеты доходят до шлюза нужного провайдера и дальше не идут.

Помогите, пожалуйста, решить проблему.


Содержание

Сообщения в этом обсуждении
"iptables + iproute2 + fwmark . Пакеты не возвращаются."
Отправлено Nas_tradamus , 17-Ноя-09 17:24 
Такое чувство, что после fwmark перестает работать маскарадинг.

"iptables + iproute2 + fwmark . Пакеты не возвращаются."
Отправлено Nas_tradamus , 17-Ноя-09 18:14 
В общем, решил проблему.

Нужно было отключить rp_filter на всех интерфейсах:

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter