不设置路由器就可以实现外网访问内网,很好用,一用就可以的

开源的内网穿透软件一般都没有断线重连功能,基本没有什么用,国内除了花生壳和神卓互联两家的内网穿透达到了企业级的稳定性,但是收费啊,需求场景是这样的,公司有一个测试的Mysql数据库,里面存放我们测试用的表格,因为在家里办公的缘故,需要我们在家里访问这个Mysql,经理让我来负责,因为没有公网IP,设置路由器转发是不可能的了,只能用内网穿透,试了开源的FRP和ngork,只能呵呵了,毕竟是开源的,用了一段时间就自动断了,经过多次摸索,我发现了一个无需公网IP访问内网的方法:就是使用P2P,但是在完成的过程中也是有许多坑的,这里就说一下p2p和一路上遇到的坑,如下:

p2p技术,又称为点对点(peer-to-peer),可以直接跨越NAT实现内网主机直接通讯。实现方式包括:中继(Relaying),逆向链接(Connection reversal), udp打洞(UDP hole punching)。中继方式是比较传统且效率较低的一种,不推荐使用,本人采用的是udp打洞,可以极大的降低服务器的压力,提高作业效率。
首先,我们需要三台机器来搭建环境,一台处在内网的主机A,一台处在内网的主机B,一台处在公网的机器C。
那下面就来说说我踩过的坑吧。
环境部分的影响因素:
1:部署位置。我们需要将服务端部署在公网环境中。
2:客户端与服务端的防火墙必须都处于关闭状态。
3:客户端与服务端的通信协议必须保持一致(ipv4与ipv6)。
4:保证网络稳定。
代码部分的影响因素:
1:内网主机穿透时必须是异步发起连接。
2:在穿透时,新建的连接,需要先设置SO_REUSEADDR,再绑定端口,最后进行连接,顺序不能错。
3:客户端获取本地ip地址时候,不能使用程序提供的封装方法:InetAddress.getLocalHost().getHostAddress(),需要手动设置改成实际的IP地址,因为有的机器可能有多个网卡或虚拟网卡,不该成当前实际的IP会导致使用错误的IP地址。(最重要的一点,深坑,这点会导致打洞失败!!!)
最后,等我把以上的坑躺完以后,发现花生壳和神卓互联都可以用的,心塞。。。好在我p2p已经做好了

不设置路由器就可以实现外网访问内网,很好用,一用就可以的