我有以下设置
2 x linode vps 1 x lab (physical) running 4 vps
我的目标是让所有的节点都像在同一个局域网上一样。 这将允许我改变IPTable规则,只允许本地stream量,而不必为每个需要访问目标节点端口的服务器添加一个新的IPTable条目。
我已经做了一些初步的研究和testing,似乎无法find我正在努力完成的最佳解决scheme。 在开始configuration实际生产VPS之前,我一直在使用位于不同子网上的两个实验室VPS进行实践。
实验机有两个物理的nics; eth0和eth1。 eth1被设置为为VPS提供虚拟nics的桥梁。
安装如下
service-a-1 (physical node): eth0: 192.168.0.1 eth1: br0 br0: 192.168.0.2 service-a-2 (vps): eth0: 192.168.0.3 eth0:0 10.0.0.1, 255.255.192.0 eth0:1 10.0.1.1, 255.255.192.0, gw 10.0.0.1 service-a-3 (vps): eth0: 192.168.0.4 eth0:0 10.0.64.1, 255.255.192.0 eth0:1 10.0.65.1, 255.255.192.0, gw 10.0.64.1
我使用192.168.0.x的 ip addies连接到VPS,但10.0.x ip addies练习连接子网。 上述devise的目标是通过网关ipsbuild立service-a-2和service-a-3之间的安全隧道, 10.0.0.1和10.0.64.1 。 然后,对于每个子网中的所有其他节点,使用已经build立了隧道的网关,所以我不必为每个子网上的每个节点都创build一个新的隧道。
要testing连接,我一直在使用: ping -I 10.0.1.1 10.0.65.1 ,它应该模拟子网1上的节点1和子网2上的节点1之间的通信。
我试图按照本教程中的说明进行操作,因为它看起来非常简单,但在阅读其他文章之后,不确定它是否真正encryption,因为模式设置为“gre”。 但是在阅读了关于使用OpenSSH的一些信息后,似乎需要为子网上的每个节点build立一个新的连接,而在两个网关之间build立一个单独的连接。
经过更多的search后,我发现了一个由linode提供的文章 ,看起来很有希望,但在前几段提到OpenSSH是首选的方法(通过OpenVPN)来完成我正在寻找的东西。
所以我的问题是一个双方的问题:
我的逻辑对于尝试连接子网是有效的吗? (在网关之间build立隧道,然后将网关分配给子网上的每个节点)
在两个网关之间build立隧道的最佳方法是由其各自子网内的X个节点共享? 使用Linux路由,OpenSSH,OpenVPN,或其他?
– 更新 –
经过一番讨论后,似乎我需要在不同的路由器之间build立一个Open-SSH隧道(用于encryption)。 隧道将连接两个路由器的外部ips,我假设,如果设置正确,将允许我访问另一端路由器后面的节点。
别的东西在我身上发现,说我有以下的设置:
subnet-1: Office #1, San Diego, CA subnet-2: Colo #1, Dallas, TX subnet-3: Colo #1, Tokyo, Japan subnet-4: Colo #1, Sydney, Australia
在每个子网之间build立隧道作为虚拟局域网是否有意义? 正如我在原始问题中提到的那样,我这样做是为了让IPTables可以允许任何来自10.0.0.0/18的stream量,而不必针对每个需要从另一个服务器访问的服务器使用iptables。
再往后退一步,在每台服务器上运行IPTables是否有意义? 也许只是阻止防火墙后面的所有服务器上的IPTables会更容易些。 我认真对待安全问题,即使在防火墙后面,在每个节点上运行IPTable似乎也是常识。 但是,如果某人获得对一个节点的访问权限,理论上他们可以访问其他节点,就好像它们没有运行IPTables一样,因为在每个服务器上都有一个10.0.0.0/18的规则。
– 更新#2 –
所以我有n2nconfiguration如下:
service-a-1 (behind router, but pinholed 55554 udp): IP config: ifcfg-eth0: inet addr:10.0.0.1 Bcast:10.0.63.255 Mask:255.255.192.0 HWaddr 00:1B:78:BB:91:5A n2n (edge) startup: edge -d n2n0 -c comm1 -k eme -u 99 -g 99 -m 00:1B:78:BB:91:5C -a 10.0.0.1 -l supernode1.example.com:55555 -p 55554 -s 255.255.192.0 service-a-3 (linode vps): IP config: ifcfg-eth0: inet addr:4.2.2.2 Bcast:4.2.127.255 Mask:255.255.255.0 HWaddr F2:3C:91:DF:D4:08 ifcfg-eth0:0: inet addr:10.0.64.1 Bcast:10.0.127.255 Mask:255.255.192.0 HWaddr F2:3C:91:DF:D4:08 n2n (server) startup: supernode -l 55555 -v n2n (edge) startup: edge -d n2n0 -c comm1 -k eme -u 99 -g 99 -m F2:3C:91:DF:D4:08 -a 10.0.64.1 -l supernode1.example.com:55555 -p 55554 -s 255.255.192.0
有了这个设置,我完全期待从service-a-1(10.0.0.1)ping到service-a-3(10.0.64.1),但是我总是收到“目标networking不可达”。 两台服务器上的IPTable都已closures,但service-a-1位于防火墙后面,但configuration为允许所有出站stream量。 任何想法,为什么我不能ping这两个子网之间,就好像它是一个扁平的networking?
您可以简化解决scheme…
如果你正在寻找一种连接所有这些服务器(不是路由器或网关设备)的方法,就好像它们在一个平面networking上一样,我build议你从ntop看n2n点对点的产品 。
这个工具允许你遍历中间设备; 如果您无法访问防火墙或有复杂的路由问题,则会有帮助。 就我而言,我使用n2n来从一个中央位置监视客户端系统。 它比站点到站点的VPN更干净,我可以解决重叠的子网/ IP地址问题。 想想看…
编辑:
我build议使用n2n_v2分叉和手工编译。
n2n的configuration示例如下所示:
在你的超级节点上 ,你需要select一个UDP端口,通过超级节点系统前的防火墙。 比方说UDP端口7655,名字edge.mdmarra.net :
# supernode -l 7655 -f -v # edge -d tun0 -m CE:84:4A:A7:A3:40 -c mdmarra -k key -a 10.254.10.1 -l edge.mdmarra.net:7655
在客户端系统上,您有很多select。 您应该select隧道设备名称,MAC地址(可能),团体名称,密钥/秘密IP地址和超级节点的地址:端口。 我倾向于使用更完整的命令string:
# edge -d tun0 -m CE:84:4A:A7:A3:52 -c mdmarra -k key -a 10.254.10.10 -l edge.mdmarra.net:7655
这些可以在前台运行以进行testing,但是所有的function都在edge命令中。 我通常会把它包装在Monit框架中,以确保进程保持不变。
你可以build立一个GRE隧道,看看它是否适合你的需求。 总体思路(非常一般)接近于VPN解决scheme,只有没有所有的安全开销。 这是基于我的假设,你不需要或想要安全。
如果稍后您决定将安全性添加到链接,则可以这样做。 实现PPTP-over-GRE,甚至IPSEC-over-GRE相对比较容易。
虽然GRE是CISCO开发的技术,但它绝不是专有的。 许多Linux发行版都有build立GRE隧道的必要工具。
您可以查看关于PPTP-over-GRE的简要说明,因为它是在Arch Linux中实施的,这是我在大多数设置的服务器上使用的分发版本。