一、内网穿透基本原理
内网穿透又叫 NAT 穿透,常用的工具有很多,比如 ngrok、花生壳、frp等
frp 分为服务端与客户端,前者运行在有公网 IP 的服务器上,后者运行在局域网内的设备上,服务端默认会先开放 7000 端口,然后客户端与其相连。
同时客户端可以开启用于 ssh 的端口(如下面的3306),与服务端的某个端口(如下面的5200)做映射,这样我们在终端访问服务端的端口(5200)时,会自动转发到客户端去。
二、服务端安装(linux)
1、安装与启动
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 cd frp_0.33.0_linux_amd64/
服务端的配置文件是 frps.ini,默认绑定 7000 端口,如果购置了云服务器,注意打开 7000 端口。
[common] bind_port = 7000
通过 fprs 二进制文件启动 frp 服务。
./frps -c ./frps.ini
如下提示即是安装成功。
2、阿里云服务器放开7000、7500、5200端口
查看放开的端口
firewall-cmd --list-port
放开7000和7500端口
firewall-cmd --zone=public --add-port=7000/tcp --permanent firewall-cmd --zone=public --add-port=7500/tcp --permanent
firewall-cmd --zone=public --add-port=5200/tcp --permanent
重启防火墙
firewall-cmd --reload
云服务器的防火墙添加规则
3、设置dashboard_port 、dashboard_user 、dashboard_pwd
先关闭frps
ps -ef | grep frps kill -9 进程id
编辑frps.ini
vim frps.ini
添加内容如下:
[common] bind_port = 7000 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = 123456
重启frps,效果如下:
浏览器访问:http://公网ip:7500/,弹出对话框
输入用户名和密码后效果如下:
点击TCP
三、客户端安装(windows)
由于我是在windows系统中安装客户端,故需要下载windows版的frp安装包。注意:服务端的frp的版本要与客户端的frp的版本保持一致,比如服务端的版本为0.33.0
,那么windows版的frp也应该是0.33.0版本。
下载网址:https://github.com/fatedier/frp/releases
下载后解压,文件如下:
客户端的配置文件是 frpc.ini,c就是client了。配置如下:
[common] server_addr = 公网ip server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 3306 remote_port = 5200
common 为通用配置
- server_addr 为公网服务器 IP 地址
- server_port 为公网服务器配置的 7000 端口
ssh 用于终端命令行访问
- type 连接类型,默认为 tcp
- local_ip 本地 IP
- local_port 用于 ssh 的端口号,默认 22
- remote_port 映射的服务端端口,访问该端口时默认转发到客户端的 22 端口
3306是本地mysql的端口了,5200就是当我mstsc请求公网时,后面加这个5200,就能转发到我这台装有frpc的电脑上。
然后启动服务,cmd进入frpc.exe所在的目录
frpc.exe -c frpc.ini
启动成功后效果如下:
四、访问内网服务
1、远程访问内网的MySQL
使用navicat访问内网的mysql,ip输入公网服务器的IP,端口输入5200,用户名和密码输入内网服务器的MySQL的用户名和密码
2、远程访问内网服务器的nginx
内网服务器启动nginx,端口为8081,先确保在内网服务器可以访问nginx
修改frpc客户端的配置文件
[common] server_addr = 公网ip server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 8081 remote_port = 5200
重启frpc
在远程访问:http://公网ip:5200/,就可以访问到内网服务器的nginx。
注意:在远程访问时,ip为公网ip,端口为5200。
如果想访问内网服务器的端口为8082的tomcat,只需要改frpc客户端的配置文件,如下
[common] server_addr = 公网ip server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 8082 remote_port = 5200
当你访问http://公网ip:5200/时,访问的是内网服务器的tomcat。
如果既想访问内网服务器的8081的nginx,也想访问内网服务器端口为8082的tomcat,此时需要再加一个5201的端口。