简单易用的内网穿透姿势

657 阅读4分钟

什么是内网穿透

内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。就是说映射端口,能让外网的电脑找到处于内网的电脑,提高下载速度。不管是内网穿透还是其他类型的网络穿透,都是网络穿透的统一方法来研究和解决。 简单来说就是:外网访问内网指定机器指定端口

应用场景

  • 提供内网穿透服务
  • 连接内网服务器,在外网演示内网web站点
  • 无需服务器部署,快速调试本地程序,微信公众号开发利器
  • 支持http、https协议站点,省去证书中间件复杂配置,http协议站点直接升级为https站点
  • 支持TCP,UDP协议端口转发。支持数据库、SSH、远程桌面、网络摄像头等等开放到外网

frp工具的使用

搭建稍微复杂,但是非常灵活,目前内网穿透首选了。frp传送门

需要的工具

  • vps一台,随便什么云都可以

  • 自己的终端

内网穿透实现web服务

先登陆vps看看自己的处理器架构然后选择对应版本的frp

arch
// x86_64

选择amd64版本(frp_0.33.0_linux_amd64.tar.gz)

wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz

// 解压
tar -zxvf frp_0.33.0_linux_amd64.tar.gz
mv frp_0.33.0_linux_amd64 frp

vim frps.ini

// 添加下面配置
[common]
bind_port = 7000
dashboard_port = 7001
token = superYue
dashboard_user = frp
dashboard_pwd = frp
  • bind_port表示客户端和服务端连接的端口,默认是7000,需要跟客户端的bind_port保持一致。
  • dashboard_port是服务端仪表盘的端口,配置完成以后可以通过浏览器访问x.x.x.x:7500查看frp服务的dashborad。
  • token是用于客户端跟服务端连接的口令,连接口令,要跟客户端的token保持一致就行。
  • dashboard_user和dashboard_pwd表示打开仪表板页面登录的用户名和密码,登陆时候要用上。
vim frps.ini

添加如下配置:

[common]
bind_port = 7000
token = superYue
vhost_http_port = 10080
vhost_https_port = 10443
  • bind_port表示客户端和服务端连接的端口,默认是7000,需要保持和客户端的bind_port一致。
  • token跟服务端设置的token保持一致。
  • vhost_http_port和vhost_https_port用于服务端主机访问的端口,需要再vps安全组里添加此端口,保持端口放行。

启动

./frps -c frps.ini

// 守护进程
nohup ./frps -c frps.ini

打开配置的x.x.x.x:7500就可以看到仪表板截面。

img

客户端设置

安装同样版本的frp,安装方法一样,mac上面需要使用 frp_0.33.0_darwin_amd64.tar.gz这个版本

vim frpc.ini

[common]
server_addr = xxxxx
server_port = 7000
token = superYue

[web]
type = http
local_port = 9003
custom_domains = xx.xx.xx
  • server_addr使用的是外网机器IP。
  • server_port服务端设置的端口。
  • local_port为本地客户端启动的web服务。
  • type为代理的类型,web服务设置为http类型。
  • custom_domains为外网VPS绑定的访问域名或者机器的IP。

启动客户端

./frpc -c frpc.ini

// 守护进程
nohup ./frpc -c frpsc.ini

启动成功之后,使用外网IP或者域名:vhost_http_port,即custom_domains:10080,就可以通过外网的访问自己内网/本地启动的web服务了。

内网穿透实现SSH连接

配置 frpc.ini

vim frpc.ini

[common]
xxx/ 不赘述了

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 8001
  • server_addr就是你公网服务器的IP。
  • server_port服务端设置的端口。
  • token跟服务端设置的token保持一致即可。
  • type为代理的类型,SSH服务设置为tcp类型。
  • local_ip为本地IP。
  • local_port为内网客户端设置的SSH端口。
  • remote_port为内网提供给外网访问的服务端口。

启动方式跟穿透Web服务一样,这样我可以通过服务器公网IP和8001端口来连接本地的机器了(SSH)。

ssh -p remote_port username@server_addr
  • remote_port使用的是内网机器设置的端口。
  • username使用的是内网机器的用户名。
  • server_addr使用的是外网机器IP。

frp还有很多其他协议支持,tcp,udp,http,https,stcp, 但是frp的配置方式稍微繁琐,并且需要有自己的vps,下面介绍的工具就非常简单了。

ngrok工具的使用

打开ngrok官网注册一个账号后登录,ngrok官网

下载客户端

img

配置客户端authtoken

首页基本给了你想要的一切

command 方式

./ngrok authtoken xxxx

config 方式

cd ~/.ngrok2/ngrok.yml
authtoken: xxxxx

开始做内网穿透

img

假设你在本机上启动了一个端口号为8000的服务,使用内网穿透工具将当前8000端口的服务映射到外网去。 打开ngrok客户端

ngrok http 8000

img

这样就可通过外网访问 http://24a2c2f8390e.ngrok.io 自己内网的服务啦,是不是非常简单。但是比frp搭建少了一些灵活性,但是不能自定义域名之类的,用来临时处理一下内网穿透需求还是很方便的。

小结

当然内网穿透的姿势远不至这些,有兴趣的话自己研究把,希望上面的内容可以帮到大家。