LINUX.ORG.RU
ФорумAdmin

Вопрос по работе fwmark и маршрутизации.

 , , ,


0

1

Здравствуйте!

Продолжаю познавать увлекательный мир сетей. :) Есть локальная сеть с роутером на Джетне, с которого доступ в интернет и тамже подключение по vpn.

Из локалки один компьютер использует основное подключение к интернету, а другой шлюз доступный через vpn.

Есть две таблицы inet и vpn.

Если правило статической маршрутизации, то все работает:

ip rule add from 192.168.0.95 lookup vpn

Комп 192.168.0.95 ходит в инет через шлюз указаный в таблице vpn.

Но если я маркирую iptables пакеты для 192.168.0.95 и от 192.168.0.95:

iptables --table mangle --append PREROUTING --destination 192.168.0.95 --jump MARK --set-mark 3

iptables --table mangle --append PREROUTING --source 192.168.0.95 --jump MARK --set-mark 3

iptables --table mangle --append FORWARD --destination 192.168.0.95 --jump CONNMARK --save-mark

iptables --table mangle --append FORWARD --source 192.168.0.95 --jump CONNMARK --save-mark

И добавляю правило

ip rule add from all fwmark 0x3 lookup vpn

То пинг перестает ходить. Причем на интерфейсе vpn он идет в обе стороны, а уже на интерфейсе в локалку ответ от пингуемого сервера не проходит.

То есть пакеты ответа на пинг толи не попадают в таблицу vpn (хотя правило статическое есть что с этого шлюза в эту таблицу), толи не проходят по таблице vpn..

Подскажите где я ошибся?


Для начала выкинь CONNMARK если не понимаешь как он работает. Подсказываю - вижу правила с --save-mark, не вижу ни одного с --restore-mark

Далее: нарисуй всю схему сети. Шлюз, VPN-сервер, клиент. И все пути прохождения трафика в данном случае. Многие вопросы отпадут сразу

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

Если я правильно понял, CONNMARK маркирует все соединение исходя из маркированного пакета с помощью MARK. Делаю это для того чтоб все соединение ушло в нужную таблицу.

Интернет через впн: inet----vpn-----router-----client01

Интернет другого клиента: inet----router-----client02

client02 в инете всегда. client01 попадает в инет и все работает, если в таблицу vpn добавлен статическое правило что пакеты от этого клиента уходят в шлюз через vpn. Если статическое правило убираю и ставлю правило на основе mark то ответы на пинг не проходят по router со стороны vpn на сторону client (на входном интерфейсе есть на выходном в локалку уже нет).

Что еще описать подробнее?

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

(на входном интерфейсе есть на выходном в локалку уже нет)

Так ты маркируешь и исходящие и входящие.

lvi ★★★★ ()

ip rule add from all fwmark 0x3 lookup vpn

Что такое lookup не знаю.

ip rule add fwmark 3 table vpn

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

Спасибо за помощь!

Маркировать стал и входящие, когда понял что именно они не проходят. Не помогло, не проходят по прежнему, хотя есть правило что со шлюза (который на vpn) все входящие в таблицу vpn попадают.

Синтаксис table правильный, это я стормозил и с вывода скопипастил. :)

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

Вообщем эфект как будто запрещен форвард из сети vpn---router в сеть router---client0X. Но форвард разрешен, так как если я убираю правило по fwmark и ставлю правило по исходящему ip client01, все работает...

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

Можно попробовать еще

ip route add 192.168.0.0/24 dev eth0(или что у тебя в локалку смотрит) table vpn

И в другую таблицу то же.

lvi ★★★★ ()
Последнее исправление: lvi (всего исправлений: 1)
Ответ на: комментарий от lvi

в данной ситуации хорошо бы скопировать все прямые маршруты из main в vpn.

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

Создал в таблице vpn маршруты других интерфейсов, не помогло...

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

Все начинает работать только после изменения правила:

ip rule del fwmark 0x3 table vpn ip rule add from 192.168.0.95 table vpn

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

значит марки не ставятся. Смотри на счетчики правил --set-mark

А еще нехватает маркировки обратных пакетов. Маркировку conntrack ты сделал, но она не может быть использована в «ip ru».

Так что в начале mangle/PREROUTING нужно что-то типа «iptables -t mangle -I PREROUTING -j CONNMARK --restore-mark»

И еще желательно отключить rp_filter.

vel ★★★★★ ()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от vel

Спасибо за помощь!

Вначале включил в 0 rp_filter (был в 1). Разница в том что пакеты стали ходить не смотря на наличие правила: ip rule add fwmark 0x3 table vpn раньше при появлении этого правила ходить переставали. А теперь независимо от наличия пакеты нормально ходят по правилу: ip rule add from 192.168.0.95 table vpn.

Если же я убираю правило по адресу, все тоже самое, пакет ответов на пинг не проходят между интерфейсом vpn и lan.

в iptables по результату: iptables --table mangle --append PREROUTING --jump CONNMARK --restore-mark

iptables --table mangle --append PREROUTING --source 192.168.0.95 --jump MARK --set-mark 3

iptables --table mangle --append PREROUTING --source 192.168.0.95 --jump CONNMARK --save-mark

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

В таблице vpn есть маршрут к сети 192.168.0.95? Раз уж вы запихивате туда и исходящие в инте и ответные пакеты, в ней нужные все маршруты, а не только default.

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