У меня в Linux есть довольно простая стандартная таблица маршрутизации:
default via 192.168.1.1 dev eth0 proto static
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.162 metric 1
Теперь мне нужно направить определенную подсеть на другой шлюз. Пока нет проблем, просто добавьте
10.0.0.0/8 via 192.168.1.2 dev eth0
Однако есть подмножество того, что НЕ ДОЛЖНО туда идти. Это работает:
10.0.2.0/24 via 192.168.1.1 dev eth0
Но я бы предпочел не повторять там шлюз по умолчанию; Я хотел бы иметь возможность просто сказать: «для 10.0.2.0/24 делайте то, что вы сделали бы, если бы не был определен маршрут 10.0.0.0/8»
Как это сделать? (Помимо замены 10.0.0.0/8 кучей более конкретных маршрутов, чтобы тщательно избегать 10.0.2 / 24)
Маршрутизация подбирается по мере выигрыша.
Это:
10.0.2.0/24 via 192.168.1.1 dev eth0
Более конкретно, чем это:
10.0.0.0/8 via 192.168.1.2 dev eth0
/24
против /8
Так что просто добавьте оба маршрута, трафик для 10.0.2.0/24
будет соответствовать этому маршруту, все остальное будет соответствовать менее конкретному маршруту / 8.
Помните, что ваш маршрут по умолчанию - 0.0.0.0/0, который является наименее специфичным CIDR из существующих, поэтому все остальные маршруты совпадают до вашего маршрута по умолчанию. (192.168.1.0/24
это часть 0.0.0.0/0
Помните)
Почему бы не добавить маршрут к 10.0.0.0/8 на 192.168.1.1? Таким образом, новым хостам в вашей сети не нужно знать об этом статическом маршруте, и вы можете оставить 192.168.1.1 в качестве маршрута по умолчанию и поручить ему поиск одноразовых сетей, таких как 10.0.2.0/24 и в более общем плане 10.0.0.0. / 8.