家庭公网 IP 的配置与应用
本文由 Fluid 用户授权转载,版权归原作者所有。
本文作者:中天与大瓶子
原文地址:https://sspai.com/post/79532
本文主要记录了家庭公网 IP 的申请和配置(以上海电信为例),以及在 NAS 管理、远程观影和游戏机串流等场景的应用。
家庭公网 IP 的申请与配置
公网 IP 申请
公网 IP 的申请比较方便,只需要打电话给客服说你需要公网 IP 就行,客服会直接帮你操作,一般来说 24 小时内就能搞定了。注意有时候客服会问你要公网 IP 做什么,你就回答工作需要或者访问家里的监控之类的原因就行,但是不要说自己在家里面架设网站。
配置光猫:改为桥接模式
默认情况下,家里的光猫是「路由模式」,需要改成「桥接模式」。这里让运营商帮锚操作就行,要么客服远程可以修改,要么会帮你联系师傅上门。如果你想要挑战一下自己,也可以去网上搜教程自己动手改。
这里简单解释下这一步操作的目的。在「路由模式下」,光猫负责拨号上网,获得的是公网 IP(如果没有申请公网 IP,这里获得的就是运营商内网 IP),而连接到光猫的路由器获得的是 192.168.*.*
这种内网 IP。所以此时其他设备时没办法直接连接到你的路由器的,因为此时路由器并没有暴露到公网上。如果光猫支持端口映射的功能,当然也是可以在路由模式下将路由器暴露到公网的,只是这样比较麻烦。
而在「桥接模式」中,光猫就只负责转换光信号为数字信号,拨号上网的工作就交给了路由器。这样的话,路由器就可以获得公网 IP,公网的设备也就可以直接访问到路由器了。因为路由器是我们自己的设备,可以操作的空间较大,后续的其他操作也都在路由器上开展。
配置路由器:拨号上网
当光猫是「路由模式」,时,路由器对应的网络模式为「DHCP」,即自动获取光猫分配给它的 IP 地址。当光猫改为「桥接模式」后,就需要将路由器的网络模式改为「PPPoE」,即拨号上网模式。路由器切换成该模式后需要手动填入家中宽带的账号密码,这个直接问运营商客服或者上门的运营商师傅就行。
完成这一步后,可以验证下是否成功获取公网 IP,方法如下:
- 在百度搜索「IP」,查看目前访问百度使用的 IP 地址
- 进入路由器的后台管理页面,查看 WAN 口获取到的 IP 地址
如果这两个 IP 地址一致,说明路由器已经成功获取到的公网 IP。
这里列举两种可能的错误情况:
- 路由器后台看到的地址是
192.168.*.*
这种 IP:说明光猫没有改成桥接模式,仍然是路由模式 - 路由器后台看到的的地址虽然不是
192.168.*.*
这种 IP,但是和百度上看到的也不一致:说明运营商并没有为你开通公网 IP
配置路由器:开启防火墙
做完以上两步以后,你的路由器就已经暴露在公网了。这里注意需要把路由器的防火墙打开,不然很容易被黑客攻击。注意以下几个配置要关掉:
- 响应来自外网的 ping 请求
- 允许从互联网设置路由器
- 允许外网访问 SSH 服务器
配置路由器:端口映射/端口转发
目前只是路由器暴露在公网了,但是路由器下面的设备仍然是对公网不可见的。这里就需要进行端口映射,端口映射的作用就是将公网对路由器某个或者某几个特定端口 A 的全部访问转发到内网的某个设备的端口 B 上去。通过端口映射,可以将内网设备的特定端口暴露在公网上,,这样就可以在公网直接访问内网设备了。
不同品牌的路由器后台设置界面可能不同,以 pandavan 为例:
解释下配置的作用:
- 源 IP 地址:允许的来源 IP 地址,这里填写 * 代表允许所有来源
- 端口范围:上述提到的端口 A
- 内网 IP:上述提到的「内网的某个设备」
- 本地端口:上述提到的端口 B
- 协议:根据实际需求选择,如果不知道需要转发的服务是基于什么协议的,可以直接选「TCP & UDP」
配置路由器:动态域名服务(可选)
这个操作需要有一个域名,没有的话可以跳过本节。
虽然我们获取到了公网 IP,但是这个 IP 不是固定的(固定公网 IP 一般只面向企业,或者要多收钱),每次进行拨号的时候 IP 都会变,也就是说每次路由器重启公网 IP 就变了。为了方便在公网访问,我们可以将固定域名动态映射到路由器获取到的动态公网 IP 上,这样我们只需要访问固定的域名就可以了。
在云服务商设置域名解析(以腾讯云为例)
在 DNS 解析页面添加一条记录:
- 主机记录:比如我想把
router.my_domain_name.com
这个域名映射到我的路由器,那主机记录这里就填「router」 - 记录类型:这里需要填「A」,「A」表示需要将域名指向一个 IP 地址
- 记录值:「记录值」表示我想把该域名映射到哪个 IP 地址。因为我们的 IP 地址是动态的,所以这里先随便填,因为这个值需要路由器去主动到腾讯云上修改,这样才能做到动态的 DNS 解析
路由器配置 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。
具体步骤如下:
开启远程设备的 SSH 服务器功能
网上教程有很多,这里就不赘述了。修改远程设备的 SSH 配置
不同系统的 SSH 配置文件路径如下:
- Windows:
C:\ProgramData\ssh\sshd_config
- Linux/macOS:
~/.ssh/config
配置文件修改如下:1
2
3
4
5
6
7
8
9Port 55555 # 建议将协议端口从 22 改为其他高位端口,
PermitRootLogin no # 禁止 root 用户登录
PasswordAuthentication no # 禁止使用密码登录
PubkeyAuthentication yes # 使用公钥登录
AuthorizedKeysFile .ssh/authorized_keys # 已授权公钥保存文件
# 对于 Windows 还需要注释下面几行:
# Match Group administrators
# AuthorizedKeysFile
# PROGRAMDATA/ssh/administrators_authorized_keys
在路由器上设置 SSH 端口映射(将远程设备的 SSH 端口映射到公网)
参考前面的教程操作即可。也可以直接。建立 SSH 隧道
1
2
3
4
5ssh ${用户名}@${URL或者路由器公网IP} -p ${远程设备映射到外网的端口号} \
-L ${前面提到的端口A}:127.0.0.1:${前面提到的端口B} \
-N -f \
-o ServerAliveInterval=60 \
-o ServerAliveCountMax=3