FRP内网穿透
背景环境
家里拉了移动光纤,接到小米R3P上,下面接了大学里一直使用的Time Capsule和后搭的黑群晖(某星际),看到Nas能够自己搭建博客系统和Git,Docker等,所以就想把自己的Nas从移动内网中揪出来,能够通过外网访问,遂各种网上找方法。
技术选型
1、花生壳之类;
2、如果自己的网络本身就有公网IP,是可以使用DDNS方式配置的,但是移动基本上是要不到公网IP的,貌似电信是可以打电话要求安装监控用...
3、Ngfork和Frp内网穿透;
从稳定性和便捷性性上考虑,技术选型使用Frp。
实现方法
准备
- 有公网IP的服务器一台
- 域名一个
- 本地宽带网络
- 自己想要公布出去的服务
购买VPS服务器
原先使用Vultr,后来改为使用阿里云,更稳定
搭建FRP服务器
因为frp是使用GoLang编写,所以需要先安装Go,需要注意的是CentOS与Ubuntu安装Go的命令不同。
这里下载的FRP是当前最新的0.27.0版本
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.gz
后台启动,因为官方配置中frps_full.ini的配置已经足够详细,所以直接使用了frps_full.ini而非frps.ini。
nohup ./frps -c ./frps_full.ini &
需要注意的是,这个版本的密钥配置是token,而这个是需要自己牢记的,因为需要在客户端中配置这个。
为了能够开机启动,还需要进行一些设置,因为新版的系统已经采用Systemd作为系统服务管理工具,所以需要自己创建启动项
vim /usr/lib/systemd/system/frps.service
有时候需要手动创建system文件夹
frps.service的文件内容这样填写,其中frps和frps.ini的具体位置要按照自己的来
[Unit]
Description=frps
After=network.target
[Service]
TimeoutStartSec=30
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target
启动 frp 并设置开机启动
systemctl enable frps
systemctl start frps
systemctl status frps
部分服务器上,可能需要加 .service 后缀来操作,即:
systemctl enable frps.service
systemctl start frps.service
systemctl status frps.service
FRP客户端使用
NAS内网穿透
frpc.ini配置文件这样配置即可,server_addr和token需要自己修改;
因为NAS的页面访问端口是5000,所以local_port中就是5000;
因为type是http,所以remote_port要和服务器上的vhost_http_port配置的端口一样。
[common]
server_addr = IP
server_port = 7000
token = TOKEN
log_file = ./frpc.log
log_level = info
log_max_days = 3
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin
pool_count = 5
tcp_mux = true
user = James2119-NAS
login_fail_exit = true
protocol = tcp
tls_enable = true
[NAS]
type = http
local_ip = 127.0.0.1
local_port = 5000
remote_port = 8080
服务器中frps配置文件中的udp是为了能够点对点穿透,这样流量就不需要通过服务器走了。
同样,nohup后台启动后即可通过:域名/8080访问NAS了
Windows远程桌面
[common]部分的配置与上面的一样,
[NAS]改为[RDP],因为windows的远程桌面访问端口是3389,所以这里local_port这样设置,remote_port随意
[RDP]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 8888
需要注意两点,第一是防火墙开启了远程桌面3389端口的出站规则,第二是计算机属性中的远程桌面功能开启。
最终,通过远程桌面工具,输入:域名/8888即可远程连接啦!