本文最后更新于:July 6, 2019 pm
使用github上面的开源项目Frp和一台有公网IP的主机来实现反向代理(内网穿透),从而达到使用微软自带的远程桌面mstsc来远程没有公网IP的windows电脑和使用ssh远程Linux系统(Centos和Ubuntu)的效果。
本文不涉及反向代理的具体理论知识,使用的公网IP主机为阿里云主机(十块钱一个月的学生版),由于使用的阿里云主机带宽有限,因此使用远程桌面的效果可能比较一般,但是对于SSH远程来说肯定是足够了的。
需要注意的是,如果你的电脑本身所处的网络是有动态公网IP的,建议直接在路由器中设置DDNS,效果要比这个好很多,这个仅适用于那些没有公网IP的电脑。
1、服务端配置 首先我们对服务端的阿里云主机进行配置,当然有其他的公网IP主机都是可以的。这里使用的操作系统是CentOS7.3。
1.1 下载Frp github上各个配置版本下载地址
wget https://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz tar -zxvf frp_0.27.0_linux_amd64.tar.gzcp -r frp_0.27.0_linux_amd64 /etc/frpsrm -f frpc frpc_full.ini frpc.ini
这些就是剩下的我们需要的文件,这里我们可以看到有两个ini配置文件,其中frps_full,ini
是完整的带有注释说明和所有功能的配置文件,我们把需要的简单配置摘到frps.ini
这个文件,方便我们管理配置。
1.2 编辑配置文件 接下来我们编辑配置文件启用frp的监听端口7000和监控面板dashboard的监听端口7500。
[common] bind_addr = 0.0 .0.0 bind_port = 7000 auto_token = 你的连接认证密码dashboard_port = 7500 dashboard_user = admindashboard_pwd = 你的管理登录密码
需要注意的是,这上面说的7000和7500端口都需要在阿里云的防火墙里面配置放行,否则会无法访问。
1.3 设置开启自动和后台运行 我们新建一个文件,将Frps注册成Linux中的服务进程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 vim /etc/systemd/system/frpsd.service [Unit] Description=frps daemon After=syslog.target network.target Wants=network.target [Service] Type=simple ExecStart=/etc/frps/frps -c /etc/frps/frps.ini Restart= always RestartSec=1min [Install] WantedBy=multi-user.target systemctl start frpsd.service systemctl enable frpsd.service systemctl status frpsd.service systemctl restart frpsd.service
2、Windows客户端配置 2.1 下载Frp 我们按照之前的下载好对应的Windows版本之后,删除掉多余的frps服务端文件,只留下对应的frpc客户端文件。
2.2 编辑配置文件 [common] server_addr = 你的公网主机的公网IPserver_port = 7000 [MSRDP] type = tcplocal_ip = 127.0 .0.1 local_port = 3389 remote_port = 7777
这里的server_port
就是我们前面的服务端配置的端口7000,local_port
则是微软自带的远程桌面mstsc的默认端口3389,remote_port
就是到时候使用mstsc远程的时候需要在这个公网IP后面加上的端口号,注意这个端口号也是需要在阿里云主机的防火墙中放行。
然后我们就可以启用frpc客户端来建立连接
2.3 注册Frpc为Windows服务 为了使frpc能够开启后台运行,我们需要将它注册为系统服务。
这里我们需要使用到GitHub上面的另一个项目winsw
这里我使用的是WinSW.NET4.exe
这个版本,这个需要电脑安装了.net4
才可以使用,一般win10应该都是安装了的,此外我们还要下载一个xml文件作为启动配置文件。
然后我们在对应的xml配置文件中加入下列内容
<configuration > <id > frpc</id > <name > Frpc Service (powered by WinSW)</name > <description > This frpc service can realize reverse Proxy</description > <executable > frpc</executable > <arguments > -c frpc.ini</arguments > <logmode > reset</logmode > </configuration >
接着我们把这两个文件都命名为WinSW,然后放在刚刚frpc的目录下。
然后我们以管理员身份启动powershell
或者cmd
,输入下列命令
win+r
后通过services.msc
进入到服务列表页面找到frpc
服务。
我们打开设置,将它设置为开机启动,服务失败后一分钟自动重启服务。
到这里windows客户端的配置就已经完成了。我们在远程的时候只需要输入刚刚使用的公网IP地址加上端口号即可进行远程连接,如果有多台电脑需要进行远程,只需要给每个电脑设置一个不同的端口号即可。
3、Linux客户端配置 Linux客户端的配置和上面的服务端大同小异,只需要将frps
换为frpc
并且修改对应的配置文件即可。注意下面的操作小七在CentOS7.6和Ubuntu18.04上面都能成功实现。
3.1 下载Frp wget https://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz tar -zxvf frp_0.27.0_linux_amd64.tar.gzcp -r frp_0.27.0_linux_amd64 /etc/frpcrm -f frps frps_full.ini frps.ini vim /etc/frpc/frpc.ini
3.2 编辑配置文件 [common] server_addr = 你的公网主机的公网IP server_port = 7000 [ssh]type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 8000
3.3 设置开机启动和后台运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 vim /etc/systemd/system/frpcd.service [Unit] Description=frpc daemon After=syslog.target network.target Wants=network.target [Service] Type=simple ExecStart=/etc/frpc/frpc -c /etc/frpc/frpc.ini Restart= always RestartSec=1min [Install] WantedBy=multi-user.target systemctl start frpcd.service systemctl enable frpcd.service systemctl status frpcd.service
3.4 错误记录 在Ubuntu上面出现了一点小意外,发现服务并没有成功启用
[control.go:142] [ssh] start error: proxy name [ssh] is already in use
提示是说ssh这个名字已经被别的服务占用了,这里我们只需要修改之前的配置文件里面的ssh为别的名字,然后重启服务即可。
最后注意这时候我们如果需要使用ssh远程需要加上-p命令来指定端口。