阿里云+frp实现内网穿透
阿里云+frp实现内网穿透
最近更新:2022年10月10日10:39:12
1. 云服务器购买
随便买一个就行,主要是需要服务的一个公网ip。(点击立即购买
默认创建即可,操作系统可选CentOS
)
2. 查看实例并开启远程连接
点击云服务器ECS->实例
进入实例管理界面,大概长这样:
然后点击实例右边的远程连接
打开服务器的控制终端。
建议开启免密登陆,监控调试很方便。
点击打开后能够看到如下界面:
3. 在阿里云服务器下载frp相关文件
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
frp下载页面地址:https://github.com/fatedier/frp/releases
frp官方示例文档:https://gofrp.org/docs
选择这里的linux_amd64
版本,然后鼠标放上面右键选择复制链接地址
,之后切换回之前阿里云的终端控制台,使用wget
指令下载frp文件。
1 |
|
解压文件:
1 |
|
然后cd
进入frp_0.39.1_linux_amd64
目录,输入ls
可以看到以下文件:
文件解释:
frpc
——frp在客户端运行的文件,也就是需要穿透的内网环境下的主机需要运行的文件,与阿里云服务器这边无关可以删除。frpc.ini
——frp客户端的配置文件,用于定义一些监听和转发端口啥的。frps
——frp在服务器端运行的文件,这需要在阿里云服务器上运行。frps.ini
——frp服务器端的配置文件。systemd
——用于配置让frp服务一直在后台运行的文件,后面会讲。
4. 开放阿里云服务器端口,并设置frp后台运行。
4.1 回到阿里云“云服务器ECS->实例”界面,然后点击右侧的安全组
,点击默认的安全组进行配置管理。
手动添加入端口,比如我添加了这几个,一般添加两个端口就行
4.2 回到云服务器的控制台,查看、修改并运行frps
程序。
frps.ini
里面的内容如下:
1 |
|
注意:7000 是默认绑定的端口,这个端口与你自己开放的入端口的其中一个得对应,不然一会儿客户无法访问。
然后执行下面的语句服务器端程序就运行了。
1 |
|
一般情况下后台启动已经能够满足正常要求,只要你的云服务器没有关机,程序就一直在运行,但是如果关机之后就得需要打开云服务器的控制终端重新运行一下frps
程序。能不能让frps
程序开机自启动,不用每次关机后手动打开呢?systemd
文件就是用来干这件事儿的。
4.3 使用 systemd 管理 frp 服务
下面部分基本
ctrl + C V
知乎linux 技术栈
的文章,原文链接如下:《使用 systemd 管理 frp 服务》: https://zhuanlan.zhihu.com/p/382950791
- systemd 服务单元
systemd 拥有 11 个单元类型,分别是:服务(service)、套接字(socket)、设备(device)、挂载点(mount)、自动挂载点(automount)、 启动目标(target)、交换分区或交换文件(swap)、被监视的路径(path)、任务计划(timer)、 资源控制组(slice)、一组外部创建的进程(scope)。
其中,服务单元是以 .service
为后缀的单元文件,封装了一个被 systemd
监视与控制的进程。
服务的单元文件包括三个部分:[Service]
、[Unit]
和 [Install]
。
在 GitHub 上下载的 frp 压缩包中已经包含了对应 frpc 和 frps 的服务的 单元文件和单元模板文件。下面我们将分别讲解基于单元文件和基于单元模板文件进行管理 frps 服务(frpc 服务类似)。
- 基于单元文件管理 frps 服务
我们先使用 frps 的单元文件(frps.service
)进行管理 frps 服务。我们先看一下 frps.service
的文件内容:
进入阿里云服务器控制终端界面
cd systemd
,然后cat frps.service
可以看到如下内容。
下面是参数解释:
1 |
|
重点只需要关注ExecStart
,这里面是该服务的执行命令,其实也就是我们之前手动启动的命令行语句。接下来有两种更改方式:
- 更改
ExecStart
中命令语句的执行路径,因为bin
文件内是没有frps
程序的 - 将
frps
和frps.ini
移入到指定bin
和etc/frp
目录。
选择第二种方式部署frp
服务,执行步骤:
1 |
|
至此阿里云frps
程序的配置部署完整结束,接下来是内网主机的客户端设置。
2022年10月10日更新:
查看服务启动状态:
systemctl status frps
5. 内网主机的frp客户端配置
frp下载页面地址:https://github.com/fatedier/frp/releases
frp官方示例文档:https://gofrp.org/docs
同样去到frp的下载页面,下载对应版本的frp,我的内网主机是windows,所以下载的windows版本。
解压同样可以看到frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE systemd
这些文件,在配置客户端时只需要frpc
和frpc.ini
两个文件,其余都可以删掉(如果你的内网主机仍是Linux可以保留systemd
文件)。
打开frpc.ini
进行如下配置:
1 |
|
2022年10月10日更新:
可以添加多个内网主机(服务器):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[ssh2]
type = tcp # 默认
local_ip = 127.62.113.61 # 内网服务器地址
local_port = 22 # 内网服务器的端口,用于SSH连接
remote_port = 6001 # 这是阿里云服务器安全组中开放的另一个入端口
### 6. 利用winsw将frpc客户端程序封装成windows服务
-------
完成`.ini`文件的修改配置之后,同样可以通过执行下面的命令行语句手动运行frpc客户端程序。
```bash
# 前台启动 (frp_windows文件夹下运行cmd)
frps -c frps.ini
但是当你的cmd窗口关闭之后吧,程序就自动停止了,如果内网主机是Linux的话同样可以采用之前类似的方法将对应frpc.xxx
的文件移入相应路径,windows主机的话则需要winsw来对程序进行封装。
winsw下载地址:https://github.com/winsw/winsw/releases
找到对应的x64版本,下载到frp文件夹的相同目录下。
然后新建一个.xml
文件,里面填写一些windows服务参数
1 |
|
添加好后命名为winsw.xml
同样放在frp
文件夹的目录。
然后在当前frp
路径下打开cmd
窗口,输入winsw install
就可以创建服务了,配置成功后可以看到如下输出:
2022年10月10日更新:
如果要使用
winsw
进行服务部署,则需要把之前的下载的WinSW-x64.exe
更改为winsw.exe
如此才能找到指令。服务卸载使用
winsw uninstall
指令,如果显示已被标记删除
则重启一次电脑便会彻底删除。
之后便可在任务管理器服务一栏中看到frpc
服务已启动并显示正在运行,(如果显示已停止
右键点击,选择启动
即可)
然后便可通过在你的外网主机上配置120.77.61.888:6000
端口连接访问你的内网主机了,windows用户,用户名和密码就是开机的时候的用户名和密码,提供一份我的配置。
1 |
|
终于,完结撒花,特别感谢教研室硕哥的帮助指导。
2022年10月10日更新:
如果需要连接windows(内网主机)作为服务器,则需要在
windows ->设置->应用->可选应用
里面搜索安装openssh服务端程序,安装完成后用管理员权限打开cmd,输入net start sshd
开启ssh服务,输入net stop sshd
关闭ssh服务。
参考文章
【知乎】使用 systemd 管理 frp 服务:https://zhuanlan.zhihu.com/p/382950791
【CSDN】阿里云服务器实现frp内网穿透(完整教程)
【CSDN】阿里云服务器实现 frp 内网穿透:(完整教程)
文章名称一样,内容稍有不同。