作者:geek玩物

在没有公网ip的情况下想远程访问nas,只能通过各种内网穿透工具的来实现。使用了内网穿透工具的话,nas就没有办法获得访问者的真实ip地址,也就没有办法通过拉黑ip的方式去阻止一些不友好的访问者。

好在http协议可以通过X-Forwarded-For协议来获得用户的真实ip地址,恰巧群晖原生支持这种方式。只需要内网穿透工具开启X-Forwarded-For协议支持就可以了。但如果是https协议则需要Proxy Protocol协议。

显然外网访问nas的时候是需要https来保证安全的,那么就需要使用Proxy Protocol协议来获取用户的真实ip。但群晖原生不支持该协议,需要额外的设置才能支持,所以就有了今天这篇教程。

部署思路

本次教程使用的的内网穿透工具是nps,因为nps不支持Proxy Protocol协议,所以还需要haproxy。如果使用frp的话则不需要haproxy,frp原生支持Proxy Protocol协议。

大概的原理是,在云服务上haproxy作为反代服务器,将用户的真实ip记录在Proxy Protocol中,然后转发给nps,nps在通过tcp隧道转发给内网的Nginx中,Nginx在把数据转给群晖的同时也把用户的真实ip转过去了,这样子群晖读取Proxy Protocol就知道用户真实的ip地址了。

端口规划

这种方式获得真实ip转发配置有点多,所以需要提前规划好转发的端口。以免在后面的配置时搞混了。

首先用户流量先到服务器上的haproxy,haproxy到nps,nps到群晖安装的nginx,nginx在给群晖本身

我的安排是这样子的,大家可以参考一下

云服务器上的1443端口,haproxy监听1443端口,加上用户真实ip收转发给nps监听的5043端口

云服务器上的5043端口,nps监听的5043端口,这个端口收到的流量会转发给群晖上的5501端口

群晖上的5501端口,群晖上的nginx监听的5501端口,nginx收到流量处理后会传输给群晖上的5001端口,也就是群晖的https端口。

安装教程

1.nps服务端安装

ssh到你的服务器用以下下载你的二进制安装包,大部分的云服务器都是x86-64的,其他架构的请下载合适架构的版本。

mkdir nps && cd nps && wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_arm64_server.tar.gz && tar -zxvf linux_arm64_server.tar.gz

运行下面命令使用vim编辑器编辑nps的配置文件,找到图片上画圈的配置进行更改。

vim conf/nps.conf

全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程(图1)

由于haproxy默认监听80和443端口,所以这里要更改一下nps的http默认监听端口。第一个红框框住的就是http监听端口的设置,我这里把他们改为了280和2443

第三个框的的选项是域名监听设置和控制面板账户密码设置,为了安全起见一定要更改用户名和密码

第二个框可能是api相关的密钥,建议修改一下

最后按一下“esc”键,然后输入:wq!保存退出,运行下列命令安装并启动

chmod +x nps && ./nps install && nps start

现在在浏览器打开地址:你的服务器ip:8080。能打开nps控制面板,那么nps就已经启动了

2.nps管理面板添加客户端

登陆nps的控制面板,参考下面的图添加一个客户端给群晖使用。

全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程(图2)
全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程(图3)
全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程(图4)
全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程(图5)
全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程(图6)

3.群晖安装npc客户端

群晖是有npc客户端套件的,但是官方源并没有提供这个套件。所以你需要添加一个第三方源,比如矿神源

https://spk7.imnks.com/

在套件中心搜索npc就可以找到套件,填上:服务器ip地址:8024和刚才为群晖配置的验证密钥就可以了。在nps控制面板上就看到了群晖上线了。

全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程(图7)
全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程(图8)
全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程(图9)

5.安装haproxy

主流的linux发行版的软件仓库都收录了haproxy,只需要一条命令就可以安装haproxy了。

对于ubuntu/debian用下面的命令安装

apt update && apt upgrade && apt install haproxy

对于centos用下面的命令安装

yum install epel-release -ysudo yum update -y && yum install haproxy -y

用下面的命令编辑haproyx的配置文件

vim /etc/haproxy/haproxy.cfg

按“i”键进入编辑模式,在文件的最后面插入下面的内容,要根据的自己的实际情况更改。

listen web

# haproxy监听的端口1443,根据我的端口规划确定的

bind 0.0.0.0:1443

mode tcp

option forwardfor

#haproxy转发给nps监听的5043端口

server web1 127.0.0.1:5043 send-proxy check inter 3000 fall 3 rise 5

保存配置文件后,运行下面命令启动和重启haproxy

systemctl start haproxy

systemctl restart haproxy

然后运行下面命令检查haproxy是否运行,如果输出下图内容则配置被应用。

systemctl status haproxy

全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程(图10)

6.配置nginx

群晖的web服务器是nginx,所以我们不需要在去安装一个nginx。使用群晖自带的nginx就行了

首先ssh登陆到群晖,然后用下面的命令并输入管理员密码后进入root模式

sudo -i

输入下面命令查看查看群晖的nginx的配置文件,拉到最后一行看到下图的内容

cat /etc/nginx/nginx.conf

全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程(图11)

倒数第二行的意识是说,群晖nginx的用户自定义配置保存在/etc/nginx/conf.d/文件夹中,配置文件以http.*.conf命名。比如我命名为http.cip.conf。

这个配置文件比较多,所以我做了一个半成品放在了github中。首先用下面的命令打开到/etc/nginx/conf.d/文件夹

cd /etc/nginx/conf.d/

用下面的命令下载并编辑下载好的nginx配置文件,参考下图红框更改参数。

wget https://github.com/jiefff0/dsip/releases/download/ipip/http.ip.conf && vim http.ip.conf

全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程(图12)

配置好后保存退出输入下列命令测试配置文件是否配置好了。

nginx -t

如果配置正确,则输出下列内容

nginx: configuration file /etc/nginx/nginx.conf test is successful

输入下列命令重启nginx

nginx -s reload

此时群晖在内网穿透环境下获取客户端真实ip的配置就完成了,这时候就可以在浏览器上输入网址测试了

全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程(图13)

查看文章精彩评论,请前往什么值得买进行阅读互动