惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
C
Check Point Blog
G
Google Developers Blog
V
Visual Studio Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
有赞技术团队
有赞技术团队
MongoDB | Blog
MongoDB | Blog
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
D
Docker
Hugging Face - Blog
Hugging Face - Blog
The GitHub Blog
The GitHub Blog
博客园 - 三生石上(FineUI控件)
A
About on SuperTechFans
Recent Announcements
Recent Announcements
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
阮一峰的网络日志
阮一峰的网络日志
Stack Overflow Blog
Stack Overflow Blog
Vercel News
Vercel News

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
家庭公网 IP 的配置与应用 - 少数派
2023-08-19 · via 少数派

本文主要记录了家庭公网 IP 的申请和配置(以上海电信为例),以及在 NAS 管理、远程观影和游戏机串流等场景的应用。

家庭公网 IP 的申请与配置

1. 公网 IP 申请

公网 IP 的申请比较方便,只需要打电话给客服说你需要公网 IP 就行,客服会直接帮你操作,一般来说 24 小时内就能搞定了。注意有时候客服会问你要公网 IP 做什么,你就回答工作需要或者访问家里的监控之类的原因就行,但是不要说自己在家里面架设网站。

2. 配置光猫:改为桥接模式

默认情况下,家里的光猫是「路由模式」,需要改成「桥接模式」。这里让运营商帮锚操作就行,要么客服远程可以修改,要么会帮你联系师傅上门。如果你想要挑战一下自己,也可以去网上搜教程自己动手改。

这里简单解释下这一步操作的目的。在「路由模式下」,光猫负责拨号上网,获得的是公网 IP(如果没有申请公网 IP,这里获得的就是运营商内网 IP),而连接到光猫的路由器获得的是 192.168.*.* 这种内网 IP。所以此时其他设备时没办法直接连接到你的路由器的,因为此时路由器并没有暴露到公网上。如果光猫支持端口映射的功能,当然也是可以在路由模式下将路由器暴露到公网的,只是这样比较麻烦。

而在「桥接模式」中,光猫就只负责转换光信号为数字信号,拨号上网的工作就交给了路由器。这样的话,路由器就可以获得公网 IP,公网的设备也就可以直接访问到路由器了。因为路由器是我们自己的设备,可以操作的空间较大,后续的其他操作也都在路由器上开展。

3. 配置路由器:拨号上网

当光猫是「路由模式」,时,路由器对应的网络模式为「DHCP」,即自动获取光猫分配给它的 IP 地址。当光猫改为「桥接模式」后,就需要将路由器的网络模式改为「PPPoE」,即拨号上网模式。路由器切换成该模式后需要手动填入家中宽带的账号密码,这个直接问运营商客服或者上门的运营商师傅就行。

完成这一步后,可以验证下是否成功获取公网 IP,方法如下:

  1. 在百度搜索「IP」,查看目前访问百度使用的 IP 地址
  2. 进入路由器的后台管理页面,查看 WAN 口获取到的 IP 地址
     

如果这两个 IP 地址一致,说明路由器已经成功获取到的公网 IP。

这里列举两种可能的错误情况:

  • 路由器后台看到的地址是 192.168.*.* 这种 IP:说明光猫没有改成桥接模式,仍然是路由模式
  • 路由器后台看到的的地址虽然不是 192.168.*.* 这种 IP,但是和百度上看到的也不一致:说明运营商并没有为你开通公网 IP

4. 配置路由器:开启防火墙

做完以上两步以后,你的路由器就已经暴露在公网了。这里注意需要把路由器的防火墙打开,不然很容易被黑客攻击。注意以下几个配置要关掉:

  • 响应来自外网的 ping 请求
  • 允许从互联网设置路由器
  • 允许外网访问 SSH 服务器

5. 配置路由器:端口映射/端口转发

目前只是路由器暴露在公网了,但是路由器下面的设备仍然是对公网不可见的。这里就需要进行端口映射,端口映射的作用就是将公网对路由器某个或者某几个特定端口 A 的全部访问转发到内网的某个设备的端口 B 上去。通过端口映射,可以将内网设备的特定端口暴露在公网上,,这样就可以在公网直接访问内网设备了。

不同品牌的路由器后台设置界面可能不同,以 pandavan 为例:

解释下配置的作用:

  • 源 IP 地址:允许的来源 IP 地址,这里填写 * 代表允许所有来源
  • 端口范围:上述提到的端口 A
  • 内网 IP:上述提到的「内网的某个设备」
  • 本地端口:上述提到的端口 B
  • 协议:根据实际需求选择,如果不知道需要转发的服务是基于什么协议的,可以直接选「TCP & UDP」

6. 配置路由器:动态域名服务(可选)

这个操作需要有一个域名,没有的话可以跳过本节。

虽然我们获取到了公网 IP,但是这个 IP 不是固定的(固定公网 IP 一般只面向企业,或者要多收钱),每次进行拨号的时候 IP 都会变,也就是说每次路由器重启公网 IP 就变了。为了方便在公网访问,我们可以将固定域名动态映射到路由器获取到的动态公网 IP 上,这样我们只需要访问固定的域名就可以了。

1. 在云服务商设置域名解析(以腾讯云为例)

在 DNS 解析页面添加一条记录:

  • 主机记录:比如我想把 router.my_domain_name.com 这个域名映射到我的路由器,那主机记录这里就填「router」
  • 记录类型:这里需要填「A」,「A」表示需要将域名指向一个 IP 地址
  • 记录值:「记录值」表示我想把该域名映射到哪个 IP 地址。因为我们的 IP 地址是动态的,所以这里先随便填,因为这个值需要路由器去主动到腾讯云上修改,这样才能做到动态的 DNS 解析

