OPNsense 为 Firewall/GW 的 Proxmox - 路由问题
Proxmox with OPNsense as Firewall/GW - routing issue
此设置应基于 proxmox,位于 Proxmox 本身托管的 opnsense VM 后面,它将保护 proxmox,为 VM 提供防火墙、专用 LAN 和 DHCP/DNS,并提供 IPsec 连接进入 LAN 以访问所有未 NAT 的 VMs/Proxmox。该服务器是典型的 Hetzner 服务器,因此仅在 NIC 上但在此 NIC 上有多个 IP or/subnets。
由于 的集群阻塞,这是我的选择
- 带有 1 个 NIC(eth0) 的 Proxmox 服务器
- 3 Public 1IP,IP2/3 在数据中心由 MAC 路由(到 eth0)
- KVM 桥接设置(eth0 没有 ip,vmbr0 使用 IP1 桥接到 eth0)
- vmbr30 上的专用 LAN,10.1.7.0/24
- 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
- WAN 是 ExternalIP2,通过 MAC-XX
连接到 vmbr0
- LAN 是 10.1.7.1,附加到 vmbr30
什么是有效的:
- 基本设置工作正常,我可以使用 IP2 访问 opnsense,我可以在 IP1 上访问 proxmox,我可以在 ip3 上访问 rancher-VM - 这不需要任何路由。
- 我可以使用 IPSec 移动客户端连接到 OPNsense,提供从虚拟 IP 范围 172.16.0.0/24 访问 LAN (10.1.7.0/24)
- 我可以在连接 OpenVPN 时访问 10.1.7.1 ( opnsense )
- 我可以从 OPNsense(10.1.7.1) (shell)
访问 10.1.7.11 / 10.1.7.151
- 我可以从 othervm(10.1.7.151) (shell)
访问 10.1.7.11 / 10.1.7.1
什么不工作:
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 进行防火墙保护,可以在保持连接的同时执行以下步骤:
- 从 [vmbr0] 中删除 IP1
- 放在[wan nic opn]
- 将内部 ip (IP_INT) 从 opn lan 放到 [vmbr30]
- 从 IP
设置 1:1 NAT
- 设置所有防火墙规则
- 当你打破防火墙并且无法再访问 hv 时发誓
- 查看您是否可以通过 iKVM 解决方案访问 HV,希望获得 public IP,因此您可以使用 proxmox 中的控制台 window,希望修复或重新安装防火墙。
此设置应基于 proxmox,位于 Proxmox 本身托管的 opnsense VM 后面,它将保护 proxmox,为 VM 提供防火墙、专用 LAN 和 DHCP/DNS,并提供 IPsec 连接进入 LAN 以访问所有未 NAT 的 VMs/Proxmox。该服务器是典型的 Hetzner 服务器,因此仅在 NIC 上但在此 NIC 上有多个 IP or/subnets。
由于
- 带有 1 个 NIC(eth0) 的 Proxmox 服务器
- 3 Public 1IP,IP2/3 在数据中心由 MAC 路由(到 eth0)
- KVM 桥接设置(eth0 没有 ip,vmbr0 使用 IP1 桥接到 eth0)
- vmbr30 上的专用 LAN,10.1.7.0/24
- 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
- WAN 是 ExternalIP2,通过 MAC-XX 连接到 vmbr0
- LAN 是 10.1.7.1,附加到 vmbr30
什么是有效的:
- 基本设置工作正常,我可以使用 IP2 访问 opnsense,我可以在 IP1 上访问 proxmox,我可以在 ip3 上访问 rancher-VM - 这不需要任何路由。
- 我可以使用 IPSec 移动客户端连接到 OPNsense,提供从虚拟 IP 范围 172.16.0.0/24 访问 LAN (10.1.7.0/24)
- 我可以在连接 OpenVPN 时访问 10.1.7.1 ( opnsense )
- 我可以从 OPNsense(10.1.7.1) (shell) 访问 10.1.7.11 / 10.1.7.151
- 我可以从 othervm(10.1.7.151) (shell) 访问 10.1.7.11 / 10.1.7.1
什么不工作:
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 进行防火墙保护,可以在保持连接的同时执行以下步骤:
- 从 [vmbr0] 中删除 IP1
- 放在[wan nic opn]
- 将内部 ip (IP_INT) 从 opn lan 放到 [vmbr30]
- 从 IP 设置 1:1 NAT
- 设置所有防火墙规则
- 当你打破防火墙并且无法再访问 hv 时发誓
- 查看您是否可以通过 iKVM 解决方案访问 HV,希望获得 public IP,因此您可以使用 proxmox 中的控制台 window,希望修复或重新安装防火墙。