«

家庭服务器网络访问方案

小冰 • 2 天前 • 17 次点击 •


我在家庭内部运行这一台服务器和一台 NAS 设备,其中提供着不少对外的服务,需要从公网能访问到这些服务。之前由于我的家庭宽带中提供公网的 IPV4 的服务,所以一直用的方案是 阿里云域名 + 光猫桥接路由器拨号 +TPLINK 自带的 DDNS+TPLINK 的端口转发 ,就能把内网的接口映射到公网上去,其中还有不少的细节问题,感兴趣的可以找我私聊。

但是由于现在电信的宽带逐步回收了公网的 IPV4 服务,所以这个方案现在不攻自破了。这里要吐槽一下电信是真的坑,毫无征兆的回收,导致我的服务宕机了好几天,这几天掉的头发都快织毛衣了。

折腾的这几天也有一些被 pass 掉的方案,简单说一说。

第一个就是保持原来的方案不动,开启 IPV6 的转发,由于 IPV6 现在给的都是公网的,所以也能解决外网访问的问题,实测是可以走通的,但是过程中遇到的几个问题让我放弃了这个方案。

问题一是如果我使用 IPV6 来转发网页的话,那我所有访问的地方也得支持 IPV6,不然就无法访问(主要是 DNS 的问题)。

问题二是 IPV6 的安全性问题,我的路由器只要开启了 IPV6,就会给子网的所有设备都获取一个公网的 IPV6,毫无防护,这也迫使我没有采纳这个方案。

可以先看看教程保姆级教程:用Docker安装Lucky进行STUN内网穿透_网络存储_什么值得买 对lucky有所了解,LUCKY非常强大,几乎涵盖了这一块的全部内容。在没有公网的情况下还可以用STUN内网穿透让外部访问内网。虽然很强,但是STUN模式的端口会不时的变化,变化之后就要自己去重新配置一下,能用,但是不优雅。抛弃。

首先说个大前提,要用Frp,需要有 一台有公网IP的服务器 ,大部分情况是需要花钱买的,看到这没兴趣的可以直接下一篇了。

一定要记得开放服务器的安全组。

Frp分为frps(服务端)frpc(客户端) 两部分,简单来说就是把在有公网ip的服务器上部署frps,然后在内网的设备中部署frpc,这样就能把内网设备中的端口映射到服务器上,再访问服务器上的相应的转发端口,就能实现外部网络访问内网服务了。

我这边选择用docker来安装,这样移植性更高一些,主要是我的每台机器中都有docker。

首先在服务端安装frps。

同目录下创建docker-compose.ymlfrps.toml两个文件,用docker-compose up -d命令运行,frps.toml的具体配置可以看官网的参考。

# docker-compose.yml

version: '3'
services:
  frps:
    image: snowdreamtech/frps:latest
    container_name: frps
    restart: always
    network_mode: host
    volumes:
      - ./frps.toml:/etc/frp/frps.toml
# frps.toml

# 客户端与服务连接端口
bindPort = 7777
# 客户端连接服务端时认证的密码
auth.token = "123"
# http协议监听端口
vhostHTTPPort = 82
# https 协议监听端口
vhostHTTPSPort = 83
# web界面配置
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"

然后安装frpc
frpc的运行和frps大致相同,改改配置文件就行。

# docker-compose.yml

version: '3'
services:
  frpc:
    image: snowdreamtech/frpc:latest
    container_name: frpc
    restart: always
    network_mode: host
    volumes:
      - ./frpc.toml:/etc/frp/frpc.toml
# 填写服务器的公网ip
serverAddr = "111.111.111.111"
# frps中的bindPort 
serverPort = 7777
# frps中的auth.token
auth.token = "123"

[[proxies]]
name = "xxx-https"
type = "https"
localIP = "127.0.0.1"
localPort = 183
customDomains = ["xxx.top","*.xxx.top"]

[[proxies]]
name = "xxx-http"
type = "http"
localIP = "127.0.0.1"
localPort = 182
customDomains = ["xxx.top","*.xxx.top"]

由于我这个人很懒,并不想记那么多东西,但是我内网中又有很多的服务要透传出去,所以我基于上述的方案有一个解决流程。

首先注册一个自己的域名,我在阿里云注册的.top,很便宜几乎白嫖。

然后把这个把这个域名解析很多二级域名(自己用得到的,比如av.xxx.top)这种,解析到frps的ip上,无脑解析就行,更懒一点的可以直接解析一个*.xxx.top,以后就不用管这个东西了,但是这个容易被扫,还是自己配置不比较方便。

接下来就是在frpc的那台机器上,用我上面的配置方案来配置https和http的转发,记住写customDomains。我配置的localIP和localPort指向的是我本地的nginx,我这边用的是**Nginx UI** ,这个工具就是一个可视化的nginx配置工具,我主要用到里面的站点和证书,感兴趣的后面我会再出一篇来讲解一下。

在nginx ui中,可以用通配符给域名配置证书,然后在站点功能中配置自己相应的站点引用这个证书,就能开启全站https了。

经过上述流程的折腾,后续我再有新站点新增,我需要动的地方就很有限了。

  1. 先在域名解析的地方,解析出一个我需要的二级域名。
  2. 然后在nginx ui中配置我这个二级域名需要转发的服务。

搞定,收工。

收藏

推荐阅读:

收到6条回复
avatar
小白 用户3 小时前
没有公网ipv4只能frp啦
avatar
小新 用户3 小时前
设备有ipv6也不会有什么大问题,或者说这才是互联网本身该有的样子嘛。

不过实在怕一些物联网设备有漏洞,可以单独的搞个vlan/路由器不给ipv6就行了
avatar
mjj 用户3 小时前
有的运营商可以免费给动态V4,然后上DDNS
avatar
佩奇 用户3 小时前
有公网服务器的前提下,使用easytier/tailscale/zerotier组虚拟网后更方便
avatar
胖虎 用户3 小时前
大佬,用公网IP的服务器的这个方案会消耗出网流量吗?我现在参加华为云的一些活动续费了几年香港的服务器;如果不消耗的话后面参加的活动可以买华为云那种国内的一个月100G流量的服务器
avatar
魔法少女 用户3 小时前
有一些访问端还不支持v6的访问,比如我司的网络就不行,不然用v6就蛮好
请先 登录 再回复