最近,我为家庭实验室购买了新服务器(主题为更多信息,可在完成所有操作后关注)。我想使用这些服务器来运行许多工作负载(主要是虚拟机),并且我想使用最近获得的公共IP空间。当然,我的消费者Internet连接不支持设置BGP,并且我不想在“商业Internet”选项上花费更多的钱。
我正在和一个朋友讨论这个问题,他提议我在他的同一个位置使用路由器。这使我可以建立到路由器的GRE隧道并发布前缀。产生以下拓扑:
在最初的设置中,我将使用虚拟防火墙,因为几个月后我将搬家实验室,并希望将其部署在物理防火墙上。我的第一次尝试是使用pfSense。过去,我非常高兴地使用pfSense。它具有强大的防火墙,NAT和VPN功能,但路由并不是最强大的。我成功设置了OpenBGPd,但发现GUI集成受到限制。GRE隧道支持是我遇到的困难。pfSense部分的一个重要缺失是,无法在GRE隧道接口上配置IPv6地址(重叠IP地址)。我设法使它在链接本地地址上工作,但是这需要添加特殊的静态路由,而且我认为这不是一个很好的解决方案。
vSRX
然后,我部署了瞻博网络vSRX防火墙。现在这不是免费的选择,但是当我在瞻博网络工作时,我真的很喜欢在自己家庭网络的这个关键位置安装Junos。我正在使用任何人都可以获得的60天试用许可证,包括Juniper网站(https://www.juniper.net/us/en/dm/free-vsrx-trial/)上的最新虚拟设备。在最后的设置中,我可能将使用SRX300物理设备,该设备应该为我的500 / 40Mbps电缆连接提供足够的转发性能。
过去,vSRX基于运行在Linux来宾OS之上的FreeBSD VM。数据平面进程在Linux上运行的地方,以利用DPDK加速数据包处理。
这样就可以在Linux内核中使用更好的多核处理支持,同时仍使用基于FreeBSD的Junos OS。缺点是启动设备要花费很多时间(7-10分钟)。它还需要启用“混杂模式”才能连接到fxp0带外管理接口,因为这是一个虚拟NIC,在FreeBSD VM中具有另一个mac地址。
令人惊讶的是,最新版本的vSRX(称为vSRX3或vSRX 3.0)不再使用Linux,而是完全基于FreeBSD11。利用FreeBSD中有关多核处理和对DPDK的支持的改进。这也意味着在进行此过渡时性能不会改变(在某些情况下甚至可能会有所改善),并且极大地缩短了启动时间(现在大约是一分钟)。即使只有2个CPU内核(仍将控制和数据平面进程分开),vSRX的性能仍然很好,非常适合我的用例。
由于此架构中没有虚拟机。可以再次访问fxp0接口,而无需在ESXi环境中启用混杂模式。
我的设置不需要使用诸如SR-IOV之类的更高级的功能,因为我的带宽要求被认为是非常低的(1Gbps对于我的家庭网络来说已经足够了!)
提示:要了解运行vSRX3还是上一代的区别,请查看“显示版本”的输出。如果'vSRX'用大写字母编写,则说明您正在运行vSRX3,如果'vsrx'用小写字母编写,则说明您在运行上一代。
GRE配置
如果您习惯于Junos配置,则GRE和BGP的设置非常简单。默认情况下,GRE隧道接口在vSRX上可用,无需进行任何配置即可启用它。
首先,我配置了GRE接口。这里的重要部分是,当我转换默认的1500字节MTU基础结构(也称为Internet;)时,遇到了一些MTU /碎片问题。这就是为什么我启用了允许碎片和清除碎片位 旋钮的原因。因为我希望所有面向Internet的流量都可以使用GRE隧道,所以我唯一需要的路由配置就是知道在哪里可以找到GRE隧道目的地。这就是为什么配置/ 32静态路由的原因。
这些示例中使用的所有IP地址都指定为文档使用的前缀。
由于GRE接口只是一个常规接口,因此我们应该将此接口配置为属于安全区域。在这种情况下,这是我 直接连接到Internet时的不信任区域。我允许BGP流量访问此接口,因为稍后我们将对其进行配置。我这里没有包括任何安全策略配置,因为它们只是默认设置(允许所有流量从信任到不信任)。
这里的一个关键旋钮是,我必须指定一个比正常情况低得多的TCP MSS值。这是因为我需要考虑GRE + IP标头的开销,但是我还配置了IPsec隧道来增加开销。这里有一些特殊的命令仅用于更改GRE隧道的MSS大小,但它们是针对GRE over IPsec用例而设计的。这是基于GRE的IPsec。
在我的情况下,MSS大小为1366可以工作,但是要确定这并不是一件容易的事,因为数据包上的ESP开销随数据包大小而变化。我尝试了使用DF位集和最多1378个字节的ICMP ping,我的ping回复又回来了。这意味着1378 + ICMP(8b)+ IP(20b)= 1406字节,即94字节的总开销
MSS:MTU – IP(20b)– TCP(20b)= 1460字节–所有开销(94b)= 1366字节
思科拥有出色的IPsec开销计算器https://cway.cisco.com/ipsec-overhead-calculator/
在网上我发现了不同的安全 数字。我将其设置为1340,以容纳IPv6标头上的其他20个字节。请在您对MSS大小的建议下方发表评论!
BGP配置
最后是时候设置一些动态路由了。在这种情况下,我也想宣传自己的自治系统(AS)。我想从我的房屋和同一地点的路由器中产生BGP,以充当我的传输提供者。因此,让我们建立一个非常标准的EBGP配置。同样,任何vSRX许可证中都包含BGP。
由于已经在安全区域配置中将BGP指定为主机入站流量,因此不需要其他策略。这确实意味着允许所有BGP通信。当然,最佳实践是将BGP流量的源地址限制为仅配置的邻居。为此,vSRX通过将防火墙过滤器配置应用于回送接口来支持常规的控制平面安全性(如果不需要,则不需要IP地址)。
当然,策略是任何BGP配置中最重要的部分。我对接收完整的BGP表不感兴趣,因此默认路由对IPv4和IPv6都适用。其次,我需要从自己的AS宣传自己的IP空间。为了生成前缀,我创建了2条静态路由来通告整个子网,因此以后可以使用它。
成功
现在,建立动态路由配置是一回事。要使前缀被任何上游网络接受,必须确保管理到位。当我住在欧洲时,我的IP资源来自RIPE。
顺便说一句:如果您想了解有关RIPE,RIPE NCC和路由安全性的更多信息,请确保您收听我们与Nathalie Trenaman录制的有关这些主题的路由表播客!
您必须确保为您的前缀创建了一个ROUTE对象,该对象还指定了这些前缀的原始AS。当您在那里并以任何方式登录时,请确保您还创建了ROA对象,以便RPKI在其前缀起源于AS时将其标记为有效 !
大多数提供程序将对他们的对等方应用某种形式的过滤,这意味着我还必须确保上游提供程序接受了我的AS和前缀。这意味着我必须包含在上游提供程序的AS-SET对象中。
我通常使用 bgpq3工具来验证是否正确设置了我的对象(不能保证,因为您的提供者可以使用其他工具来收集此信息)
NAT
现在终于可以使用前缀了,现在就将其通告并接受。我设置了一个简单的源NAT规则,因此我的出口流量使用自己子网中的IP地址作为浏览Web的源。
SRX拥有默认的源NAT规则,以接受来自信任 区域的所有流量,这些流量 将变为不 信任, 并使用接口IP地址作为源IP。我想将其从自己的子网更改为IP,这需要创建一个池(即使所有内容都转换为1 IP)。
做完了?
现在,我可以通过自己的家庭互联网连接从自己的IP空间浏览互联网!