OPNsense 为 Firewall/GW 的 Proxmox - 路由问题

Proxmox with OPNsense as Firewall/GW - routing issue

此设置应基于 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. KVM 桥接设置(eth0 没有 ip,vmbr0 使用 IP1 桥接到 eth0)
  4. vmbr30 上的专用 LAN,10.1.7.0/24
  5. proxmox 服务器上的 shorewall

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

文字说明:

Proxmox 上的网络接口

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual
    pre-up sleep 2

auto vmbr0
# docs at  
iface vmbr0 inet static
    address  External-IP1(148.x.y.a)
    netmask  255.255.255.192

    # Our gateway is reachable via Point-to-Point tunneling
    # put the Hetzner gateway IP address here twice
    gateway  DATACENTER-GW1
    pointopoint DATACENTER-GW1

    # Virtual bridge settings
    # this one is bridging physical eth0 interface
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0
    pre-up sleep 2
    bridge_maxwait 0
    metric 1

    # Add routing for up to 4 dedicated IP's we get from Hetzner
    # You need to

    # opnsense
    up route add -host External-IP2(148.x.y.b)/32 dev vmbr0
    # rancher
    up route add -host External-IP2(148.x.y.c)/32 dev vmbr0

    # Assure local routing of private IPv4 IP's from our
    # Proxmox host via our firewall's WAN port
    up ip route add 10.1.7.0/24 via External-IP2(148.x.y.b) dev vmbr0

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

Proxmox 上的 Shorewall

接口

wan     eth0            detect          dhcp,tcpflags,nosmurfs
wan     vmbr0           detect          bridge
lan     vmbr30          detect          bridge

政策:

lan             lan             ACCEPT          -               -
fw              all             ACCEPT          -               -
all             all             REJECT          INFO               -

OPNsense

  1. WAN 是 ExternalIP2,通过 MAC-XX
  2. 连接到 vmbr0
  3. LAN 是 10.1.7.1,附加到 vmbr30

什么是有效的:

什么不工作:

a) 从 IPsec 客户端连接到 10.1.7.11/10.1.7.151 或 10.1.7.2

b) [在更新 1 中解决]从 10.1.7.1 (opnsense) 连接到 10.1.7.2

c) 好像我有异步路由,虽然我可以访问例如10.1.7.1:8443 我看到很多条目

d) IPSec LAN 共享将包括我在 IPSEC 链中的规则,"from * to LAN ACCEPT" - 但这对我不起作用,我不得不添加 "from * to * ACCEPT"


问题:

I) 当然我想修复 a)b)c)d),可能从理解 c) 和 d) 开始

II) 在此设置中添加第二个 NIC 是否有帮助?

III) 我在 proxmox 主机上激活 net.ipv4.ip_forward 会不会是个问题(它不应该被路由吗?)

当我弄清楚这个问题时,我很乐意提供一份综合指南,介绍如何 运行 OPNsense 作为 Proxmox 上具有专用网络的设备,使用 HAproxe+LE 将一些服务传递到外部世界并使用 IPsec

访问私人局域网

更新 1:

从 proxmox 上的 vmbr0 中删除 up ip route add 10.1.7.0/24 via IP2 dev vmbr0 解决了 proxmox 无法访问 10.1.7.0/24 也无法从 LAN 网络访问的问题。

更新 2:

我创建了一个更新/更改的设置,其中使用了 pci-passthrough。目标是相同的 - 它降低了复杂性 -

一些急需粗略的基础知识:

  • 有路由,就是ip和layer3的数据包。
  • 有切换,就是MAC的和layer2的帧

你还说 vmbr0/1/30,但你的配置中只显示了 0 和 30。 Shorewall 与您的 vm 连接无关(iptables 是第 3 层,ebtables 将是第 2 层作为对比,但您的框架应该只是飞过 shorewall,而不是到达 HV,而是直接转到 VM。shorewall 只是一个使用 iptables 的前端在背景中)。

除此之外:

通常您不需要在 proxmox BRIDGES 上进行任何路由。就您而言,桥就是一个开关。 vmbr0 是一个虚拟外部网桥,您 link 使用 eth0(因此在物理网卡和您的虚拟接口之间创建了一个内核 link,以使数据包完全流动)。网桥也可以 运行 根本没有附加 IP。但是要访问 HV,通常会附加一个外部 IP。否则你必须设置你的防火墙网关加上一个VPN隧道,给vmbr30一个内部IP,然后你可以在建立隧道连接后从互联网访问HV的内部IP,但这只是为了现在的目的。

