У вас есть сервер, со своей подсетью (к примеру 1.1.1.2/24), шлюзом, выделенный провайдером. Представим ситуацию, что провайдер вам выделил ещё одну подсеть (к примеру 2.2.2.0/28), которая не пересекается ни с какой другой и не выделил шлюз. Если просто повесить алиасом на сервер адрес 2.2.2.2 то оно будем работать без нареканий. А что делать, если вам нужно этот адрес повесить внутри FreeBSD jail’a или Solaris zone или ещё какой-то хостовой машине внутри виртуальной?
Вот тут могут быть проблемы, так как шлюза из родной подсети нету, а указать из другой (1.1.1.1/24) нельзя. Что же делать? Ответ прост – необходимо специальным образом прописать машрутизацию в гостевой среде.
Пример для Solaris.
Настройки для global zone: ip=10.10.10.4/27 (диапазон 10.10.10.1-31), gw=10.10.10.1 дополнительная сеть, выданная провайдером 10.10.10.96/28 (диапазон 10.10.10.97-110). Хотим присвоить адрес 10.10.10.98 в зоне. Для этого добавляем такой маршрут в global zone:
#route add -net 10.10.10.4 10.10.10.98 -iface
В итоге в зоне мы увидим такую картину:
$netstat -rn Routing Table: IPv4 Destination Gateway Flags Ref Use Interface -------------------- -------------------- ----- ----- ---------- --------- default 10.10.10.1 UG 1 58838 10.10.10.0 10.10.10.98 U 1 1 igb0:1 10.10.10.96 10.10.10.98 U 1 0 igb0:1 224.0.0.0 10.10.10.98 U 1 0 igb0:1 127.0.0.1 127.0.0.1 UH 1 0 lo0:1
Как видим дефолтный машрут добавился, причём совершенно из другой подсети, но так же вместе с ним добавились и другие машруты “на себя”
Правда после ребута зоны (а так же при загрузке) такой машрут не добавляется (даже если использовать параметр ‘-p’, так как маршрутизация поднимается раньше зон)