如何用内网连接远程(远程访问内网服务器)?如果你对这个不了解,来看看!
基于Zero Trust,无公网IP远程访问NAS+内网设备全远程访问方案!,下面是我是阿皮啊给大家的分享,一起来看看。
如何用内网连接远程
开篇碎碎念本篇主题:部署Zero Trust在NAS上,实现NAS远程访问+内网设备全远程访问!
大家好,相信在座朋友们基本人手一台NAS,可能很多小伙伴的第一个NAS系统是黑群晖,而H群晖自带的QC就无法使用,就会考虑使用其它远程访问方案,比如说Zerotier/Tailscale/向日葵/蒲公英组网等等方法来进行远程访问NAS,或者远程访问家里的内网设备。
有NAS+远程访问才是私有云使用舒服和有生产力的方式,我之前分享过蒲公英组网、DDNS+IPV6、NAS自带DDNS远程访问等文章或视频教程,不知道各位用上没有呢?
本期文章来分享另一种远程访问NAS的方法:基于CF的Zero Trust。
CF即CloudFlare,著名的CDN服务商了,我使用它的Zero Trust实现远程访问后,测试速度有200-400KB左右,毕竟是CDN服务端,这个速度感觉是保底速度,对于轻量以及不追求极速的朋友来说还是可以考虑的。
相比Zerotier,Zero Trust有保底速度,毕竟Zerotier要打通点对点也是比较难。
相比于内网穿透,Zero Trust不需要服务器。
并且最重要的是,部署简单,只要NAS支持Docker即可,以及部署成本低,仅需购买一个域名,像阿里云的冷门域名几块钱就可以搞定。
并且Zero Trust除可以在Docker中部署外,还可以在Windows、Mac、Linux中部署,各种客户端支持完善。
本期将会在常规Docker、威联通、群晖NAS中演示如何配置Zero Trust,除了可远程访问NAS外,还可以远程访问家中所有内网设备。
网络示意图如下,NAS接入家庭网络,NAS中部署有各种容器和服务,后续在NAS上部署Zero Trust服务后,可实现远程访问NAS、以及NAS中的服务和应用、以及内网设备。
步骤和需要的东西在图中有说明,下面开始进入正题。
注册CF和域名首先搜索引擎搜索CloudFlare进入官网,点击登录之类的,按要求注册一个账号即可。
搜索阿里云,进入官网,随意注册一个域名,9.9/年的冷门域名有大把,注册完成后,在域名控制台中即可看到,实名、要求备案都有可能,做好准备即可。
当然,任何域名服务商都是可以的,比如腾讯云也有域名注册,这里只是以阿里万网来演示,随机应变。
返回CF后台,会提示添加站点,站点处输入你前面申请好的域名,添加即可。
然后往下拉,选择免费计划,继续。
看到这界面,点击继续。
会提示没有DNS记录,我们要把域名的域名服务器改成CF提供的服务器即可,点击确认。
来到此步骤,复制图中提示的名称服务器。
返回域名服务商后台,点击域名管理,DNS修改-修改DNS服务器即可,其它域名服务商后台基本也是大同小异,各位请随机应变。
然后,将CF中显示的名称服务器分别粘贴和添加上去,保存即可。
返回CF后台,点击完成,检查名称服务器。
正常来说,生效时间快则半小时,多则一天都有可能,如未生效,会提示待处理状态,等它显示生效即可。
创建Zero Trust好的,等它生效后,点击ZT按钮,有欢迎提示的话,点击NEXT即可。
注意,有部分号刚申请会提示绑卡,可申请一个Paypal账号先绑定,选择免费即可,后续配置完成后,各位解绑即可,部分会出现,这里做一个提示,大家随机应变,我两个号都没提示要绑。
如出现以下提示,随意命名即可,点击NEXT。
来到套餐选择,选择Free免费即可。
点击提交即可,再次提交即右下角Pur那个按钮即可。
然后来到此界面,点击Access-Tunnels,点击Create a tunnel即可。
名称随意,点击Save保存。
OK,创建完成,来到此界面,提示可以在各平台上部署,本期演示在NAS的Docker中部署,点击Docker,复制docker开头的那行命令,我们进入部署环节。
常规Docker下部署ZT如果是linux系统、unraid系统等,直接打开SSH功能,登录,复制粘贴下图中docker这行命令后运行即可完成部署,非常简单了。
威联通、群晖部署ZT端威联通目前我使用的是TS-462C,搭载N5105处理器,4K实时硬解流畅。
进入威联通后台,在控制台中搜索SSH,打开SSH连接,应用即可。
群晖一样,使用的是使用两年半的蜗牛星际。
进入群晖后台,在控制面板搜索SSH,打开SSH功能。
下载安装PUTTY软件,输入威联通或群晖后台IP加22端口,登录。PUTTY软件按名称搜索,找到官网下载安装即可,很简单,就不再赘述。
然后弹出提示,Accept即可,login处输入NAS的用户名,最好是有管理权限的,回车,然后在password处输入密码,输入后看不到的,直接回车即可,看到第三行这类提示说明登录成功,群晖和威联通都是一样的。
如果有方框提示之类的,按Q进入normal界面,再输入Y即可进入正常的SSH命令行了。
然后,复制前面提示的docker那行命令,点击鼠标右键,即可粘贴,回车就会开始下载镜像并运行。
然后一堆命令在跑,先不要关闭窗口,后续配置完再关闭吧。
现在返回你群晖或威联通的Docker中,即可看到正在运行的容器了,名称是随意的,找底部有cloudflare的就是了,你可以编辑,给容器设置自启之类的,就不再赘述了。
域名映射实现远程访问前面在NAS中部署ZT容器完成,返回CF后台,点击Tunnels,点击Configure进行配置。
点击Public Hostname-Add a public hostname。
好的,来到以下界面,目前我NAS的内网后台访问地址是:192.168.2.2:5000,要想远程访问这台NAS,就按图中以下公式去套用。
Domain处选择你解析成功的域名,Subdomain即二级域名,取一个你方便记忆的前缀,如nas01,Type类型选择HTTP,URL就输入NAS的内网IP加端口号即可。
然后点击Save保存之类的即可。
返回,点击箭头展开,可以发现我在NAS中部署的ZT是运行的,且显示Connected已连接状态。
并且在Routes一栏,可以看到nas01开头的域名,说明前面给NAS配置的远程访问已经成功,且激活状态。
现在,打开手机流量,输入你的前缀加你实际的域名,访问来测试一下是否成功。
OK,成功远程访问到我的NAS了。
那么,在NAS上我们也有许多服务,比如想远程访问部署在NAS上的应用或服务,或者访问NAS的上级路由器的后台,怎么操作呢?
以访问上级路由器为例,如上图所求,上级路由器后台地址为:192.168.2.1:80,怎么设置呢?一样的,在Tunnel处点击Configure配置,点击Hostname,前缀取一个不一样的,如router01,类型为HTTP,URL就填写上级路由器的后台地址,保存即可。
返回,看到激活状态,复制这串域名,打开手机流量进行远程访问测试。
OK,成功远程进入上级路由后台,是不是很方便,同样的,NAS上部署的应用和服务端口是不同的,如果想远程访问设置,记下这些服务或应用的IP加端口号,按前面举的两个例子的公式套用上去即可。
看到这,相信各位也看明白操作了吧,不同应用或内网设备,给它分配一个不同的前缀即可,如前面我给NAS分配nas01、路由分配router01,这样,前缀加上你的实际域名,即可远程访问这些设备了,是不是很方便。
最后的最后远程访问的方式多种多样,有公网IP的话是最好的,速度最快,如无公网IP,就考虑本文中的这种方式,或其它方式,毕竟远程或内网穿透解决方案多种多样,没有哪种最好,只要这个方案适合自己当前环境或需求的方案就一定是好方案,本篇的这种ZT方式,希望可以给到各位参考。
并且这个ZT保底有200-300KB速度,满足最低基础要求,如你网络好,加上不是高峰期,速度会更快,毕竟CF就是一个CDN服务商。
或者考虑硬件组网方案,比如蒲公英的组网方案,例如最便宜的组网硬件蒲公英X1,优惠时69左右即可拿下,免费版支持3个成员,限速不限量,保底200-300KB速度,可以满足基础远程访问需求,对于网络无侵入性,部署非常简单。
如果您的网络支持IPV6,可参考我往期文章进行V6远程访问哦!以下是两篇相关文章。
NAS+IPV6,零成本实现内网设备全远程访问!群晖、威联通DDNS教程
解决群晖外网访问难题!IPV6+DDNS,实现内网设备全远程加密访问
如有帮助,请点赞关注,评论区交流!
远程访问内网服务器
内网穿透是指将内网中的计算机或者设备通过公网的方式暴露出去,使得公网中的设备可以访问到内网中的设备,从而达到远程访问的目的。在 Docker 中,可以通过搭建内网穿透服务来实现这一目的,常用的工具包括 frp 和 ngrok 等。
我们第一个以 frp 为例,介绍如何在 Docker 中搭建 frp 内网穿透服务。第一步:安装 Docker首先需要在服务器上安装 Docker,可以通过以下命令进行安装:
curl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.sh第二步:创建配置文件在 Docker 中使用 frp,需要先创建配置文件,这个配置文件需要包含以下信息:
服务器地址和端口:指定 frp 服务器监听的地址和端口。远程访问地址和端口:指定内网中的设备的地址和端口。认证信息:指定客户端连接时需要使用的用户名和密码。创建配置文件的命令如下:
mkdir -p /opt/frp/conf && \touch /opt/frp/conf/frps.ini && \touch /opt/frp/conf/frpc.ini在 frps.ini 中添加以下配置:
[common]bind_port = 7000在 frpc.ini 中添加以下配置:
[common]server_addr = 服务器IPserver_port = 7000token = 密码[ssh]type = tcplocal_ip = 内网IPlocal_port = 22remote_port = 6000其中,[common] 部分为通用配置,包括服务器地址和端口以及认证信息;[ssh] 部分为具体需要暴露的内网设备的信息,包括设备类型、内网 IP 和端口以及需要映射到公网的端口号。
第三步:启动 frp 服务在 Docker 中启动 frp 服务的命令如下:
docker run -d --name frps -p 7000:7000 -v /opt/frp/conf/frps.ini:/etc/frp/frps.ini sorahub/frps:0.34.3docker run -d --name frpc -v /opt/frp/conf/frpc.ini:/etc/frp/frpc.ini sorahub/frpc:0.34.3其中,frps 启动的是服务器端的 frp 服务,需要映射服务器端口 7000 到 Docker 容器端口 7000;frpc 启动的是客户端的 frp 服务,需要挂载客户端配置文件到 Docker 容器内。
第四步:测试 frp 服务启动 frp 服务后,可以使用 ssh 命令测试是否可以访问内网设备:
ssh -p 6000 用户名@服务器IP如果可以正常连接,则说明内网穿透服务已经搭建成功。
另外一个关于frp的例子:使用 frp 实现远程桌面访问除了上述例子中的简单 TCP 连接,frp 还支持更加复杂的应用场景,例如远程桌面访问。在这种情况下,需要使用 frp 的 http 协议代理功能来转发远程桌面协议(如 RDP)的流量。
以下是具体步骤:
修改 frpc.ini 配置文件,添加如下配置:[rdp]type = tcplocal_ip = 内网IPlocal_port = 3389remote_port = 3389use_encryption = true[rdp_http]type = httplocal_ip = 内网IPlocal_port = 3389custom_domains = 远程访问域名use_encryption = truesubdomain_host = true其中,[rdp] 部分用于将 RDP 流量映射到公网端口 3389;[rdp_http] 部分用于将 http 流量映射到公网,实现代理转发功能。注意,需要在域名解析中添加远程访问域名的解析记录,将域名解析到服务器的 IP 地址上。
2 启动 frp 服务:
docker run -d --name frps -p 7000:7000 -v /opt/frp/conf/frps.ini:/etc/frp/frps.ini sorahub/frps:0.34.3docker run -d --name frpc -v /opt/frp/conf/frpc.ini:/etc/frp/frpc.ini sorahub/frpc:0.34.33 在客户端上使用 RDP 客户端访问远程访问域名,即可实现远程桌面访问。
在这个例子中,frp 使用了 http 协议代理功能将 RDP 流量转发到公网,从而实现了远程桌面访问。这种方式相对于简单的 TCP 映射,具有更高的安全性和灵活性。当然,如果需要实现其他的应用场景,也可以根据具体情况进行配置。
接下来,我以ngrok为例再简单说一点:ngrok 是一款开源的内网穿透工具,它可以让我们在公网上访问内网的服务器或应用。与 frp 不同的是,ngrok 不仅支持 TCP 和 UDP 端口转发,还支持 HTTP 和 HTTPS 流量转发,因此可以用于将内网的 web 应用程序暴露到公网。
下面是在 Docker 中使用 ngrok 搭建内网穿透服务的具体步骤:
1 创建一个 ngrok 配置文件 ngrok.yml,内容如下:
authtoken: YOUR_AUTH_TOKENtunnels: ssh: proto: tcp addr: 22 hostname: ssh.example.com http: proto: http addr: 80 hostname: http.example.com https: proto: http addr: 443 hostname: https.example.com这里的 YOUR_AUTH_TOKEN 是在 ngrok 官网上注册账号后获取到的认证 token,用于验证用户身份。在 tunnels 部分,我们定义了三个隧道:ssh、http 和 https。ssh 隧道用于转发内网的 SSH 服务,http 和 https 隧道用于转发内网的 web 应用程序。注意,这里的 hostname 需要是一个已经解析到公网 IP 的域名。
2 创建一个 Dockerfile 文件,用于构建 ngrok 的镜像,内容如下:
FROM golang:1.16-alpine as buildRUN apk add --no-cache git build-baseWORKDIR /go/src/github.com/inconshreveable/ngrokRUN git clone https://github.com/inconshreveable/ngrok.git .RUN make release-serverFROM alpine:3.14COPY --from=build /go/src/github.com/inconshreveable/ngrok/bin/* /usr/local/bin/RUN apk add --no-cache opensslCOPY ngrok.yml /etc/ngrok/ngrok.ymlCMD [ "ngrokd", "-tlsKey=/etc/ngrok/server.key", "-tlsCrt=/etc/ngrok/server.crt", "-domain=example.com", "-httpAddr=:80", "-httpsAddr=:443", "-tunnelAddr=:4443", "-log=stdout", "-config=/etc/ngrok/ngrok.yml" ]这里我们使用了 Golang 1.16 和 Alpine 3.14 作为基础镜像,通过 git 和 make 构建 ngrok 服务器,并在最终的镜像中添加了 ngrok 配置文件和启动命令。
3 构建并运行 Docker 镜像:
# 构建镜像docker build -t ngrok .# 运行容器docker run -d --name ngrok --restart always \ -p 80:80 -p 443:443 -p 4443:4443 \ -v /opt/ngrok/ngrok.yml:/etc/ngrok/ngrok.yml \ -v /opt/ngrok/server.crt:/etc/ngrok/server.crt \ -v /opt/ngrok/server.key:/etc/ngrok/server.key \ ngrok这里我们将本地的 ngrok.yml、server.crt 和 server.key 文件挂载到容器内部,并在 ngrok 镜像中启动 ngrokd 服务器,同时将容器内部的 80、443 和 4443 端口映射到主机的对应端口上。通过 -v 参数将 ngrok.yml、server.crt 和 server.key 文件挂载到容器内部的 /etc/ngrok 目录中,使得 ngrokd 可以读取到这些文件并进行配置。
这样,我们就成功地在 Docker 中搭建了一个 ngrok 内网穿透服务。通过访问公网 IP,即可访问内网的 web 应用程序和 SSH 服务。同时,由于 ngrok 支持 HTTPS 流量转发,因此我们的 web 应用程序可以获得更高的安全性。
举一个复杂的例子,假设我们有一个内网中运行的 Django Web 应用程序,需要暴露给外部用户访问。首先,在 Django 中启用 HTTPS,生成证书文件 server.crt 和 server.key,并将这两个文件放置到 /opt/django 目录中。
然后,我们在本地机器上使用 ngrok 命令行工具,将内网的 8000 端口转发到公网上,并使用自己的域名 http://example.com:
ngrok http -subdomain=example 8000这样,我们就可以通过访问 https://example.ngrok.io 访问内网中运行的 Django Web 应用程序了。
接着,我们使用上面提到的 Dockerfile 和 ngrok.yml 文件,在 Docker 中构建和运行 ngrok 镜像。注意,在 ngrok.yml 文件中,我们需要将 http 和 https 的 hostname 配置为 http://example.com,这与上面使用 ngrok 命令行工具时设置的子域名相对应。
最后,我们将公网 IP 的 80 和 443 端口映射到 Docker 容器的对应端口上,并将 /opt/django/server.crt 和 /opt/django/server.key 文件挂载到 Docker 容器的 /etc/ngrok 目录中,使得 ngrokd 可以读取到这些文件并进行配置。启动 Docker 容器后,我们就可以通过访问 https://example.com 访问内网中运行的 Django Web 应用程序了。
ngrok 是一款功能强大的内网穿透工具,通过使用 Docker 构建 ngrok 镜像,我们可以快速搭建一个内网穿透服务,并将内网的 web 应用程序暴露到公网。