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

2023-09-09 00:34:17 8点赞 80收藏 23评论

在没有公网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保姆级教程

由于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保姆级教程全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程

3.群晖安装npc客户端

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

https://spk7.imnks.com/

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

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

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保姆级教程

6.配置nginx

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

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

sudo -i

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

cat /etc/nginx/nginx.conf

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

倒数第二行的意识是说,群晖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保姆级教程全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程

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

nginx -t

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

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

输入下列命令重启nginx

nginx -s reload

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

全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程
展开 收起
23评论

  • 精彩
  • 最新
  • 现在不都有公网了么,直接ddns到群晖的ipv6上

    校验提示文案

    提交
    ipv6在某些场景还是不行

    校验提示文案

    提交
    收起所有回复
  • 和 frp 区别大吗

    校验提示文案

    提交
    frp不需要部署haproxy,只需要frp客户端开启Proxy Protocol协议就行。

    校验提示文案

    提交
    收起所有回复
  • 根据教程一步一步来的,最后获取到的IP还是NAS本身的IP

    校验提示文案

    提交
    127.0.0.1

    校验提示文案

    提交
    设置的就是127.0.0.1

    校验提示文案

    提交
    还有9条回复
    收起所有回复
  • ● haproxy.service - HAProxy Load Balancer
    Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled)
    Active: active (running) since Mon 2024-01-08 16:27:36 CST; 58min ago
    Main PID: 32441 (haproxy-systemd)
    Tasks: 3
    Memory: 2.0M
    CGroup: /system.slice/haproxy.service
    ├─32441 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
    ├─32442 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
    └─32443 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds


    开始之后使这样的,一直不成功是这个原因吗

    校验提示文案

    提交
    broken header: "" while reading PROXY protocol, client: 127.0.0.1, server: 0.0.0.0:5501


    nginx日志报了这个错

    校验提示文案

    提交
    是因为域名访问用的http吗

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 你这个方式是外网直接访问穿透后的端口是吧。我的方法是在最外层套一层nginx就可以

    校验提示文案

    提交
  • 这个好久没更新了啊 比zerotie和tailscale有什么优势

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
80
扫一下,分享更方便,购买更轻松