服务器, 生活, 网络

搭建反向隧道

By jere on 2017-07-04 1 Comment

背景

家里有台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

这时再把自己的域名在地址栏里填上,就能访问了…

打赏
  1. jere说道:

    新版本用的是 token.
    即 privilege_token => token.

Leave a comment to jere

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