Proxmox 与 OPNsense 作为 pci 直通设置用作 Firewall/Router/IPsec/PrivateLAN/MultipleExtIPs

Proxmox with OPNsense as pci-passthrough setup used as Firewall/Router/IPsec/PrivateLAN/MultipleExtIPs

此设置应基于 proxmox,位于 Proxmox 本身托管的 o​​pnsense VM 后面,它将保护 proxmox,为 VM 提供防火墙、专用 LAN 和 DHCP/DNS,并提供 IPsec 连接进入 LAN 以访问所有未 NAT 的 VMs/Proxmox。 服务器是典型的 Hetzner 服务器,因此仅在 NIC 上,但在此 NIC 上有多个 IP or/subnets。

  1. 带有 1 个 NIC(eth0) 的 Proxmox 服务器
  2. 3 Public 1IP,IP2/3 在数据中心由 MAC 路由(到 eth0)
  3. eth0 通过 PCI 直通到 OPNsense KVM
  4. vmbr30 上的专用网络,10.1.7.0/24
  5. 一个 IPsec 移动客户端连接 (172.16.0.0/24) 到 LAN

为了更好地概述设置,我创建了这个[绘图][1]:(不确定是否完美,请告诉我需要改进的地方)

问题:

如何使用 PCI-Passthrough 而不是桥接模式来设置这种情况。

跟进

<s>I) 为什么我不能访问 PROXMOX.2 但访问 VMEXT.11 (ARP?)</s>

II) 是为什么我需要从 * 到 * IPSEC 链规则来获得 ipsec 运行。这很可能是一个与 opnsense 非常相关的问题。

<s>III) 我试图通过在 OPNsense 中添加虚拟 ip,向内部 LAN ip 添加 1:1 nat 并打开防火墙来处理 2 个额外的外部 IP对于所需的端口(对于每个私人局域网 IP)- 但我无法得到它 运行。问题是,每个私有 IP 是否应该有单独的 MAC ?在 WAN</s>

上进行多 IP 设置特别需要什么

一般高层次视角

添加 pci 直通

有点超出范围,但您需要的是

  • 一个串行 console/LARA 到 proxmox 主机。
  • 从 opnsense(在我的例子中是 vmbr30)到 proxmox 私有(10.1.7.2)的工作 LAN 连接,反之亦然。当您只有 tty 控制台并且需要重新配置 opnsense 接口以添加 em0 作为新的 WAN 设备时,您将需要它
  • 您之前可能有有效的 IPsec 连接或打开 WAN ssh/gui 以在直通后进一步配置 opnsense

一般来说 this guide - 简而言之

vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

update-grub

vi /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

然后重启并确保你有 iommu table

find /sys/kernel/iommu_groups/ -type l
  /sys/kernel/iommu_groups/0/devices/0000:00:00.0
  /sys/kernel/iommu_groups/1/devices/0000:00:01.0

现在找到你的网卡

lspci -nn

就我而言

00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection (2) I219-LM [8086:15b7] (rev 31)

执行此命令后,您将 eth0 与 proxmox 分离并失去网络连接。确保你有一个 tty!请将 "8086 15b7"00:1f.6 替换为您的 pci 插槽(见上文)

echo "8086 15b7" > /sys/bus/pci/drivers/pci-stub/new_id && echo 0000:00:1f.6 > /sys/bus/pci/devices/0000:00:1f.6/driver/unbind && echo 0000:00:1f.6 > /sys/bus/pci/drivers/pci-stub/bind

现在编辑您的虚拟机并添加 PCI 网卡:

vim /etc/pve/qemu-server/100.conf

并添加(替换 00:1f.6)

machine: q35
hostpci0: 00:1f.6

从您的 tty proxmox 主机使用 ssh root@10.1.7.1 启动 opnsense 连接,编辑接口,将 em0 添加为您的 WAN 接口并将其设置为 DHCP - 重新启动您的 opnsense 实例,它应该会再次启动。

为您的 opnsense 添加串行控制台

如果您需要快速灾难恢复或您的 opnsense 实例出现故障,基于 CLI 的序列号非常方便,尤其是当您使用 LARA/iLO 连接时。

完成这个,添加

vim /etc/pve/qemu-server/100.conf

并添加

serial0: socket

现在在您的 opnsense 实例中

vim /conf/config.xml

并添加/更改此

<secondaryconsole>serial</secondaryconsole>
<serialspeed>9600</serialspeed>

