Мой сервер настроен с несколькими общедоступными IP-адресами со следующей конфигурацией сети (с примерами IP-адресов):
eth0 \- br0 - 1.1.1.2 |- [VM 1's eth0] | |- 1.1.1.3 | \- 1.1.1.4 \- [VM 2's eth0] \- 1.1.1.5
У меня вопрос: как мне настроить iptables с разными правилами для реального физического сервера и виртуальных машин? Я не против, чтобы виртуальные машины выполняли свои собственные iptables, но я бы хотел, чтобы у br0 был другой набор правил. Прямо сейчас я могу только пропустить все, что не является желаемым поведением (поскольку br0 открыт).
Спасибо!
Поскольку вы назначили IP-адрес для br0, он фактически является «настоящим» сетевым интерфейсом для вашего сервера. Вы можете создавать правила iptables на своем сервере, которые одинаково хорошо работают независимо от того, называется ваш сетевой интерфейс br0 или eth0. То есть просто напишите правила iptables для брандмауэра вашего сервера, как если бы ваш сетевой интерфейс был обычным ванильным eth0 (за исключением того, что он назван br0).
Не беспокойтесь о необходимости писать свои правила iptables, чтобы явно разрешать трафик к виртуальным интерфейсам, подключенным к мосту br0, потому что (и это ключевой момент) Правила iptables не могут явно фильтровать или влиять на трафик на мосту. Причина в том, что мосты работают на канальном уровне (L2), а iptables (по большей части) работает с пакетами на более высоких сетевых уровнях (обычно L3 и L4). Мысленная картина, которая может оказаться полезной, выглядит так: мост работает почти так же, как сетевой концентратор, к которому подключены все мостовые интерфейсы.
Если вы хотите фильтровать трафик, проходящий через мост, вам следует изучить ebtables, но вряд ли вам это понадобится. Гораздо естественнее и удобнее рассматривать мост как часть сетевой инфраструктуры (то есть как концентратор или коммутатор) и создавать скрипт межсетевого экрана iptables для каждого хоста (реального или виртуального) в сети.