前言
现在家里的宽带很多情况下都不分配公网IP了,这种情况下不能用外网端口映射来远程访问家里的设备,但是如果我们有一台云端服务器,就可以轻松利用frp来做到远程控制。
介绍
FRP是一个高性能的反向代理工具,可以帮你穿透NAT网络并且绕过防火墙。
通过在云端(带公网IP)的服务器(CentOS或Ubuntu或Windows Server)上搭建frps服务器端,家里的电脑(CentOS或Ubuntu或Windows)或路由器上安装frpc客户端来实现远程访问。
服务器端搭建
到https://github.com/fatedier/frp/releases下载最新版本的frp,根据你服务器的操作系统下载对应的版本,
例如64位Linux,可以下载:https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
64位Windows Server,可以下载:https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_windows_amd64.zip
以Linux为例:
#下载到最新的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 mkdir /etc/frp #复制配置文件到/etc/frp/ cp frp_0.36.2_linux_amd64/frps.ini /etc/frp/ #复制可执行文件到/usr/bin/ cp frp_0.36.2_linux_amd64/frps /usr/bin/ chmod +x /usr/bin/frps #安装成服务,方便自动启动 cp frp_0.36.2_linux_amd64/systemd/frps.service /etc/systemd/system/ #检查下vim /etc/systemd/system/frps.service的内容: #我是把User=nobody注释掉了才启动起来的 #另外看下ExecStart后面的这些文件路径是否都正确了 [Unit] Description=Frp Server Service After=network.target [Service] Type=simple #User=nobody Restart=on-failure RestartSec=5s ExecStart=/usr/bin/frps -c /etc/frp/frps.ini [Install] WantedBy=multi-user.target
/etc/frp/frps.ini配置文件
[common] ## 绑定端口 bind_port = 7000 ## frps服务密码 token = 123456 ## dashboard这些看你需要,也可以删除不用配置 ## dashboard端口(就是网页查看状态的页面) dashboard_port = 7500 # dashboard 用户名密码,默认都为 admin dashboard_user = admin dashboard_pwd = admin ## dashboard这些看你需要,也可以删除不用配置 ## vhost vhost_http_port = 80 ## 虚拟主机http协议的端口 vhost_https_port = 443 ## 虚拟主机https协议的端口 ## 以远程转发ssh为例(连接服务器的2201端口,就相当于控制客户端的ssh服务,当然客户端那边还要配置,后面会介绍) [ssh] type = tcp #bind_addr = 0.0.0.0 #代理远程端口(frps开放的端口) listen_port = 2201 ## 以远程转发RDP为例(这里frps端口也设置了3389,当然也可以不用3389,最好是不用常用端口) [rdp] type = tcp listen_port = 3389
vhost配置,如果这部分不需要,可以跳过
利用frp 穿透到内网的http/https网站,实现对外开放,或者外部访问路由器的管理页面
有域名的话使用域名,没有域名的话使用IP
注意80端口是否被已经安装使用的nginx占用,若被占用,可以换成其他端口,比如8080,,或者利用nginx的反向代理实现frp服务端与nginx共用80端口
看下frps.ini,客户端frpc.ini的配置,后面讲到客户端配置的时候,会带上
[common] ## 绑定端口 bind_port = 7000 ## frps服务密码 token = 123456 ## vhost vhost_http_port = 80 ## 虚拟主机http协议的端口 vhost_https_port = 443 ## 虚拟主机https协议的端口
完成frps
Windows下的frps的的配置文件都通用的,安装基本上就是下载后,运行frps就可以了。
好了,frps服务器端安装和配置都好了
#重新加载服务的配置文件 systemctl daemon-reload #重启frps服务 systemctl restart frps #开机启动frps systemctl enable frps
客户端安装
这里也以Linux为例,在局域网里的一台Linux中安装frpc客户端:
#下载到最新的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 mkdir /etc/frp #复制配置文件到/etc/frp/ cp frp_0.36.2_linux_amd64/frpc.ini /etc/frp/ #复制可执行文件到/usr/bin/ cp frp_0.36.2_linux_amd64/frpc /usr/bin/ chmod +x /usr/bin/frpc #安装成服务,方便自动启动 cp frp_0.36.2_linux_amd64/systemd/frpc.service /etc/systemd/system/ #检查下vim /etc/systemd/system/frpc.service的内容: #我是把User=nobody注释掉了才启动起来的 #另外看下ExecStart/ExecReload后面的这些文件路径是否都正确了 [Unit] Description=Frp Client Service After=network.target [Service] Type=simple #User=nobody Restart=on-failure RestartSec=5s ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini [Install] WantedBy=multi-user.target
/etc/frp/frpc.ini配置文件
[common]
## frp的服务器公网地址和端口号,端口号,密码
server_addr = 1.2.3.4
server_port = 7000
token = 123456
## 设置远程服务器转发2201端口,到本机的22端口,从来实现远程控制这台机器的ssh服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 这个端口号就是frps配置的ssh的服务器端口号
remote_port = 2201
## 设置远程服务器转发3389到局域网192.168.1.2的3389端口,从而实现RDP远程控制192.168.1.2
[rdp]
type = tcp
local_ip = 192.168.1.2
local_port = 3389
remote_port = 3389
use_compression = true
use_encryption = true
## 前面有需要配置vhost来穿透内网的HTTP网站,或者访问路由器管理页面,配置如下
[http]
type = http
#自己的二级域名需要提前做好解析
custom_domains = router.example.com
#我这里设置的是访问路由器的地址
local_ip = 192.168.1.254
local_port = 80
use_compression = false
use_encryption = true
frpc客户端就好装和配置好了
#重新加载服务的配置文件 systemctl daemon-reload #重启frps服务 systemctl restart frpc #开机启动frps systemctl enable frpc
当然如果你想要在家里的路由器上安装frpc客户端,也是可以的,看你的路由器是否支持安装插件,然后去找找对应的frpc插件,配置应该就是图形化的。
Windows版本的frpc应该也是类似,配置文件也是可以通用的。
确认frps服务器和frpc都起来后
远程连接SSH:
ssh -p2201 [email protected]
远程连接RDP:
Windows Remote Desktop连接 1.2.3.4:3389端口就可以了
如果做了内网http穿透,浏览器直接访问:http://router.example.com 测试
文章评论