У меня сеть в принципе выглядит так:
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
.
Поскольку в вашем вопросе мало деталей, ответ также будет включать детали:
«Интеллект» того, как маршрутизировать пакеты, должен находиться в маршрутизаторах, а не в конечных блоках. Таким образом, ваш шлюз по умолчанию должен быть напрямую доступен в той же подсети; затем этот шлюз должен выяснить, что делать с пакетами, чтобы доставить их, куда бы они ни пошли.