Назад | Перейти на главную страницу

Ubuntu 10.04: два интерфейса в одной подсети с одним и тем же шлюзом

Мой интернет-провайдер предоставил мне подсеть 187.x.x.224 / 29. Шлюз - 187.x.x.225. У меня есть сервер Ubuntu с 6 портами Ethernet. Сервер выполняет маршрутизацию NAT, а также действует как веб-сервер. Мой план - иметь eth1 и eth2 имеют отдельные IP-адреса WAN: 187.x.x.226 и 187.x.x.227 соответственно. Я хочу, чтобы трафик NAT проходил через 187.x.x.226, а веб-сервер и другие локальные приложения должны прослушивать 187.x.x.227. Но шлюз для обоих будет одинаковым - 187.x.x.225. eth0, eth3 и eth4 сталкиваются с 3 разными сетями NAT. На данный момент NAT работает нормально, но трафик из сети NAT и трафик веб-сервера пересылается только через eth1. Итак, мой вопрос в том, как я могу установить маршрут и шлюз по умолчанию, чтобы маршрутизировать трафик веб-сервера через eth2.

РЕДАКТИРОВАТЬ 1: Я выполняю формирование интенсивного трафика на eth1, который действует как восходящий канал для сетей NAT. Я не хочу, чтобы это повлияло на веб-сервер. Мои пользователи активно скачивают торрент и всегда посещают сомнительные сайты. Поскольку eth1 У ip есть связанный с ним домен, я считаю это очень рискованным. Я планирую переместить прикрепленный ip домена к eth2 и дать анонимный ip eth1 (WAN-ссылка для сети NAT). Решение, которое я ищу, - если запрос на веб-сервер поступает через eth2, ответ должен исходить из того же интерфейса.

Как упоминалось ранее, единственный способ добиться того, что вы пытаетесь сделать, - это использовать маршрутизацию политики - это позволит вам настроить несколько таблиц маршрутизации. Без «виртуализации» таблицы маршрутизации, по сути, вы не сможете действительно получить желаемый результат, поскольку у вас не может быть двух сетевых адаптеров с IP-адресами в одной подсети внутри одной и той же таблицы маршрутизации. У вас может быть только один активный шлюз по умолчанию в таблице маршрутизации одновременно, и он всегда будет пытаться выйти из интерфейса, указанного в нем.

Это потребует, чтобы ваше ядро ​​Linux поддерживало маршрутизацию политики. Вам также понадобятся утилиты iproute2 (вероятно, они включены в ваш дистрибутив или установлены через управление пакетами).

Вот несколько достойных ссылок, которые я нашел:

Как автоматизировать все операции при запуске, зависит от используемого дистрибутива Linux.

Полное раскрытие - я скопировал большую часть этого из первой опубликованной ссылки. Я немного протестировал это на виртуальной машине, и, похоже, он работал, но ваш опыт может отличаться, тем более, что вы уже используете NAT и формирование трафика.

Если у вас есть iproute2 утилит в вашей системе, вы можете приступить к настройке новой таблицы маршрутизации. В / etc / iproute2 / rt_tables вы должны добавить что-то похожее на следующую строку:

1 servers

Это эффективно создает новую таблицу маршрутизации с именем «серверы» (по крайней мере, для этого примера). Чтобы настроить таблицу маршрутизации, вам необходимо определить маршрут локальной подсети и маршрут по умолчанию.

ip route add 187.x.x.224/29 dev eth2 src 187.x.x.227 table servers
ip route add default via 187.x.x.225 dev eth2 table servers

Он должен быть настроен, но вам нужно добавить его в политику маршрутизации с помощью IP правило команда:

ip rule add from 187.x.x.227/32 table servers
ip rule add to 187.x.x.227/32 table servers

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

Установите метрику на eth1 быть выше, чем на eth2. Вы можете сделать это с помощью ifconfig eth1 metric XX.

Непонятно, какова ваша цель для этого, поэтому обратите внимание, что это заставит систему использовать eth2 вместо того eth1 для всего исходящего трафика. Балансировка нагрузки и агрегация каналов между двумя интерфейсами более сложны. Кроме того, AFAIK, если ваши приложения не могут связываться с определенными адресами, вы не сможете контролировать уровень, на котором данное приложение будет отвечать по заданному адресу.

Я думаю, что для того, чтобы сделать то, что вы хотите, вам нужно создать 2 отдельные таблицы маршрутизации. Одна таблица маршрутизации (для трафика NAT) определяет наиболее предпочтительный интерфейс для достижения шлюза как eth1; вы бы использовали маршрутизацию политики, чтобы использовать вторую таблицу маршрутизации для трафика с источником IP-адреса веб-сервера. Вторая таблица будет такой же, как первая, но будет иметь метрику, предпочитающую интерфейс eth2 для доступа к вашему шлюзу.