LINUX.ORG.RU
решено ФорумAdmin

Где кэшируется маршрут?

 , ,


0

4

Добрый день.

На сервере 2 внешних ip-адреса из одной подсети: x.x.x.1 и x.x.x.2, стоит nginx. На нём 2 сайта: eth0.example.com и eth1.example.com. На каждом сайте для теста я создал по 1 файлу одинакового размера (1 гб), с разным содержимым и разными именами.

Маршрутизация сделана путём добавления одного дефолтного шлюза для каждого интерфейса:

route add default gw x.x.x.3 dev eth0
route add default gw x.x.x.3 dev eth1

1. С домашнего компа wget'ом пробую скачать первый файл (с eth0.example.com) - пакеты идут через eth0;

2. пробую скачать второй файл (с eth1.example.com) - пакеты идут через eth1;

А дальше проблема:

3. пробую ещё раз скачать первый файл (с eth0.example.com) - пакеты идут через eth1 и, с какого бы адреса не пытался скачать - трафик идёт через eth1.

Где кэшируется маршрут? ЧЯДНТ?

2 сетевые карты в одной сети с разными IP - моветон!

Но если очень хочется - то просто указанием 2-х dgw не обойтись, нужно еще policy-routing настраивать.

До 3.6 кеш можно было посмотреть «ip ro ls table cache»

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

То есть достаточно будет сделать:

ip ro add default via x.x.x.3 dev eth0 table 100
ip ro add default via x.x.x.3 dev eth1 table 101

И самое главное - тут нужно указывать iif?:

ip ru add iif eth0 table 101
ip ru add iif eth1 table 101

tetramin
() автор топика

Маршрутизация сделана путём добавления одного дефолтного шлюза для каждого интерфейса.

Позвольте уточнить, Вы хотели сказать «сломана»? Чего Вы ожидаете от этой конфигурации? Чего реально хотите? На кой вообще для этого два интерфейса, или, чего уж там, два адреса?

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)

Тут надо ботать Таненбаума «компьютерные сети». Ethernet по своей сути - «звезда», если сделать вдвое больше линков, вдвое лучше от этого как минимум не станет без дополнительных телодвижений (а как максимум можно просто всю сеть положить, если свитчи зациклить). Если хочется удвоить скорость, это надо делать другими методами, гугли слово «interface bonding». Если цель другая, то из топика непонятно какая, понятно только что пока тебе это не по силам. Читай маны.

t184256 выше правильно сказал: опиши задачу.

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

bonding

очень смелое предположение. по описанным телодвижениям мне кажется, что для него ключевыми словами будут aliasing, если не vhost. но, конечно, без задачи это все пальцем в небо.

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

bonding не подходит. Задача проста: сделать возможной передачу данных строго по определённому интерфейсу в зависимости от того, к какому ресурсу обратился клиент. Ну и вообще понять, почему так: подключаюсь через ssh к одному ip адресу, а данные идут через другой интерфейс, но с тем ip, к которому подключался. Хочу строго разделить интерфейсы. Не хочу увеличивать скорость.

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

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

t184256 ★★★★★
()

А какое ядро? Нугуглил что с 3.6 кэш выпилили. Если младше, то посмотри

ip -s route show cache
alozovskoy ★★★★★
()
Ответ на: комментарий от t184256

два вебсервера, слушающих разные адреса

У меня nginx настроен так, что два виртуалхоста слушают два разных адреса.

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

)) это физически не возможно устанавливать коннект по TCP с одним IP адресом и получать данные от другого без установки коннекта.

st4l1k ★★
()
Последнее исправление: st4l1k (всего исправлений: 1)
Ответ на: комментарий от tetramin
То есть достаточно будет сделать:

ip ro add default via x.x.x.3 dev eth0 table 100
ip ro add default via x.x.x.3 dev eth1 table 101

И самое главное - тут нужно указывать iif?:

ip ru add iif eth0 table 101
ip ru add iif eth1 table 101

iif тут не помошник, используй «from»

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

Вам нужен source based routing. Суть в том что в iproute2 может быть несколько не зависимых таблиц маршрутизации. И можно описать правила по которым каждый пакет будет выбирать какая таблица маршрутизации будет применятся для него. Далее создаете 2 таблицы, у одной дефолтный GW будет через eth0 во второй через eth1, и далее если у пакета SRC ip == eth0 - маршрутезируем по первой таблице, если eth1 - по второй

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

iif тут не помошник, используй «from»
создаете 2 таблицы, у одной дефолтный GW будет через eth0 во второй через eth1 ...

Да. Спасибо. Помогло! Решение:

ip ro add default via x.x.x.3 dev eth0 table 100
ip ro add default via x.x.x.3 dev eth1 table 101

ip ru add from x.x.x.1 table 101
ip ru add from x.x.x.2 table 101
tetramin
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.