整体架构如上,运营商选择了电信,光纤使用了千兆光纤,和电信申请开通公网IP(wan ip),电信会送一个光猫,路由器我们自己买一个(我买了华硕的 rt-ax57 路由器)。
安装好之后,开始配置路由器。电脑连接路由器底部写的那个SSID wifi 网络。然后打开 http://www.asusrouter.com,登陆路由器(初始账号和密码,都是admin,如果无法登录,说明改过,则需要去路由器上点一下那个重置开关)。之后设置 2.4G 和 5G 网络,设置 wifi 账号和密码(账号名称使用默认的,先不要动,后续完全搞定,再进行设置)。之后重新连接 wifi,进入路由器主界面,点击右侧的外部网络=>互联网连接,选择与外网的连接方式,我这里是 PPPoE,输入宽带账号密码,连接成功。
到这里,内部网络就通了。
如果我们家庭内部开放了一些服务,需要远程访问,则需要再做一些事情。首先在 Ubuntu 上开启了一个 java 进程,使用ipv4方式,端口使用8888,此时通过局域网内的多个设备通过 ubuntu 的 局域网IP:8080 可以访问这个进程,但是通过公网IP:8080就无法访问(访问 https://ip.900cha.com/ 或者再路由器主界面=>网络地图菜单下可以看到公网 IP)。此时,还需要做两件事:
- 需要在路由器主配置界面=>外部网络=>配置端口转发处配置端口转发,具体配置方式可以看这里 https://www.asus.com.cn/support/FAQ/1037906,就是将公网访问的端口转发到指定的局域网IP(即指定设备,比如此处的 ubuntu 电脑)的指定端口上。此时路由器配置就ok了。
- ubuntu 系统的防火墙开启 8888 端口的可访问权限(sudo ufw allow 8888)
- 路由器主界面=>防火墙,开启防火墙和 ddos 防护
到这里,通过 公网ip:8888 就可以访问家庭内部这个 java 进程了。通常,电信分配的公网 IP 是不固定的,因此,需要通过 域名 + DDNS 的方式进行转发。
域名和 DNS 解析服务可以通过去运营商采买,我这里在腾讯服务器买了域名和 DNS 解析服务。腾讯提供了动态注册 DNS 解析规则的 API(即动态的修改域名到IP的映射)。我们只需要编写一个公网 IP 的获取服务,每隔一段时间调用一次这个 API 即可。开源界有一个 ddns-go 可以做到这个,我这边自己实现了一个 ddns-java。
附:如果需要通过 公网IP:port 访问路由器,远程连接路由器的话,需要再路由器主界面=>系统管理=>系统设置=>远程访问连接=>开启可从互联网访问路由器的开关,并且配置端口。