搭建通往私有内网web服务器的路

项目开发分为生产环境和测试环境,有很多时候测试环境也需要和外部系统互通,目前主要是采用互联网的形式。我们的测试环境更特殊一些,他不仅仅是在内网,而且是在内部私有云上,外部只能通过VPN访问。而且这个VPN有很多限制,例如:

  • 只能使用cisco anyconnect客户端,这个客户端只能安装在windows机器上,不支持Linux;
  • 只要启动了VPN客户端,这个windows机器就只能访问云上的测试环境,不能访问互联网了;
  • VPN登录需要用户名和密码,如果其他单位客户要使用,我们需要给他们提供用户名密码,有安全问题;
  • VPN安装过程复杂,需要安装证书等,有些机器无法安装成功。

我们开发的应用是要对外发布互联网接口的,客户需要调我们的接口来完成他们需要的功能。在生产环境下没什么问题,因为生产环境有自己的域名也支持互联网访问。但在测试环境就有问题了,客户如何调用我们在云上的服务就是一个难题。在经过引导客户装VPN遇到各种问题,被客户各种吐槽后,我们开始想解决之道。一个方案是打通一条不使用VPN的路,可以让互联网直接访问,这需要协调多个部门,开通各种网络访问关系,很复杂。另一个方案就是现在要讲的方案,通过虚拟机支持多网卡的特点,我们可以实现在一台物理机同时访问互联网和vpn,结合NAT穿越可以实现通过互联网直接访问内网服务器。大体的网络配置图如下:

网络配置示意图

这里有几个要点:

  1. 虚拟机要有两个网卡,其中网卡1可以访问互联网(可以是桥接或NAT模式),这个网卡是用来给VPN客户端使用的;另一个网卡2要配置成host only,实现和物理主机的双向访问;
  2. 在虚拟机中要安装nginx,监听80端口,并将请求转发到内网服务器的nginx服务器上,转发http请求;
  3. 在物理机中安装nginx,监听80或443端口,将收到的http/https请求转发到虚拟机的nginx服务器的80端口;
  4. 在物理机中安装frpc客户端,联通与互联网服务器的frps服务器的交互,并将请求转发给本机nginx服务器;
  5. 在互联网上的服务器中安装frps服务器,将收到的请求转发给frpc客户端;
  6. 购买一个公网的域名,指向这个互联网服务器,一个域名很便宜,一年8元就可以了。

物理机的nginx和frpc配置见这里,大家可以参考使用。

参考资料

  1. 使用内网穿透工具frp
  2. ZeroSSL,支持多域名的在线 Let’s Encrypt SSL 证书申请工具
  3. frp github
  4. Nginx通过二级目录(路径)映射不同的反向代理,规避IP+端口访问

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《ITechLib》

留言:

(lesstile enabled - surround code blocks with ---)