LINUX.ORG.RU
ФорумAdmin

Как маркировать пакеты?

 ,


0

1

ubuntu 16 два vpn тунеля через которые доступны одинаковые подсети. Ничего сверхъестественного не нужно. Просто из какого интерфейса вышел в тот и ушел.

Chain PREROUTING (policy ACCEPT 2387K packets, 1620M bytes)
 pkts bytes target     prot opt in     out     source               destination
 1833  122K CONNMARK   all  --  fr     *       192.168.254.0/24    0.0.0.0/0            ctstate NEW,RELATED CONNMARK set 0xa
 3854  205K CONNMARK   all  --  fr     *       192.168.200.0/24      0.0.0.0/0            ctstate NEW,RELATED CONNMARK set 0xa
 655K 1501M CONNMARK   all  --  eth0   *       0.0.0.0/0            0.0.0.0/0            connmark match  0xa CONNMARK restore

ip rule list
219:    from all fwmark 0xa lookup gre

ip ro sh ta gre
192.168.200.0/24 via 192.168.10.20 dev fr
192.168.254.0/24 via 192.168.10.20 dev fr

 ip ro
default via 1.1.1.1 dev eth0 
1.1.1.1.0/24 dev eth0  proto kernel  scope link  src 1.1.1.2
192.168.9.20 dev l2tp0  proto kernel  scope link  src 192.168.9.1
192.168.10.20 dev fr  proto kernel  scope link  src 192.168.10.10
192.168.254.0/24 via 192.168.9.20 dev l2tp0
192.168.200.0/24 via 192.168.9.20 dev l2tp0
Вот. Сайты открывает через раз или два. И с аплоадом беда совсем.


Проблемы у fr или у l2tp0? И что у них прописано DNS-ом, а то не понятно, есть ли у вас CONNMARK в OUTPUT.

А в целом, не уверен в нормально работоспособности этой схемы. Если у вас на адрес 1.1.1.2 порт 53 придут два пакета с одинаковыми src-ip адресами и src-портами, как conntrack будет различать к какому соединению относится ответный пакет?

Может быть нужно маркировать не только соединения, но и пакеты, приходящие с fr, чтобы при SNAT'е они различались...

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

Проблемы у fr. l2tp0 Работает хорошо DNS там никакие не прописаны. Днсы выдаются в локалке через dhcp... там отдельный кеширующий днс в локалке который роутится напрямую без всяких туннелей.

А как это работает в обычном случае? Я правильно понимаю что fwmark ищет метку пакета? а -j CONNMARK --restore-mark маркирует все пакеты в соединений ? в чем тогда разница с -j MARK с критерием -m connmark ?

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

Там DNAT то как бы нет. Все входящие без маркировки будут роутится в main таблице. Если понадобится dnat то да нужно будет отмаркировать чтобы в fr уходило, без маркировки, вот как сейчас, оно будет уходить в l2tp0. Наверно можно добавить restore-mark в output mangle по критерию connmark 10 чтобы fr input был доступен для подсетей.

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

А как это работает в обычном случае?

Как-то работает, обычно удовлетворительно. Может я и не прав, но обычно смотрится ситуация, типа такой, что далёкий хост 1.2.3.4 может подключится со своего порта 1234 на наш порт 25 через интерфейс eth0 или eth1, и все пакеты от него и будут приходит через один и тот же интерфейс и мы должны туда отвечать. А если он попытается установить с нами два соединения с полностью одинаковыми «реквизитами» (адресами), одно через eth0, другое через eth1, то не сработает.

Я правильно понимаю что fwmark ищет метку пакета?

Да, только не ищет, а смотрит. Метка (MARK) это дополнительное поле пакета, которое появляется как пакет пришёл с интерфейса и убирается, когда он уходит в сеть. И метка (поле) доступно всем подсистемам, обрабатывающим пакет. Метка соединения (CONNMARK) это поле в таблице отслеживания соединений (conntrack). Пока пакет не отнесён к какому-либо соединению, у него его нет.

а -j CONNMARK --restore-mark маркирует все пакеты в соединений ?

Маркирует те пакеты соединения, для которых срабатывает условие (match) правила.

в чем тогда разница с -j MARK с критерием -m connmark ?

В чём разница цели правила и критерия (условия) правила?

Там DNAT то как бы нет

Я вобще про SNAT. Они что, после маршрутизации, выходят через eth0 без SNAT?

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

Можно сделать вот так

iptables -t mangle -A PREROUTING -m connmark --mark 10 -j CONNMARK --restore-mark
а можно так
iptables -t mangle -A PREROUTING -m connmark --mark 10 -j MARK --set-mark 10
В чем разница? далёкий хост 1.2.3.4 может подключится со своего порта 1234 на наш порт 25 через интерфейс eth0 или eth1 не может, у меня один дефолт, один внешний адрес. локальный может установить соединение либо через l2tp0 либо через fr это да, но для этого и разметка, а ната там нет.

Я чуточку ближе подобрался к решению проблемы. Заметил на гипере на котором виртуалка которая gre peer, вот такую штуку conntrack: generic helper won't handle protocol 47. Please consider loading the specific helper module. Я ниочень понял что оно хочет, но решил поменять gre на ipip. И о чудо аплоад по iperf вырос с 240кб\с до 40мб\с а даунлоад до 60мб\с. Это явно прогресс. Но тем не менее сайты все равно открываются очень долго. через l2tp0 который по тестам всего 10мб\с открывается намного быстрее.

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

Конкретно в случае этих правил разницы нет, просто restore-mark позволяет уменьшить число правил при развесистой маркировки с кучей разных макеров и масок.

conntrack: generic helper won't handle protocol 47.

Патч из разряда «когда коту делать нечего...» На скорость прохождения пакетов влиять не должно. Далеко не всегда требуется conntrack для GRE тунелей, особенно, если они без PPTP.

Быстрота открытия сайта — делайте дамп всего трафика компа при открытии одной страницы, чтобы было видно, сколько идёт DNS запрос, а сколько загрузка страницы.

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

Сделал. Днс запроса нет вообще. закеширован. а get / на 11кбайт длится 2.5с.

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