第 3 课:申请公网 IP
实验环境:光猫+Ubuntu 服务器
(一)家庭网络结构
1. 网络结构
默认家庭网络结构(拨号在路由器):
[公网互联网]
↓
[光猫(Modem)] ——> 拨号权限交给
↓ 路由器
[家庭路由器(PPPoE拨号)]
↓
[家庭局域网内设备:电脑、手机、服务器等]
在这个结构中,由路由器进行拨号(PPPoE),拿到公网或私网 IP,内部设备通过 NAT 上网。
而在本文中我们要实现的结构是:
[公网互联网]
↓
[光猫(可能是桥接模式)]
↓
[Ubuntu 服务器(自己拨号上网)]
此时,你的服务器自己拨号,不依赖路由器。这种结构适合需要让服务器直接暴露在公网、拥有公网 IP的场景,但其他设备将无法通过这台服务器共享网络。
2. 上网方式
| 上网方式 | 特点 |
|---|---|
| PPPoE 拨号 | 需要账号密码,获取公网/内网 IP,最常见 |
| DHCP(动态主机配置协议) | 不需要账号密码,插上就用(校园/公司/租房) |
| 静态 IP 分配 | ISP 固定给你一个公网 IP,企业专线、静态公网 |
| 4G/5G蜂窝网络 | 运营商通过基站分配 IP,适合移动路由器 |
| 桥接+服务器拨号 | 专业配置,适合公网部署服务器 ✅ |
网络业务提供商(Internet Service Provider,简称ISP) 指比如:移动、电信、联通
这里我们要重点介绍:拨号上网(PPPoE)
PPPoE = Point-to-Point Protocol over Ethernet(以太网点对点协议)
它本质上是用宽带账号+密码登录 ISP 网络,以建立正式的“会话”,之后你才可以分配 IP(公网/内网)并访问互联网。
拨号动作由谁执行?
| 拨号者 | 场景 |
|---|---|
| 光猫拨号 | 企业/校园/一些老旧场景 |
| 路由器拨号 | 家庭主流配置 ✅ |
| 服务器拨号 | 进阶用户/特殊用途(公网服务器)✅ |
为什么需要账号密码?
- 宽带账号 = 身份凭证(比如手机号+@isp)
- ISP 使用这个来验证你是否是合法用户;
- 相当于上网“登录”步骤;
- 也用于计费、限速、流控等。
拨号后是否一定有公网 IP?
❌ **不一定!**拨号后获得的 IP 可以是:
| 类型 | 是否公网 |
|---|---|
| 100.x.x.x(CGNAT) | ❌ 内网 |
| 192.168.x.x / 10.x.x.x | ❌ 内网 |
| 115.xxx.xxx.xxx / 121.xxx.xxx.xxx 等 | ✅ 真正公网 IP |
我们最终要实现的架构是:外网 → 光猫桥接口 → Ubuntu 拨号获得公网 IP
(二)检测是否有公网地址
要检测你的家庭服务器是否拥有公网 IP(也叫“外网 IP”)
1. 查看本机的 IP 地址:
首先要查看本机是否直接具有 公网IP 地址
- Windows:运行
ipconfig - Linux/MacOS:运行
ip a或ifconfig
如果你看到的 IP 是以下格式,说明是现在是家庭路由器 NAT 分发的 内网 IP,不是公网IP:
- 192.168.x.x
- 10.x.x.x
- 172.16.x.x ~ 172.31.x.x
说明你的服务器在 NAT 后的内网中,由路由器统一管理公网出口。
2. 查看家庭的 IP 地址
即使 本机IP 地址可能是路由器分发的私网IP,路由器的出口 本身也可能具有公网 IP。
这个网址测试 是否具有 IPv6:IPv6 测试
这个网址测试 详细的 IPv4 信息:IPCheck.ing
可以让朋友或你自己用另一台设备(如手机关闭 WiFi 用 4G 网络)尝试访问你的服务器端口(例如通过公网 IP:端口号访问 Web 服务):
curl http://你的公网IP:端口
若可以访问,说明:
- 你有公网 IP;
- 该端口没有被封锁;
- 路由器已正确端口映射。
但是常见的情况是你的路由器其实也没有公网 IP
很多家庭网络使用运营商 NAT(CGNAT),你即使获取到了一个公网 IP,也无法真正用于端口映射,因为该公网 IP是运营商层的,并非你真正“拥有”的。
3. 例子
在线IP 测试网站反馈的路由器出口IP是:
你的公网 IPv4 地址是 115.234.230.5
你的运营商(ISP)是 CHINANET-BACKBONE No.31,Jin-rong Street
没有检测到 IPv6 地址 [更多信息]
你只接入了 IPv4 互联网,不能访问纯 IPv6 网站。
可向运营商咨询如何使用 IPv6,实现最佳的网络性能。 [更多信息]
你的 DNS 服务器(可能由运营商提供)已经接入 IPv6 互联网了。
而本机上显示的IP地址为:
以太网适配器 vEthernet (Default Switch):
连接特定的 DNS 后缀 . . . . . . . :
本地链 接 IPv6 地址. . . . . . . . : fe80::7b22:b022:c1e1:625c%31
IPv4 地址 . . . . . . . . . . . . : 172.19.160.1
子网掩码 . . . . . . . . . . . . : 255.255.240.0
默认网关. . . . . . . . . . . . . :
说明如下:你没有公网 IPv4
你看到的本地 IP 地址是:172.19.160.1,而你的公网 IP 是 115.234.230.5,说明:
- 你当前的服务器或电脑并没有被分配真实公网 IPv4;
- 你处在 运营商 NAT 后的局域网中(
172.16.x.x ~ 172.31.x.x是典型的私有内网 IP 段); - 所谓的公网 IP(
115.234.230.5)属于你宽带网关或运营商 NAT 网关,并非直接分配给你的设备; - 你无法直接通过该公网 IP + 端口访问你的家庭服务器,即使你做了端口映射,极可能是失败的。
(三)申请公网IP
那么现在我们需要运营商给我们分配一个 非 NAT 的公网IP。
现在我们有两个选择:
- 申请动态公网 IPv4 (静态固定的公网 IPv4 需要运营商拉专线到家里,2000¥/月,多用于公司)
- 申请动态或者固定的公网 IPv6(IPv6 的资源非常丰富,申请动态或者固定 理论上都可行)
我的运营商是电信, 在和客服沟通后,他同意给我开通 动态公网 IPv4,没有同意开通 固定的公网 IPv6
我的家里使用的是 华为的 FTTR 路由 (Fiber To The Room,中文叫做 “光纤到房间”)。也就是把光纤接到家里的 每一个房间。
因此有别于传统的 光猫+主路由器+子路由器 Mesh结构,这里使用的是 光猫+主路由器+子光猫/光路由器(AP) FTTR结构
因此只有一个路由器,也只有一个后台,登录IP和账号密码在 主路由器的背面。
如果设计架构为:外部访问 → 光猫 → 路由器 → 服务器, 那么后续还需要在路由器上设置拨号上网和端口转发等,比较麻烦。
因此我直接采取了:外部访问 → 光猫 → 服务器 的结构。
主路由器 华为K153 是一个 “光猫 + 路由器 + WiFi” 三合一设备,官方名称是 “家庭网关”,默认 LAN 口模式 是通过 K153 的内置路由器(自动拨号 + 分配内网 IP)。
因此需要拨打电信服务电话 10000,联系工程师上门把 K153 这个设备中某个 LAN 接口的网络模式,改成“桥接模式(Bridge),并询问宽带的账号和密码。等于直接从光猫 “拉出” 原始宽带信号,让连接到这个口的设备(Ubuntu 服务器)去自己拨号。
然后把 Ubuntu 服务器直接连接该接口,也就是没有经过路由器直接连接光猫,因此需要在 Ubuntu 上手动拨号上网。
(四)拨号上网
我们已经把光猫的某个端口设置为了桥接