去年自己攒了一个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