您当前的位置:首页 > 时尚 > 内容

如何用内网连接远程(远程访问内网服务器)

如何用内网连接远程(远程访问内网服务器)?如果你对这个不了解,来看看!

基于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.3

3 在客户端上使用 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 应用程序暴露到公网。


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 将一个三位数反向输出的函数(将一个三位数反向输出)

下一篇: 其他国家的教育系统(各个国家不同的教育制度有哪些不同)



推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号