当自己有时候写项目玩又还没写好,却想要它现在能给别人访问怎么办呢?
那当然是今天的主角——内网穿透
使用啥工具进行内网穿透
主要原因:①免费(ps:能不花钱我绝不花钱)②用起来特简单(我太笨了,只适合简单好用的)
废话少说,直接开始!
环境说明
云服务器:CentOS7.6-Docker20
本地机器:Windows 系统
要干哪些事?
先了解其大概原理:
frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。
用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。
由上可知,我们要配置的就两个:frp 服务端和客户端
服务端配置
先切换到root目录,(到哪都行)但为了方便你后面可以直接 cv ,所以跟我一样方便一些
cd~
下载frp
wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
然后解压
tar -zxvf frp_0.36.2_linux_amd64.tar.gz
文件夹改个名,方便使用
mv -r frp_0.36.2_linux_amd64 frp
进入该目录
cd frp
查看一下文件
ls -a
我们需要关注一下这4个文件
frps frps.ini 这两个是服务端使用的
frpc frpc.ini 这两个是客户端使用的,这里可以直接删掉,也可以不删,随你
编辑 frps.ini 文件
vi frps.ini
这个文件应有如下格式,编辑完成后保存
[common] bind_port = 7000
bind_port 表示用于客户端和服务端连接的端口,随便一个未占用的端口即可,后面客户端也会用到
然后我们就可以运行frps的服务端了
./frps -c frps.ini
如果在启动后输出内容最后看到 Start frps success,那恭喜你,已经成功了一半
为了方便日后使用,我们使用 systemctl 的方式 管理 frp服务
切换到 /lib/systemd/system
cd /lib/systemd/system
创建一个文件 frps.service
touch frps.service
编辑 frps.service
vi frps.service
将下面这段直接 c v
[Unit] Description=frps service After=network.target syslog.target Wants=network.target [Service] Type=simple #启动服务的命令(此处写你的frps的实际安装目录) #ExecStart=/your/path/frps -c /your/path/frps.ini ExecStart=/root/frp/frps -c /root/frp/frps.ini [Install] WantedBy=multi-user.target
然后就可以通过下面指令对 frps 进行操作了
启动
systemctl start frps
设置自启动
systemctl enable frps
停止
systemctl stop frps
重启
systemctl restart frps
查看应用的日志
systemctl status frps
客户端配置
下载: frp_0.36.2_windows_amd64.zip
解压在随便哪个喜欢的目录下,因为现在这里是客户端,所以也可以直接删除其中的 frps 和 frps.ini 文件。随你
打开frpc.ini,进行如下配置
[common] server_addr = x.x.x.x server_port = 7000 [web] type = tcp local_ip = 127.0.0.1 local_port = 8081 remote_port = 8081 #如果想多几个端口能被访问则像下面这样加就行了,[] 里名字要不一样 #[web1] #type = tcp #local_ip = 127.0.0.1 #local_port = 8082 #remote_port = 8082
其中common字段下的三项即为服务端的设置。
server_addr
为服务端IP地址,填入即可。server_port
为服务器端口,填入你设置的端口号即可,如果未改变就是7000
web字段都是自己定义的规则,自定义端口对应时格式如下。
[xxx]
表示一个规则名称,自己定义,此处由于我部署的是web服务,所以起名为web。type
表示转发的协议类型,有TCP、UDP、HTTP、HTTPS等选项可以选择,如有需要请自行查询frp手册。
当然你只要跟我一样就行了local_ip
和local_port
配置为本地需要暴露到公网的服务地址和端口。local_ip
可以填你本地虚拟机的ipremote_port
表示在 frp 服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口。- 简而言之:当其他人访问
server_addr:remote_port
时就能访问到local_ip:local_port
配置完成 frpc.ini 后,就可以运行frpc了,frpc程序不能直接双击运行!
然后在上方地址栏中输入:powershell 后 回车
然后输入:
./frpc -c frpc.ini
(ps:这是之前用到时记下的,所以日期不对不必大惊小怪)
不要关闭此窗口,此时别人就可以通过server_addr:remote_port,访问你本地机器了,并且在窗口上会动态输出访问信息
如果有其它使用需求,请查看官方文档 frps.cn/11.html
其它的应用
除了能让自己项目在未部署的情况下也能访问之外,它还有什么作用呢?以下就举例两个我遇到的吧,如果还有啥好用的欢迎评论区补充。
①在学redis分片集群的时候总感觉三主三从全放一台机器上不对味,又没钱搞几台服务器,咋办呢?当然是用本地虚拟机里面的了,但怎么才能让本地虚拟机里的和服务器联系起来呢,就用上面说的内网穿透就🆗
②旧电脑卖出去也值不了啥钱,有啥办法利用一下呢?咱直接以后买云服务器的时候买最low的,然后项目之间在本地部署,电脑不关机当服务器用好了