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

Маршрут по умолчанию не в локальной сети

У меня сеть в принципе выглядит так:

H1---\           /----Inet1
H2---->---GW1---<
H3---/           \----GW2-----Inet2

И вот проблема: H3 требуется доступ в Интернет только при включенном Inet2. Я думал о том, чтобы сделать таблицу маршрутизации, которая выглядит так:

Сначала я без проблем установил маршрут к GW2 через GW1. Но когда я пытаюсь

маршрут добавить по умолчанию gw 1.2.3.4

(1.2.3.4 является IP-адресом GW2), он жалуется «SIOCADDRT: Нет такого устройства». Проблема в том, что gw по умолчанию, который я пытаюсь установить, недоступен напрямую? Есть ли другой подход, который позволил бы мне добиться этого?

Альтернативный (и гипотетический) подход: Поскольку H3 будет использовать статический IP-адрес, возможно ли с помощью iptables на GW1 перенаправить любые пакеты из H3 в GW3, тем самым «обманом» заставив H3 использовать GW2 в качестве маршрутизатора по умолчанию?

PS: Этот вопрос является вопросом, продолжающим этот.

Ваш альтернативный подход может быть реализован с помощью маршрутизации на основе политик. Что-то вроде (команды должны выполняться на GW1):

# Create rule for matching the source address in route table 999
ip rule add from 1.2.3.4/32 table 999
# Add default router to the table
ip route add default via <GW2> table 999

У меня нет возможности проверить команды, но они должны быть правильными. Правила маршрутизации в таблице 999 не отображаются в обычном режиме. $ ip route show - вам нужно добавить идентификатор таблицы: $ ip route show table 999.

Поскольку в вашем вопросе мало деталей, ответ также будет включать детали:

  1. Установите шлюз по умолчанию H3 на GW1.
  2. Пусть GW1 всегда направляет трафик от H3 к GW2.

«Интеллект» того, как маршрутизировать пакеты, должен находиться в маршрутизаторах, а не в конечных блоках. Таким образом, ваш шлюз по умолчанию должен быть напрямую доступен в той же подсети; затем этот шлюз должен выяснить, что делать с пакетами, чтобы доставить их, куда бы они ни пошли.