我有一台虚拟机,我试图在该虚拟机上为每个物理设备配置(未成功)一项服务 - 即 ssh 仅在 eth0 上打开,http 仅在 eth1 上打开,ftp 仅在 eth2 上打开。无论物理设备配置如何,这都必须发生,例如,如果 eth0、eth1 和 eth2 都在同一子网上使用 DHCP,以及如果 eth0 在一个子网上,eth1 在另一个子网上使用 DHCP,它都必须正常工作,等等。
第一次尝试是使用设备 (-i eth0) 过滤 iptables 中的流量,但结果发现由于内核的操作方式,ssh 也会在 eth1 和 eth2 上打开(数据包在具有不同 IP 的接口上被接受)。切换到使用 IP 过滤 (-s xyzq) 无法正常工作,因为每次 DHCP 信息发生变化时都需要更新表。
我愿意接受任何关于如何实现这一点的建议,我曾尝试通过 NAT 连接到具有静态 IP、网桥等的虚拟接口,但都没有成功。
UPDATE1:我没有提到,但是通过使用IP(-s xyzq)并将arp_filter设置为2(RFC3704松散反向路径),我每个设备获得一个服务,但是我需要保持防火墙与设备的实际IP同步,并且事实证明这真的很挑剔。
答案1
您的模型引发了一系列路由和配置问题。为每个服务设置不同的 DNS 条目,并将它们全部解析为同一个 IP 地址,这将是更可行的方法。smtp.example.com、ftp.example.com、ssh.example.com 等 DNS 名称通常会返回同一个 IP 地址。
这些服务都使用不同的端口,这样它们就可以在同一个接口上运行。 iptables
可以根据服务设置防火墙,如果需要,还可以设置目标地址。这些地址可以位于同一个接口或不同的接口上。我还没有找到允许 DHCP 为一个接口提供多个地址的解决方案。