内网穿透 – Frp

去年自己攒了一个Nas服务器,放在家里,不过家里没有公网IP

于是研究了很多内网穿透的东西
1. 带花生壳的路由
2. 花生棒
3. 花生壳客户端
4. 其他类似于花生壳的穿透服务(freenas管理后台提供很多但不好用)
5. Ngrok (需要自己有公网服务器)
6. Frp (需要自己有公网服务器)

最开始买了一个花生壳提供的硬件设备 — 花生棒,不过感觉不太好用还有限制
后来开始使用Frp,感觉棒棒哒。

Frp需要有一个公网的IP,正好我有一台阿里云的机器。原理就是公网服务器上搭建Frp服务端,然后内网机器运行Frp客户端,客户端主动连接服务端,然后服务端把自己收到的请求转发给客户端。
其实花生壳的客户端也是这个原理,可惜花生壳有营收压力,开始收费了。

然后就可以各种穿透了,http,https,ssh,nas ….

服务端配置 frps.ini

[common]
bind_port = 7000
vhost_http_port = 8080
privilege_token = xxxx123456
log_file = ./frps.log

客户端配置 frpc.ini

[common]
server_addr = 106.xxx.xxx.xxx
server_port = 7000
privilege_token = xxxx123456
log_file = ./frpc.log

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 8022
use_encryption = true
use_compression = true

[web]
type = http
local_port = 80
custom_domains = test.xxtime.com

最后不要忘记开启阿里云的端口-在安全组配置里
这里 我启用了8022, 8080 分别对应 ssh 和 http 服务

# 启动服务端, 在公网机器上操作
nohup ./frps -c ./frps.ini &

# 启动客户端,在内网机器上操作
nohup ./frpc -c ./frpc.ini &

内网定时检测启动脚本 (FreeBSD)
此处使用 ps auxww
如果是ps aux则在crontab下无法获取frp进程

#!/bin/bash
# 检查Frp是否启动
# 使用grep frp过滤可能会误认为目录中包含的frp符合条件,所以过滤时用 grep frpc.ini
function checkFrp() {
    count=`ps auxww | grep frpc.ini | grep -v 'grep' | wc -l`
	if [ 0 == $count ];then
		nohup /usr/local/frp/frpc -c /usr/local/frp/frpc.ini &
		echo 'Frp start at' `date` >> /usr/local/frp/cron.log
	else
		echo 'Frp is running at' `date` >> /usr/local/frp/cron.log
	fi
}

checkFrp

官方网址: https://github.com/fatedier/frp
官方文档:https://github.com/fatedier/frp/blob/master/README_zh.md

发表评论

电子邮件地址不会被公开。 必填项已用*标注