确保用 9600 替换当前的 serialspeed。不要重启你的 opnsense 虚拟机然后

qm terminal 100

再次按 Enter,您应该会看到登录提示

提示:您还可以将主控制台设置为串行,帮助您进入启动提示等并进行调试。

https://pve.proxmox.com/wiki/Serial_Terminal

下有更多相关内容

Proxmox 上的网络接口

auto vmbr30
iface vmbr30 inet static
    address  10.1.7.2
    address  10.1.7.1
    netmask  255.255.255.0
    bridge_ports none
    bridge_stp off
    bridge_fd 0
    pre-up sleep 2
    metric 1

OPNsense

  1. WAN 是外部 IP1,附加 em0(eth0 pci-直通),DHCP
  2. LAN 是 10.1.7.1,附加到 vmbr30

多 IP 设置

然而,我只涵盖了 ExtraIP 部分,而不是额外的子网部分。为了能够使用额外的 IP,您必须为机器人中的每个 IP 禁用单独的 MACs - 因此所有额外的 IP 都具有相同的 MAC ( IP1,IP2,IP3 )

然后,在 OPN 中,对于每个外部 IP,您在 Firewall-VirtualIPs 中添加一个虚拟 IP(对于每个额外 IP,而不是您绑定 WAN 的主 IP)。给每个虚拟 IP 一个很好的描述,因为它稍后会在 select 框中。

现在您可以为每个端口选择防火墙->NAT->转发

  • 目的地:您要转发的 ExtIP(IP2/IP3)
  • 目标端口响起:您要转发的端口,例如 ssh
  • 重定向目标 IP:您的 LAN VM/IP 映射,例如 10.1.7.52
  • 设置重定向端口,如ssh

现在你有两个选择,第一个被认为更好,但可能更需要维护。

对于您访问 IP2/IP3 服务的每个域,您应该在实际私有 IP 上定义本地 DNS“覆盖”映射。这将确保您可以从内部与您的服务进行通信,并避免您之前使用 NATing 后遇到的问题。

否则你需要关心 NAT 反射 - 否则你的 LAN 盒子将无法访问外部 IP2/IP3,这至少会导致 Web 应用程序出现问题。执行此设置并激活出站规则和 NAT 反射:

什么是有效的:

  • OPN 可以路由 a]]访问互联网并在 WAN 上拥有正确的 IP
  • OPN 可以访问 LAN 中的任何客户端(VMPRIV.151 和 VMEXT.11 和 PROXMOX.2)
  • 我可以使用 IPSec 移动客户端连接到 OPNsense,提供从虚拟 IP 范围 172.16.0.0/24 访问 LAN (10.1.7.0/24)
  • 我可以在使用 IPsec 连接时访问 10.1.7.1 ( opnsense )
  • 我可以使用 IPsec 客户端访问 VMEXT
  • 我可以将端口或 1:1NAT 从额外的 IP2/IP3 转发到特定的私有 VM

底线

此设置比 的替代方案效果好得多。不再有异步路由,proxmox 上不需要 shorewall,proxmox 上不需要复杂的桥接设置,而且它的性能要好得多,因为我们可以再次使用校验和卸载。

缺点

灾难恢复

对于灾难恢复,您需要更多的技能和工具。您需要一个 LARA/iPO proxmox hv 串行控制台(因为您没有互联网连接)并且您需要配置您的 opnsense 实例以允许此处提到的串行控制台,这样您就可以在没有 VNC 连接时访问 opnsense完全没有,现在也可以通过 SSH 连接(甚至来自本地 LAN,因为网络可能会中断)。它工作得相当好,但需要训练一次才能像替代方案一样快

集群

据我所知,此设置无法在集群 proxmox 环境中使用。您可以最初设置一个集群,我是通过使用 Seperate Cluster Network 在 proxmox hv 上本地使用 tinc-switch 设置来完成的。首先设置很简单,没有中断。第二次加入需要已经进入 LARA/iPO 模式,因为您需要关闭并删除用于加入的 VM(这样网关将关闭)。您可以临时使用 eth0 NIC 上网。但是在你加入后,再次移动你的虚拟机,你将无法启动虚拟机(因此网关不会启动)。您无法启动 VMS,因为您没有法定人数 - 而且您没有法定人数,因为您没有互联网来加入集群。所以最后一个我认为无法克服的鸡蛋问题。如果应该处理这个问题,只能通过实际上不是 proxmox VM 的一部分的 KVM,而是独立的 qemu - 我现在不需要。