Networking Proxmox,OPNsense作为pci直通设置,用作防火墙/路由器/IPsec/PrivateLAN/MultipleExtIPs

Networking Proxmox,OPNsense作为pci直通设置,用作防火墙/路由器/IPsec/PrivateLAN/MultipleExtIPs,networking,ipsec,proxmox,opnsense,Networking,Ipsec,Proxmox,Opnsense,此设置应基于proxmox,位于proxmox本身上托管的opnsense VM后面,该VM将保护proxmox,向VM提供防火墙、privat LAN和DHCP/DNS,并提供到LAN的IPsec连接,以访问所有未连接的VM/proxmox。 服务器是典型的Hetzner服务器,因此仅在NIC上,但在此NIC上有多个IP或/子网 带有1个NIC(eth0)的Proxmox服务器 3公共1IP、IP2/3由数据中心的MAC路由(至eth0) eth0是通过PCI传输到OPNsense KVM的

此设置应基于proxmox,位于proxmox本身上托管的opnsense VM后面,该VM将保护proxmox,向VM提供防火墙、privat LAN和DHCP/DNS,并提供到LAN的IPsec连接,以访问所有未连接的VM/proxmox。 服务器是典型的Hetzner服务器,因此仅在NIC上,但在此NIC上有多个IP或/子网

  • 带有1个NIC(eth0)的Proxmox服务器
  • 3公共1IP、IP2/3由数据中心的MAC路由(至eth0)
  • eth0是通过PCI传输到OPNsense KVM的
  • vmbr30上的专用网络,10.1.7.0/24
  • IPsec移动客户端连接(172.16.0.0/24)到LAN
  • 为了更好地勾勒出设置,我创建了这个[drawing][1]:(不确定它是否完美,请告诉我需要改进的地方)

    问题: 如何使用PCI Passthrough而不是桥接模式设置这样的场景

    后续行动
    I)为什么我无法访问ProxBox.2,但可以访问VMEXT.11(ARP?

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


    III)我试图通过在OPNsense中添加虚拟ip、在内部LAN ip中添加1:1 nat以及为所需端口(每个专用LAN ip)打开防火墙来处理另外两个外部ip,但我无法让它运行。问题是,每个私有IP是否应该有一个单独的MAC?要在WAN上获得多ip设置,具体需要什么

    添加pci直通 有点超出范围,但您需要的是

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

    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表

    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!请用pci插槽更换
    “8086 15b7”
    00:1f.6
    (见上文)

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

    vim /etc/pve/qemu-server/100.conf
    
    并添加(替换00:1f.6)

    使用
    ssh引导opnse连接root@10.1.7.1
    从您的tty proxmox主机编辑接口,将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>
    
    再次按Enter键,您将看到登录提示

    提示:您还可以将primaryconsole设置为串行,帮助您进入引导提示等并进行调试

    更多关于这方面的信息,请参见

    Proxmox上的网络接口 视知觉
  • WAN是外部IP1,连接em0(eth0 pci直通),DHCP
  • LAN是10.1.7.1,连接到vmbr30
  • 多IP设置 但是,我只介绍了ExtraIP部分,没有介绍额外的子网部分。为了能够使用额外的ip,您必须为机器人中的每个ip禁用单独的MAC,这样所有额外的ip都具有相同的MAC(IP1、IP2、IP3)

    然后,在OPN中,对于每个外部IP,您在防火墙虚拟IP中添加一个虚拟IP(对于每个额外的IP,而不是您绑定WAN到的主IP)。为每个虚拟IP提供一个良好的描述,因为它稍后将出现在选择框中

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

    • 目标:要从中转发的ExtIP(IP2/IP3)
    • Dest-port-rang:要转发的端口,如ssh
    • 重定向目标IP:要映射的LAN VM/IP,如10.1.7.52
    • 设置重定向端口,如ssh
    现在您有两个选择,第一个被认为更好,但可能需要更多的维护

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

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

    工作原理:
    • OPN可以路由]]访问internet,并在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上不再需要复杂的网桥设置,而且它的性能更好,因为我们可以再次使用绑定校验和

    缺点 灾难恢复 对于灾难恢复,您需要更多的技能和工具。您需要proxmox hv的LARA/iPO串行控制台(因为您没有internet连接),并且您需要配置opnsense instanc
    vim /conf/config.xml
    
    <secondaryconsole>serial</secondaryconsole>
    <serialspeed>9600</serialspeed>
    
    qm terminal 100
    
    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