为什么要内网穿透
作为开发人员,经常需要远程家里、公司或者客户的电脑,又或者有什么其他需求如接口调试、局域网内打印机公网访问、家庭nas等,这些都需要在公网访问局域网内部的设备。远程桌面可能很多人都用过向日葵、TeamViewer等,可免费使用,但可能会限分辨率和限制流量。
内网穿透方案
这里介绍下我用的比较多的
花生壳
如果家里宽带有ipv4公网的(一般都不是固定ip),并且路由器支持动态域名解析的,设置好动态域名解析和端口转发或虚拟主机后,可通过设置的域名及端口访问相应的服务,这种方式是不会限制宽带的,之前家里就是用的这种方式,后边换了宽带没有公网的ipv4了。
路由器中设置动态域名解析:
路由器中设置端口转发和设置虚拟主机:
花生壳软件可实现内网穿透,可穿透局域网内任意ip及端口,但免费版本限流,偶尔用用其实也还可以。
FRP
FRP是一个高性能的反向代理应用,可以帮助你轻松地实现内网穿透,从而可以在不同的网络环境中访问内网服务器。
官网地址
NPS
轻量级、高性能的内网穿透代理服务器。
官网地址
以上两个都需要公网ip,有公网ip的机子下载服务端并运行服务,然后在需要内网穿透的地方下载一个客服端并运行,这两种官网都有很好的介绍和安装配置,这里就不介绍了。
如果没有公网ip4、公网ip6的只有借助云服务器了
介绍下公网ipv6的内网穿透
都知道因ipv4地址的数量问题,导致并不是每个宽带用户都能分配到公网的ipv4地址,但是现在家用宽带基本上分配了公网的ipv6的,甚至局域网内每个设备都分配了不同的公网ipv6,可以点击这个地址测试下,如果有显示ipv6地址,说明你的宽带分配了公网ipv6的,前提是你路由器也开启了ipv6
那么公网ipv6如何进行内网穿透呢?
关闭防火墙
现在绝大部分光猫及路由器,都不能对ipv6和ipv4的防火墙进行单独的设置,并且绝大部分路由器的端口转发及虚拟主机在ipv6的访问下会被防火墙拦截(家里路由器ipv4端口转发和虚拟主机可以跳过防火墙),所以先直接关闭光猫的防火墙和路由器的防火墙。
我家是光猫拨号的,所以关闭了光猫防火墙,光猫上连接两台路由器,一台路由器家用访问(没有关闭防火墙),一台路由个人专用(关闭了防火墙)。
获取ipv6
电脑window cmd命令 ipconfig命令
其中临时ipv6的地址, 就是分配给这台设备的ipv6地址
在关闭防火墙的情况下,可以通过这个地址访问远程桌面(前提是开启了远程服务)或其他服务
ipv6地址在浏览器下访问需要在地址前后加个中括号,例如:http://[2409:8a62:e53:1f84:7d1b:2f4b:382e:2398]:8080/login/index,在其他地方访问可以加中括号也可以不加
至此,该设备的内网穿透已经通了,可以在公网非当前局域网的地方访问当前设备的服务了,然后再部署上frp或者nps,安装frp和nps客户端的地方,就都可以公网访问了。(访问的地方也需要支持ipv6,要不然还是访问不了)
但是ipv6太长了,根本记不住
解决方案,修改访问设备的hosts配置,windows的大概位置在C:\Windows\System32\drivers\etc\hosts,用记事本或其他软件打开,设置例如 xxxx.com.cn 2409:8a62:e53:1f84:7d1b:2f4b:382e:2398,然后可直接访问域名进行访问了。
每次设备变更了ipv6地址,每次都去修改也很麻烦啊
终极方案,机子重启的时候,调用接口保存映射的域名及ip, 在客户端使用的时候, 定时调接口查询最新的域名和ip,同时写到hosts文件中去。如果有自己的域名(仅支持阿里云和腾讯云域名解析),可通过第三方免费的阿里云和腾讯动态域名解析,这个会保存在第三方的服务器的哈,安全问题自行甄别,我自己用这个动态解析主要是为了远程桌面,暂时没啥问题。
通过python,获取到了机子的ipv6地址后,保存域名与ip到了我自己的服务器(后边给大家分享出来),同时调了这个第三方的动态域名解析,我自己的域名恰好是腾讯云服务器的,在客户端通过SwitchHosts软件,可定时调用接口获取最新的域名与ip。