У меня есть виртуальная машина, на которой я пытаюсь настроить (безуспешно) одну службу для каждого физического устройства, то есть ssh открывается только на eth0, http только на eth1 и ftp только на eth2. Это должно происходить независимо от конфигурации физического устройства, поэтому, например, он должен работать, если eth0, eth1 и eth2 все используют DHCP в одной подсети, а также в случае, если eth0 находится в одной подсети, eth1 использует DHCP в другой и т. Д.
Первой попыткой было использовать устройство (-i eth0) для фильтрации трафика в iptables, однако оказалось, что из-за того, как работает ядро, ssh также станет открытым на eth1 и eth2 (пакеты принимаются на интерфейсе с другим IP-адресом. ). Переключение на использование IP-фильтрации (-s x.y.z.q) не работает должным образом, потому что таблицы необходимо обновлять каждый раз при изменении информации DHCP.
Я открыт для любых предложений о том, как это сделать. Я безуспешно пробовал использовать NAT для виртуального интерфейса, который имеет статический IP, мосты и т. Д.
ОБНОВЛЕНИЕ 1: я не упомянул, но с помощью IP (-s xyzq) и установки arp_filter на 2 (RFC3704 Loose Reverse Path) я получаю одну службу на устройство, однако мне нужно синхронизировать брандмауэр с фактическими IP-адресами устройств и это оказалось действительно привередливым.
Ваша модель порождает множество проблем с маршрутизацией и конфигурацией. Наличие разных записей DNS для каждой службы, разрешающей один и тот же IP-адрес, было бы гораздо более эффективным подходом. Это обычное явление для имен DNS, таких как smtp.example.com, ftp.example.com, ssh.example.com и других, которые возвращают один и тот же IP-адрес.
Все эти службы используют разные порты, что позволяет им работать на одном интерфейсе. iptables
может брандмауэр по службе и, если необходимо, адрес назначения. Адреса могут быть на одном интерфейсе или на разных интерфейсах. Я не нашел решения, которое позволило бы DHCP предоставлять несколько адресов для одного интерфейса.