本文主要记录了家庭公网 IP 的申请和配置(以上海电信为例),以及在 NAS 管理、远程观影和游戏机串流等场景的应用。
家庭公网 IP 的申请与配置
1. 公网 IP 申请
公网 IP 的申请比较方便,只需要打电话给客服说你需要公网 IP 就行,客服会直接帮你操作,一般来说 24 小时内就能搞定了。注意有时候客服会问你要公网 IP 做什么,你就回答工作需要或者访问家里的监控之类的原因就行,但是不要说自己在家里面架设网站。
2. 配置光猫:改为桥接模式
默认情况下,家里的光猫是「路由模式」,需要改成「桥接模式」。这里让运营商帮锚操作就行,要么客服远程可以修改,要么会帮你联系师傅上门。如果你想要挑战一下自己,也可以去网上搜教程自己动手改。
这里简单解释下这一步操作的目的。在「路由模式下」,光猫负责拨号上网,获得的是公网 IP(如果没有申请公网 IP,这里获得的就是运营商内网 IP),而连接到光猫的路由器获得的是 192.168.*.*
这种内网 IP。所以此时其他设备时没办法直接连接到你的路由器的,因为此时路由器并没有暴露到公网上。如果光猫支持端口映射的功能,当然也是可以在路由模式下将路由器暴露到公网的,只是这样比较麻烦。
而在「桥接模式」中,光猫就只负责转换光信号为数字信号,拨号上网的工作就交给了路由器。这样的话,路由器就可以获得公网 IP,公网的设备也就可以直接访问到路由器了。因为路由器是我们自己的设备,可以操作的空间较大,后续的其他操作也都在路由器上开展。
3. 配置路由器:拨号上网
当光猫是「路由模式」,时,路由器对应的网络模式为「DHCP」,即自动获取光猫分配给它的 IP 地址。当光猫改为「桥接模式」后,就需要将路由器的网络模式改为「PPPoE」,即拨号上网模式。路由器切换成该模式后需要手动填入家中宽带的账号密码,这个直接问运营商客服或者上门的运营商师傅就行。
完成这一步后,可以验证下是否成功获取公网 IP,方法如下:
- 在百度搜索「IP」,查看目前访问百度使用的 IP 地址
- 进入路由器的后台管理页面,查看 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 功能,则需要手动映射以下几个端口:
服务名称 | 内部端口 | 外部端口 | 网络协议 |
---|---|---|---|
PS | 987 | 987 | UDP |
PS5 | 9297 | 9297 | UDP |
PS5 传输 | 9296 | 9296 | UDP |
PS5 唤醒 | 9302 | 9302 | UDP |
PS5 认证 | 9295 | 9295 | TCP & UDP |
4. 远程游玩
对于 PS Remote Play,操作比较简单,打开 App 后选择之前关联过的设备就行,可能需要等一会(会先尝试在当前局域网搜索,搜索不到再去公网搜索,所以会慢些)。
PSPlay 则多了一个步骤,首先选择「远程连接」,然后手动输入路由器的公网 IP 地址。如果设置过 DDNS 的话,就可以直接输入域名,避免了 IP 地址改变后手动修改的麻烦。
如果还是对操作流程有疑问,可以参考下面三个视频:
最后放一张我假期在家远程游玩的照片(延迟 30 ms 左右,实测感觉不到延迟):