如何将stream量从专用networking路由到openvpn子网(和返回)

我在Linode有几台服务器。 我试图设置它们,所以我有一个VPN到一台机器,然后可以访问所有其他机器使用私人linodenetworking。 然后,公共访问私人服务(SSH等)将仅限于那些有VPN访问权限的用户。

注意:我还没有在这些服务器上运行防火墙

root@internal:~# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 

内部服务器(运行openvpn服务器)

 eth0 Link encap:Ethernet HWaddr f2:3c:91:db:68:b4 inet addr:23.239.17.12 Bcast:23.239.17.255 Mask:255.255.255.0 inet6 addr: 2600:3c02::f03c:91ff:fedb:68b4/64 Scope:Global inet6 addr: fe80::f03c:91ff:fedb:68b4/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:80780 errors:0 dropped:0 overruns:0 frame:0 TX packets:102812 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:14317079 (14.3 MB) TX bytes:17385151 (17.3 MB) eth0:1 Link encap:Ethernet HWaddr f2:3c:91:db:68:b4 inet addr:192.168.137.64 Bcast:192.168.255.255 Mask:255.255.128.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:172.20.1.1 PtP:172.20.1.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:2318 errors:0 dropped:0 overruns:0 frame:0 TX packets:1484 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:174573 (174.5 KB) TX bytes:170941 (170.9 KB) 

以上评论:

  • eth0是公共接口
  • eth0:1是专用networking的接口
  • VPN隧道正常工作。 从连接到VPN的客户端,我可以ping 172.20.1.1和192.168.137.64。
  • net.ipv4.ip_forward = 1在此服务器上设置

数据库服务器(nix03):

 root@nix03:~# ifconfig eth0 Link encap:Ethernet HWaddr f2:3c:91:73:d2:cc inet addr:173.230.140.52 Bcast:173.230.140.255 Mask:255.255.255.0 inet6 addr: 2600:3c02::f03c:91ff:fe73:d2cc/64 Scope:Global inet6 addr: fe80::f03c:91ff:fe73:d2cc/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:12348 errors:0 dropped:0 overruns:0 frame:0 TX packets:44434 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1166666 (1.1 MB) TX bytes:5339936 (5.3 MB) eth0:1 Link encap:Ethernet HWaddr f2:3c:91:73:d2:cc inet addr:192.168.137.63 Bcast:192.168.255.255 Mask:255.255.128.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 

以上评论:

  • eth0是公共接口
  • eth0:1是专用networking的接口
  • 我可以ping专用接口(192.168.137.64)上的内部服务器。

目前的问题

我希望能够通过VPN击中数据库服务器。 从我的VPN客户端(笔记本电脑在我的办公室),我想能ping通192.168.137.63。 但是,目前失败了。

在我尝试排除故障时,我决定从数据库服务器端接近它,看看是否可以在内部服务器上ping通VPN隧道(172.20.1.1)。 我意识到我需要在数据库服务器上设置一个路由来告诉它将数据包发送到172.20.1.0/24networking的位置,所以我这样做了:

 root@nix03:~# ip route add 172.20.1.0/24 via 192.168.137.64 root@nix03:~# ip route list default via 173.230.140.1 dev eth0 172.20.1.0/24 via 192.168.137.64 dev eth0 173.230.140.0/24 dev eth0 proto kernel scope link src 173.230.140.52 192.168.128.0/17 dev eth0 proto kernel scope link src 192.168.137.63 root@nix03:~# ip route get 172.20.1.1 172.20.1.1 via 192.168.137.64 dev eth0 src 192.168.137.63 cache 

所以, 我认为基于上述,当我ping 172.20.1.1时,我的服务器应该发送数据包到192.168.137.64(内部服务器)。 该服务器应该由于IP转发而从eth0:1中获取数据包并将其路由到tun0(172.20.1.1)。

但是,正如您可能已经猜到的那样,从nix03(db server)ping 172.20.1.1不起作用。

我做了一些数据包捕获,看看我的ICMP数据包发送到哪个MAC地址:

root @ nix03:〜#tcpdump -i eth0 -e icmp tcpdump:详细输出被抑制,使用-v或-vv完全协议解码在eth0上侦听,链路typesEN10MB(以太网),捕获大小65535字节16:41:39.623759 f2:3c:91:73:d2:cc(oui未知)> f2:3c:91:db:68:b4(oui未知),ethertype IPv4(0x0800),长度98:192.168.137.63> 172.20.1.1:ICMP echo 3315,seq 33653,length 64 root @ nix03:〜#arp地址HWtype HWaddress标志掩码Iface 192.168.137.64 ether f2:3c:91:db:68:b4 C eth0

这就告诉我数据包应该到达内部服务器。 至less,他们正在被发送到正确的网卡。 但是,当我在内部服务器的eth0和eth0:1上运行tcpdump时,没有看到从db服务器进入的任何icmp数据包。

我还有什么可以尝试? 提前致谢。

更新#1

“内部”服务器的路由表:

 Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default gw-li686.linode 0.0.0.0 UG 0 0 0 eth0 23.239.17.0 * 255.255.255.0 U 0 0 0 eth0 172.20.1.0 172.20.1.2 255.255.255.0 UG 0 0 0 tun0 172.20.1.2 * 255.255.255.255 UH 0 0 0 tun0 192.168.128.0 * 255.255.128.0 U 0 0 0 eth0 

我最终不得不添加一个NAT规则到内部服务器。 我不确定它的必要性,但它是什么工作:

 *nat :PREROUTING ACCEPT [21:1248] :INPUT ACCEPT [21:1248] :OUTPUT ACCEPT [21:1529] :POSTROUTING ACCEPT [21:1529] # enable NAT for VPN clients so they can hit the private network -A POSTROUTING -s 172.20.1.0/24 -o eth0 -j MASQUERADE COMMIT 

我遇到了同样的问题,得出Linode不适合这种VPNconfiguration的结论。

首先:你从192.168.137.63(nix03上的eth0:1)到172.20.1.1(内部的tun0)试图做的(设置路由)的确是正确的,并且在非Linode设置中起作用。 我在Linode论坛中描述了相同的设置, 我从Linode的一位员工那里得到了一个回复,告诉我Linode禁止这种设置 。

而且,即使将NATstream量与内部networking进行NAT转换确实是另一种正确的方法,请记住,192.168.128.0/24子网对您来说不是私有的,但是对于所有使用与您处于同一数据中心的VM的Linode客户。 试试nmap来检查我在说什么:

 nmap -sP 192.168.128.0/17 

所以,在Linode的情况下,如果你真的想要:

公共访问私人服务(SSH等)然后将被限制在只有那些谁有VPN访问。

您需要仔细设置您的防火墙,以便只允许准确的IP地址访问,因为该子网仅在Linode数据中心客户的字词含义中是私有的。