Политика маршрутизации гостей на другой сервер
После долгих поисков я нашел ответ на свой вызов, но последний шаг не удался.
У меня есть два идентичных сервера, которые обслуживают нескольких гостей. Серверы имеют два интерфейса: один для внешних IP-адресов, которые я получил от своего провайдера, и один для внутренней внутренней сети. Все гости получают внутренний адрес внутренней сети и подключаются к физической внутренней сети через мост. Оба сервера могут пинговать всех гостей на обоих серверах. Я выставляю гостей, используя D/SNAT'ing гостевой IP-адрес одному из доступных IP-адресов на хосте. Это прекрасно работает для гостей, которые живут на хосте.
Чтобы D / SNAT работал на другом хосте, я узнал, что мне нужно добавить маршрут для пакетов, которые поступили на внутренний интерфейс, потому что маршрут по умолчанию велел стеку на другом сервере вернуться на неверный интерфейс. и неправильный публичный IP. У меня есть этот сценарий, работающий на двух локальных виртуальных тестовых машинах, даже через "фиктивный" мост к физическому внутреннему интерфейсу.
Это также работает на реальных серверах для DNAT'ов по внутреннему IP-адресу, который находится на внутреннем мосту, но НЕ для адресов, назначенных гостям на другом сервере, которые также подключены к тому же внутреннему мост.
Конфигурация, сервер A:
/etc/iproute2/rt_tables:
..
200 internal
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o $WAN_IF -j SNAT --to $PUBLIC_IP
iptables -t nat -A PREROUTING -i $WAN_IF -p tcp -d $PUBLIC_IP --dport 53 -j DNAT --to $GUEST_IP
ip rule add from $LAN_IP table internal
ip route add default via $LAN_GW dev $LAN_IF table internal
Where
WAN_IF = WAN bridge interface (br1)
PUBLIC_IP = is public ip address on WAN bridge if
LAN_IP = private ip on LAN bridge (br0)
LAN_GW = private ip on LAN bridge on other server
brctl show
br0 8000.003018a96c83 no eth0
vnet0
vnet1
vnet2
vnet3
vnet4
vnet5
br1 8000.003018a96c84 no eth1
Когда $GUEST_IP - это ip гостя на том же хосте, все работает. Когда $GUEST_IP - это IP-адрес локальной сети другого сервера. Но я не могу связаться с гостями на другом сервере?
Обновить
Настройка шлюза по умолчанию гостя работает, но это не симметричное решение, как я хотел создать. Но если это необходимо, это небольшое изменение, чтобы заставить вещи работать, пока я отслеживаю маршруты. Это, однако, сделало бы невозможной маршрутизацию разных протоколов через разные публичные IP-адреса, если я не создам некоторые правила для этого и на гостевой.
Обновление 2
Оказывается, я могу решить проблему, настроив шлюз по умолчанию только для гостя, но это не так "гибко", как я надеялся.
Есть ли более элегантное / гибкое решение?
1 ответ
Настройка шлюза по умолчанию для гостя кажется самым простым решением.