背景
家里有台nas服务器,一直想通过外网对其进行控制,电信对此已经有了封锁,几年前就封锁了http端的直接请求,前提还是在把光猫破解的情况下。
几个月前,还想着用老办法,想着将光猫进行破解,因为宽带新装过,光猫的型号也比较新。
在淘宝上也有卖家可以对光猫直接破解,开价100元,虽说不贵,但总觉得有点儿那个。
之前的几个月事情比较多,一直就将此事耽搁了。
与同事交流过,提到了使用反向隧道可以解决此问题。
搜索过的方案
- SSH反向隧道 这个方法比较传统,稍微有些麻烦
-
ngrok 使用简单,似乎信赖于ngrok本身的域名
-
frp 国内牛人用Go实现的可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。
最终选择的frp方案。
我的环境
- 有一个固定的外网服务器 -> 安装frp-server
-
家里有一台nas
-
家里有一台数莓派 -> 安装frp-client
路由路径
webclient -> remote.nginx -> frps =>frpc =>local.nginx => local.server
frp-server 配置
[common]
bind_port = myremote-server-port
vhost_http_port = my-port(defaut is 8080)
privilege_token = xxxxx-my-token
frp-client 配置
[common]
server_addr = myip
server_port = myremote-server-port(number)
privilege_token = xxxxx-my-token
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = config-ssh-port(number)
[web]
type = http
custom_domains = my-domain-name
local_port = 80
local_ip = 127.0.0.1
http_user = my-form-user
http_pwd = my-form-pass
# 添加http_user http_pwd 只是想增加一些安全性
nginx-remote端
server {
listen 80;
server_name my-domain-name;
location /{
proxy_pass http://127.0.0.1:myremote-server-port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_redirect off;
proxy_read_timeout 240s;
}
}
nginx-local端
server {
listen 80;
server_name my-domain-name;
location / {
proxy_pass http://nas-ip:nas-port;
}
}
配置完成后
server端启动:./frps -c ./frps.ini
client端启动:./frpc-c ./frpc.ini
这时再把自己的域名在地址栏里填上,就能访问了…
新版本用的是 token.
即 privilege_token => token.