2. 路由器配置 DDNS(以 pandavan 为例)

前面提到了 DDNS 依赖路由器的主动修改,所以就需要给路由器一个腾讯云的 token,路由器可以通过这个 token 将自己当前的 IP 地址上报到腾讯云。腾讯云的管理 token 可以从这里获取。

公网 IP 的应用

NAS 管理:基于 SSH 隧道的公网 RDP 访问

我家中有一台 NAS,用的是我十年前读大学时买的笔记本电脑。我会在上面放一些电影电视剧,有时候跑一些下载任务。之前我的管理方式是通过 TeamViewer,虽然配置比较方便,使用起来延迟也比较低,但是每次连接比较慢,体验不够完美。而且有些公司是禁止在电脑上安装 TeamViewer 等远程桌面应用的。既然我们已经有了公网 IP,就可以搭建自己的远程桌面服务了。

最简单的方式是直接将远程桌面的端口通过端口映射暴露到公网上,这样就可以通过 IP 或者域名直连了,就像内网访问那样。但是由于 RDP 协议本身的安全性问题,在公网使用 RDP 存在一定危险性,有中勒索病毒的风险。虽然我的 NAS 上没有什么重要的资料,但是中了勒索病毒就需要清盘重装系统还是比较麻烦的。我们可以搭建 SSH 隧道,然后通过 SSH 隧道运行 RDP,大大提高了安全性。

SSH 隧道也叫 SSH 端口转发,通过在 SSH 客户端与 SSH 服务端之间建立一个隧道,将网络数据通过该隧道转发至指定端口,从而进行网络通信。关于 SSH 隧道的更多信息可以参考SSH三种隧道方式工作原理详解

在我们的场景中,首先建立 SSH 隧道将远程设备 的 RDP 协议端口 A(默认是 3389,这里建议修改成其他高位端口)映射到本地设备的端口 B,这样的话所有对本地端口 B 的访问数据都会转发到远程设备的端口 A。

具体步骤如下:

1. 开启远程设备的 SSH 服务器功能

网上教程有很多,这里就不赘述了。

2. 修改远程设备的 SSH 配置

不同系统的 SSH 配置文件路径如下:

  • Windows:C:\ProgramData\ssh\sshd_config
  • Linux/macOS:~/.ssh/config

配置文件修改如下:

Port 55555  # 建议将协议端口从 22 改为其他高位端口,
PermitRootLogin no  # 禁止 root 用户登录
PasswordAuthentication no  # 禁止使用密码登录
PubkeyAuthentication yes  # 使用公钥登录
AuthorizedKeysFile .ssh/authorized_keys  # 已授权公钥保存文件
# 对于 Windows 还需要注释下面几行:
# Match Group administrators
# AuthorizedKeysFile
#       PROGRAMDATA/ssh/administrators_authorized_keys

3. 在路由器上设置 SSH 端口映射(将远程设备的 SSH 端口映射到公网)

参考前面的教程操作即可。也可以直接。

4. 建立 SSH 隧道

ssh ${用户名}@${URL或者路由器公网IP} -p ${远程设备映射到外网的端口号} \
        -L ${前面提到的端口A}:127.0.0.1:${前面提到的端口B} \
        -N -f \
        -o ServerAliveInterval=60 \
        -o ServerAliveCountMax=3

参考:通过SSH隧道安全建立RDP远程桌面连接(RDP over SSH tunnel)

游戏机串流:PS5 远程游玩

1. 准备客户端软件

目前常用的客户端 App 有两款:

  • PS Remote Play
    • 索尼官方出品
    • 配置简单,但是自定义设置也少
    • 支持 macOS、iOS、Windows、Android
    • iOS、Android 仅支持在 WiFi 环境下使用
  • PSPlay
    • 第三方公司出品
    • 自定义配置较多
    • 更为流畅和稳定
    • 软件需要收费
    • 仅支持 iOS、Android(macOS on Apple Silicon 可以使用 iOS 版本)
    • 可以使用移动数据游玩

2. 局域网关联设备

  • 打开 PS5 的远程游玩设置
    • 设置-系统-远程游玩-启动远程游玩
    • 用户和账号-其他-主机分享和离线游玩-不禁用
  • 打开客户端 App,登录 PSN 账号后按照提示进行

3. 端口映射

如果你的路由器有 DMZ 功能,可以将 PS5 直接放到 DMZ 中(DMZ 可以简单理解把指定设备的所有端口映射到公网中)。

如果路由器没有 DMZ 功能,则需要手动映射以下几个端口:

服务名称内部端口外部端口网络协议
PS987987UDP
PS592979297UDP
PS5 传输92969296UDP
PS5 唤醒93029302UDP
PS5 认证92959295TCP & UDP

4. 远程游玩

对于 PS Remote Play,操作比较简单,打开 App 后选择之前关联过的设备就行,可能需要等一会(会先尝试在当前局域网搜索,搜索不到再去公网搜索,所以会慢些)。

PSPlay 则多了一个步骤,首先选择「远程连接」,然后手动输入路由器的公网 IP 地址。如果设置过 DDNS 的话,就可以直接输入域名,避免了 IP 地址改变后手动修改的麻烦。

如果还是对操作流程有疑问,可以参考下面三个视频:

最后放一张我假期在家远程游玩的照片(延迟 30 ms 左右,实测感觉不到延迟):