你的 ipsec 连接问题听起来很像配置错误的 VPN,但由于协议实现差异,移动 IPSEC 通常是一个令人头疼的问题,openvpn 工作得更好,但你应该知道你的关于 PKI 和证书的基础知识来实现​​它。另外,如果 opnsense 在 openvpns 方面与 pfsense 一样违反直觉,那么您可能很容易在黑暗中刺伤一周。对于 pfsense,有一个可安装的 openvpn 配置导出包,这让生活变得更加轻松,不知道这个是否也可用于 opnsense。

它看起来不像您所说的异步路由,而更像是您遇到的防火墙问题,关于第一张图片。 对于你的隧道防火墙(opnsense 上的接口 IPSEC 或接口 openvpn,取决于你碰巧使用的隧道)只需将它留在 ipv4 any:any 到 any:any,你应该只能通过隧道本身的定义,opnsense 将自动仅从 LAN 接口发送数据包,在第二张图片上。

net.ipv4.ip_forward = 1 = 在您激活它的 linux OS 接口上完全在内核中启用路由。你可以通过 iptables 做 NAT-ting 的事情,因此理论上可以通过在 vmbr0 上使用你的外部 HV IP 进入你的 LAN,但这不是你应该偶然实现的事情,你可以再次禁用转发在不失去连接的情况下。至少对于 HV,我不确定你的其他外部 IP 是否有额外的路由,但是这些应该可以直接从 opnsense 中以相同的方式配置(在那里创建点对点 links,帧将透明地通过 vmbr0 和 eth0 流向 hetzner 网关)并工作,这样会更干净。

此外,您不应该直接从外部访问 rancher-VM,从而绕过您的防火墙,我怀疑这就是您想要实现的目标。而是将外部 ip 放到 opnsense 上(作为 ip 别名类型的虚拟 ip),设置从 IP3 到 rancher-vm 的内部 ip 的 1:1 NAT,并通过 opnsense 进行防火墙。

一些 ascii 艺术从我目前可以从你的信息中辨别出来的东西应该是什么样子,为了简洁起见,只使用接口,physical/virtual 服务器之间没有区别,没有意义-显示到点 links。

[hetzner gw]
  |
  |
  |
[eth0] (everything below happens inside your server)
  ||
  || (double lines here to hint at the physical-virtual linking linux does)
  || (which is achieved by linking eth0 to vmbr0)
  ||
  || +-- HV acess to via IP1 -- shorewall/iptables for hv firewalling 
  || |
[vmbr0]                                                    [vmbr30]
 IP1                                                        | | |
  |                                                         | | |
  |                                                         | | |
[wan nic opn]                                               | | | 
  IP2 on wan directly,                                      | | |
  IP3 as virtual IP of type ip alias                        | | |
  x                                                         | | |
  x (here opn does routing/NAT/tunnel things)               | | |
  x                                                         | | |
  x set up 1:1 NAT IP3-to-10.1.7.11 in opn for full access  | | |
  x set up single port forwardings for the 2nd vm if needed | | |
  x                                                         | | |
[lan nic opn]-----------------------------------------------+ | |
 10.1.7.1                                                     | |
                                                              | |
                                                   +----------+ |
                                                   |            |
                                              [vm1 eth0]   [vm2 eth0]
                                               10.1.7.11    10.1.7.151

如果您也想通过 opnsense 对 HV 进行防火墙保护,可以在保持连接的同时执行以下步骤:

  1. 从 [vmbr0] 中删除 IP1
  2. 放在[wan nic opn]
  3. 将内部 ip (IP_INT) 从 opn lan 放到 [vmbr30]
  4. 从 IP
  5. 设置 1:1 NAT
  6. 设置所有防火墙规则
  7. 当你打破防火墙并且无法再访问 hv 时发誓
  8. 查看您是否可以通过 iKVM 解决方案访问 HV,希望获得 public IP,因此您可以使用 proxmox 中的控制台 window,希望修复或重新安装防火墙。