记一次内网穿透配置(tunnel)

一个挺重要的网站,奈何只能内网访问, 想着把他外网映射出来…遂为之


这篇文章应该是 2018/1/14时候就已经完成了,总是缺一点内容于是就没有post 出去。现在是时候了,因为完成同样的事情,现在有了第二个更好的解决方案,所以这这里 post 上去,做个对比。

这篇的方法十分的简单粗暴,使用了昂贵的资源,做了简单的事情,也是个反面教材。不过从底层的原理还是OK的。

原理分析

VPN simple概念

VPN 是 Virtual Private Network 的缩写, 翻译过来是虚拟专用网络.引用百科的话来讲:

虚拟专用网络的功能是:在公用网络上建立专用网络,进行加密通讯。在企业网络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。

VPN

通俗的讲, 使用VPN 技术,可以将 在公有网络的 两台主机, 进行一个私有的隧道链接, 效果,就和我们自家用的路由器一样. 在一个 VPN 下的子网主机是可以互相访问的(规则允许的话)

VPN 再协议栈层级很低的地方,一般在 2或者3 层,也就是数据链路层或者网络层,这里的 端口转发涉及到端端在第四层。

端口转发(Port-Tunnel) simple概念

一样援引百科的定义

端口转发(Port forwarding),有时被叫做隧道(tunnel),端口转发是转发一个网络端口从一个网络节点到另一个网络节点的行为,其使一个外部用户从外部经过一个被激活的NAT路由器到达一个在私有内部IP地址(局域网内部)上的一个端口。

很好理解的东西, 端口转发技术, 显然是用于端到端的通信. 端到端,在TCP/IP的协议栈中, 是包含了TCP和UDP 这两种数据传输方式, 所以可见所有的应用层的数据, 都可以使用端口转发(这也是 ss 和 http代理的区别).

在这里我们使用端口转发, 对Http请求进行直接转发.
port

实施

方案

先使用外网VPN服务器, 让内网主机接入其子网, 而后通过两次的端口转发(port-tunnel), 达到内网服务器
现在分析具体情况, 我们的内网外部不可访问, 内网主机可以互相访问, 我们的内网主机可以访问外网. 所以我们我要实现的是

  • 先使得我们的主机可以外网访问, 所以首先连接外网, 这里就选择了VPN.内网主机,和公网主机组合成一个子网
  • 内外网主机可以互相访问之后, 使用端口转发, 暴露公网主机的端口, 转发到我们的VPN子网的某个端口.实现外网访问我们内网的转发主机
  • 实现了转发主机的外网访问之后, 我们再在转发主机上, 进行二次转发. 让流量,从虚拟子网, 转发到内网可以访问的目标主机的80 .
  • 至此, 方案完成

ARCH

具体实施

这里使用 OpenVPN 在这里建立了VPN连接,为了方便管理和配置,(因为只是自己用),所以这里推荐使用 openvpn-as 是一个管理前端。免费版允许两台主机同时连接,自己使用实际上也是已经够了的。配置的过程这里年久失修,脑子里也没有了,难度系数一颗星。

在搭建完成之后,开始使用客户端进行连接,记得开放主机的安全组端口配置。连接之后,使用 ifconfig 应该会有个 Vlan的 interface 。这里就是我们的 VPN 子网。


有了子网之后,先互 ping 确保联通。之后使用这里的主角 rinetd 。是一个十分轻量级的端口转发工具。

0.0.0.0 2333 172.16.64.*** 80

启动脚本:

sudo pkill rinetd
sudo rinetd -c /etc/rinetd.conf

这样就实现了,在 2333 端口到目的主机的 80端口的内容转发,最终转发的就是我们的 HTTP 的请求。


同样的,在我们的云服务器上一样需要这样的配置,把用户们输入的请求,转发到我们的 VPN 的子网之中,到内网转发主机的模板端口,来再进行下一次转发。在公网主机上我们一样使用上面类似的配置。只不过,是从 公网 转发到 VPN 子网,反向操作。


综上,基本的链路已经实现和打通。还会有一点我问题。这样直接访问的话,得到的结果是 无法连接。 为什么?

因为,在默认的路由出了问题。

路由是什么?怎么用? 看篇文章:win7操作系统双网卡同时上内外网

所以文oveli对路由进行指定:让这个 IP 走我们的 199.1 的网关。

sudo route add -host 172.16.64.236 gw 192.168.199.1

至此,整个配置完成。(辣鸡方案)

后面的话

这篇文章,是一年前的烂尾了,现在才post出来,是为了后面的更好的方案做对比。

留下点什么吧