补坑来了,上次写过cpolar实现免费的内网穿透,但是最大的问题在于免费版不能用自己的域名,毕竟是第三方提供的服务器,免费的都有限制,刚好自己有一台阿里云的云服务器,所以比较完美的方法是用开源的frp自己搭建一个内网穿透服务器,这样就可以用阿里云的公网ip绑定自己的域名了。
或许有人会问,既然已经有了公网服务器为啥还要内网穿透?毕竟公网服务器都比较贵啊,楼主的阿里云服务器一年将近700块,才2g内存,40g存储,如果把想要跑的服务都跑在上面,很快就熬不住了,不如就拿来做内网穿透服务器,就起个转发功能,自己家里买个树莓派,安装linux系统,就可以跑各种东西了,也不用担心存储的问题。
Frp是一款流行的跨平台开源免费内网穿透反向代理应用,支持 Windows、macOS与 Linux,支持 TCP、UDP 协议,支持http 和 https 协议,在公网服务器安装一个server端,内网服务器安装一个客户端,起到一个中转转发的作用,从而实现内网暴露到外网,实际就是一个反向代理转发器。
服务器端安装配置 Frp
FRP 使用 Go 语言开发,可以支持 Windows、Linux、macOS、ARM 等多平台部署。FRP 安装非常容易,只需下载对应系统平台的软件包并解压就可用了。这里以 Linux 系统为例:
export FRP_VERSION=0.32.1
sudo mkdir -p /etc/frp
cd /etc/frp
sudo wget "https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gz"
sudo tar xzvf frp_${FRP_VERSION}_linux_amd64.tar.gz
sudo mv frp_${FRP_VERSION}_linux_amd64/* /etc/frp
截止写这篇文章为止,github上的最新版本是0.32.1,如果以后出了更新的版本只要改一下上面的版本号就行了,可以去https://github.com/fatedier/frp/查看最新版本信息。
FRP 默认提供了 2 个服务端配置文件,一个是简化版的 frps.ini,另一个是完整版的 frps_full.ini。初学者只需用简版配置即可,在简版 frps.ini 配置文件里,默认设置了监听端口为 7000,可以按需修改它。
需要将服务器的系统防火墙安全组放行,设置 7000
或修改过的对应端口的「允许入站和出站」,否则会一直连接不上的哦!!!这个切记!!
启动 FRP 服务端(非后台启动,未配置开机自启的情况下)
./frps -c ./frps.ini
如服务器使用 Win 系统,假设解压到 c:\frp 文件夹,那么只需这样启动:
c:\frp\frps.exe -c c:\frp\frps.exe
当然,这样的启动一般测试可以,生产环境多数为后台启动,需要配置后台运行和开机自启
使用systemctl配置后台运行和开机自启
sudo vim /lib/systemd/system/frps.service
在frps.service里写入以下内容
[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/etc/frp/frps -c /etc/frp/frps.ini
[Install]
WantedBy=multi-user.target
启动frps
sudo systemctl start frps
#打开自启动
sudo systemctl enable frps
如果要重启应用,sudo systemctl restart frps
如果要停止应用,sudo systemctl stop frps
如果要查看应用的日志,sudo systemctl status frps
如果启动时7000端口被占用
#查看端口号
netstat -anp|grep 7000
或
#查看端口号
lsof -i:7000
或
#查看程序进程
ps -ef|grep frps
得到进程id(pid)之后,杀掉进程
kill -9 进程号
至此服务端安装完毕并已经启动
配置frp客户端(内网机器上)
可以将 Frp 客户端安装在内网的 Windows 电脑、Linux 设备 比如树莓派 或者 NAS,甚至部分路由器等设备上。Linux 客户端的安装和启动与服务器端没有太多区别,只是对应运行程序是 frpc 而不是 frps。
如果是linux设置,安装和设置重启过程这里就省略了,和上面一样的,如果是windows电脑,Frp 是绿色程序,下载软件包回来解压后,启动 frpc.exe 即可。
在启动前,我们需要先修改配置文件frpc.ini
比如服务器的公网ip是1.2.3.4.5
[common]
server_addr = 1.2.3.4.5
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7001
[RDPDEEPIN]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7002
[RDPWINDOWS]
type = tcp
local_ip = 192.168.0.109
local_port = 3389
remote_port = 7004
[TOMCAT]
type = tcp
local_ip = 127.0.0.1
local_port = 8081
remote_port = 7003
如上,中括号里面的文字是标识,可以自定义,第一个server-port = 7000
是服务器上的server端端口。
这里配置了四个应用,分别是
1.ssh远程登录22端口,映射公网的7001;
2.rdp协议的deepin桌面连接3389端口,映射公网的7002;
3.rdp协议的内网ip为192.168.0.109的windows3389端口,映射公网的7004;
4.tomcat应用,8081端口映射公网的7003
以上还可以配置更多端口,上面的7001到7004都要在服务器安全组放行
启动frp客户端
linux和上面写的服务端启动方法一样
windows假设已将 Frp 的客户端解压缩到 c:\frp 目录中,那么启动 Frp 客户端的命令就是:
c:\frp\frpc.exe -c c:\frp\frpc.ini
Linux 启动 Frp 客户端命令(非后台启动,未配置开机自启的情况下):
./frpc -c ./frpc.ini
启动之后看到 “start proxy success”字样就表示启动成功了。
远程访问
公网ip:7001就可以ssh连接到内网的deepin
公网ip:7002就可以rdp连接到内网的deepin桌面
公网ip:7004就可以rdp连接到内网的windows
公网ip或域名:7003就可以访问到内网的tomcat应用
这样真的就完美舒服了。
参考:https://www.iplaysoft.com/frp.html
https://blog.csdn.net/x7418520/article/details/81077652