远程访问系列(一)公网IP

最近新入了个 NAS ,设备是绿联 DXP4800,装上黑裙之后,首要的问题是解决最常用的照片文件同步问题,上文已经解决过,参见 DXP4800-黑群晖小记](https://blog.xiaohuangyu.space/p/dxp4800-synology/) 研究了几种外网访问内网设备的方案,在这里做个总结。本文是该系列的开篇,主要介绍各种方案的优缺点和适用场景。 网上搜索外网访问内网,局域网访问,远程连接,远程访问 docker,基本都可以归类为人不在家,想访问家中的nas 及其他的设备,所以标题暂时起名为远程访问系列

远程访问方案梳理

1. 基于公网 IP 的直接访问方案

  • 优点:直接利用公网 IP 访问,无需中转,速度快。支持 ipv4/ipv6。
  • 缺点:依赖运营商分配公网 IP,安全风险高。
  • 适用场景:有公网 IP 的网络环境,如部分企业专线、有公网 IP 的家庭网络。

2. VPN(虚拟专用网络)方案

  • 优点:安全加密,可完整访问内网。
  • 缺点:需服务器或依赖 Cloudflare 服务,配置复杂。
  • 适用场景:企业办公环境。
  • 软件推荐:OpenVPN、WireGuard。

3. 内网穿透方案

  • 优点:无需公网 IP,配置灵活。
  • 缺点:依赖中转服务器,且访问速度与中转服务器带宽有关,需要额外付费,并且可能有延迟。
  • 适用场景:临时远程访问,如开发测试。
  • 软件推荐:frp、ngrok。

4. ZeroTier 异地组网方案

  • 优点:P2P 连接,配置简单。
  • 缺点:免费版限制设备数量,且存在打洞失败几率,但可使用自建 planet 一类的来突破限制(需要服务器)。
  • 适用场景:小型组网,如家庭网络。

5. Cloudflare Tunnel 方案

  • 优点:安全性高,配置简单。
  • 缺点:依赖 Cloudflare 服务,因众所周知的原因速度访问巨慢。
  • 适用场景:Web 服务、应用访问。

个人比较推荐方案 1和方案 4,理由如下

  1. 付费少
  2. 配置相对简单
  3. 打通之后,需要少量配置或无需配置即可实现多设备访问

本文先介绍如何使用公网 ip 来进行远程访问,本文先假定能够开通 ipv4,具体操作步骤如下

基于公网 IPV4 的直接访问方案

一、获取公网IP

1. 申请公网IP

  • 联系宽带运营商客服申请开通公网IP
  • 根据运营商政策可能需要更换套餐或支付额外费用
  • 可能获得的公网IP类型:
    • 固定IPv4(地址不变,费用较高,一般申请不到)
    • 动态IPv4(光猫重启后地址可能会变化,所以需要域名配合ddns 解析)
    • 动态IPv6(现在运营商普遍支持,但需要配合动态 dns 解析)

2. 验证公网IP

  • 访问 https://ip138.com/ 或直接百度搜 ip 查询当前 ip
  • 使用命令行工具检查:
    • Windows: ipconfig /all
    • Linux/Mac: ifconfig 或 ip addr
  • 注意区分内网IP(192.168.x.x、10.x.x.x等)和公网IP,且注意路由器或光猫是否响应 ping 命令

二、网络环境配置

1. 光猫设置

  • 理想情况:直接在光猫配置端口转发
    • 需要运营商提供超级管理员密码
    • 配置较简单,性能较好
  • 现实情况:多数无法获取超级管理员权限,且光猫性能垃圾,多设备连接了之后会异常卡
    • 需要将光猫改为桥接模式,自己额外接路由器
    • 可能需要运营商远程协助设置

可能遇到的问题及解决方案

  1. 运营商不给开公网ip => 投诉
  2. 运营商不给开桥接 =》 投诉

2. 路由器配置

  • 选购支持端口转发的路由器
  • 设置路由器PPPoE拨号
    • 输入宽带账号密码
  • 配置端口转发
    • 选择需要转发的内部端口
    • 设置对应的外部端口
    • 指定内网设备IP地址
    • 选择协议类型(TCP/UDP)

可能遇到的问题及解决方案

  1. 拿不到宽带账号密码 =》 投诉
  2. 验证自己的路由器是否获取到公网 ip =》 https://ip138.com 看ip 是否与路由器后台 ip 一致,且不为192.168.xxx.xxx ,不为 10.xx.xx.xx
  3. 验证端口转发是否生效 => 假定获取到的公网ip 为 222.71.193.9 配置的转发为 9999 端口转发到内网 192.168.1.200 机器的 5001 端口,则执行命令
1
2
3
4
> telnet  222.71.193.9 9999   回车
Trying  222.71.193.9...
Connected to  222.71.193.9.
Escape character is '^]'.       (出现这行表示正常,如果没出现则依次排查应用状态,防火墙状态,端口转发是否正确)

3. 防火墙设置

  • 路由器防火墙配置
    • 开放必要端口
    • 设置访问控制规则
    • 启用基本安全防护
  • 内网设备防火墙配置
    • 允许相关端口访问
    • 配置访问白名单
    • 启用安全防护措施

完成上述配置之后,在外网可以直接通过 http://公网ip:端口转发外部port 访问相关的 web 应用,此处的 ip 为公网 ip,port 为配置的外网端口转发,假定获取到的公网ip 为 222.71.193.9 配置的转发为 9999 端口转发到内网 192.168.1.200 机器的 5000 端口(群晖默认端口),则访问地址为 http://222.71.193.9:9999 ,但运营商给的是动态 ip,可能会在某些特定的时候自动改变,或者是在路由器重启时重新分配,重新分配之后,就原来的方式就不能访问了,所以为了使用方便,都希望直接使用某个域名来远程访问内部服务,接下来就需要介绍后续DDNS 了

DDNS (Dynamic DNS), 熟悉 DNS 的小伙伴都知道 DNS 是将域名转为 IP 地址的服务,直接复习下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
 DDNS(动态域名系统)和DNS(域名系统)是两个相关但不同的概念。以下是它们的主要区别:

### DNS(域名系统)
- **全球性服务**:DNS是一个全球性的服务,它将人类易于记忆的域名转换为计算机使用的IP地址。
- **静态解析**:传统的DNS服务通常用于静态IP地址,即域名与IP地址的映射是固定的,不会随时间变化。
- **分布式系统**:DNS是一个分层的分布式系统,包括根服务器、顶级域名服务器、权威名称服务器和递归服务器。
- **缓存机制**:DNS查询结果通常被缓存,以提高解析速度和减轻DNS服务器的负载。
- **适用于静态IP**:对于拥有静态公网IP的用户或企业来说,传统的DNS服务是合适的。

### DDNS(动态域名系统)
- **动态IP支持**:DDNS服务允许用户将一个固定的域名与动态变化的IP地址关联起来,特别适用于家庭用户和小型办公室,他们的公网IP地址可能会因为重新连接互联网而变化。
- **自动更新**:DDNS服务会自动检测IP地址的变化,并更新DNS记录,确保域名始终指向当前的IP地址。
- **依赖第三方服务**:DDNS服务通常由第三方提供商提供,用户需要在服务提供商的平台上注册域名,并配置DDNS服务。
- **客户端软件**:用户通常需要在本地网络设备上安装客户端软件,该软件会监测IP地址的变化,并与DDNS服务提供商的服务器通信以更新DNS记录。
- **适用于动态IP**:对于没有静态公网IP的用户来说,DDNS服务是必要的,以便他们能够通过一个固定的域名来访问或管理他们的网络设备。

总结来说,DNS是一个全球性的域名解析服务,而DDNS是DNS服务的一个扩展,专门为动态IP地址提供域名解析服务。DDNS解决了动态IP地址环境下域名解析的问题,使得用户可以通过一个固定的域名来访问他们的设备,即使这些设备的IP地址可能会变化。

DDNS是直接将域名转化为动态 ip,这样我们配置好之后就直接能用固定的域名访问内网中的各种服务了

三、域名解析配置(可选)

1. 域名准备

  • 购买域名
  • 配置DNS服务器

2. DDNS配置

  • 选择DDNS软件
    • DDNS-GO
    • Lucky
    • NO-IP
    • 花生壳
  • 软件配置
    • 设置域名提供商API,网上教程太多 不过多赘述,参考各个软件官方文档即可
    • 配置更新间隔
    • 选择需要解析的域名
  • 运行方式
    • 物理机直接运行
    • Docker容器运行
    • 路由器插件运行

3. 解析验证

  • 测试域名解析是否正确

可能遇到的问题及解决方案

  1. 测试域名解析是否正确 =>
1
2
3
4
5
6
7
8
❯ ping 你配置在 ddns 软件里的域名 比如
ping nas.abcdefg.com
PING nas.abcdefg.com (222.71.193.9): 56 data bytes
64 bytes from 222.71.193.9: icmp_seq=0 ttl=50 time=12.410 ms
64 bytes from 222.71.193.9: icmp_seq=1 ttl=50 time=13.020 ms
64 bytes from 222.71.193.9: icmp_seq=2 ttl=50 time=15.120 ms

重复出现的 ip与自己公网 ip 一致即可

如果在配置 ddns 之前如果都没问题,但是 ddns 解析有问题,可能需要关注下自己是否使用了相关代理软件,修改代理规则,我曾经遇到过使用 cloudflare 的 dns,同时在路由器上配置了代理,再使用 ddns 时发现 cloudflare 上的 dns 解析一直是解析到某海外 ip,排查之后发现是规则设置的问题

四、测试验证

测试部分,不做过多数据测试,能满足自己要求即可

1. 基础连通性测试

  • Ping测试
    • ping 公网IP
    • ping 域名(如果配置了域名)
  • 端口检测
    • 使用在线端口检测工具
    • telnet测试端口连通性

2. 性能测试

  • 带宽测试
  • 延迟测试
  • 稳定性测试
Built with Hugo
Theme Stack designed by Jimmy