// VMIP · 公网 IP 配置 ▍
绑定公网 IP 后的实例内配置
公网 IP 绑定到实例后,还需要在实例内部完成网络配置才能真正可达。不同镜像的处理方式完全不同, 先在 01 节对号入座,再按对应章节操作。
先确认你属于哪种情况
面板 cloud 镜像 全自动
内置 incus-agent,绑定 IP 后自动完成实例内配置,无需任何手动操作,配置弹窗都不会出现。
自装 Linux 一条命令
一条命令即时生效(不需要网关),再按需做持久化。见 02 节。
自装 Windows 本页重点
必须在网卡中手动静态配置,且是唯一需要填写网关的场景。见 03 节。
自装 Linux:一条命令
把命令中的网卡名换成实例内实际网卡(一般是 eth0 或 enp5s0):
为什么 Linux 不需要网关 :Linux 默认弱主机模型,源地址为公网 IP 的应答包允许借道 NAT 网卡出站——这点与 Windows 完全不同(见 03 节)。执行后即可通,无需配置网关。
# 重启不失效(持久化,按需)
上面的命令重启后会丢。以 Ubuntu/Debian(netplan)为例,在 /etc/netplan/ 对应配置文件的网卡下追加地址:
eth0:
addresses:
- <公网IP>/32
保存后执行 netplan apply。 其他发行版同理:地址写 IP/32、不配网关。
自装 Windows:网卡静态配置
Windows 是唯一需要在网卡里填网关的场景。打开网卡属性前,先记住这三个固定值:
| 配置项 | 填写值 | 说明 |
|---|---|---|
| IP 地址 | 控制台绑定的公网 IP | 即绑定公网 IP 弹窗中显示的地址 |
| 子网掩码 | 255.255.255.255 | 固定值,不要改动 |
| 默认网关 | 169.254.0.1 | 固定值,由宿主 Incus 提供,必须填写 |
| DNS | 按需填写 | 可留空;需要在实例内解析域名时填公共 DNS(如 223.5.5.5) |



网关必须填 169.254.0.1,「网关留空」在 Windows 上是错的 :Windows 默认强主机模型,源地址为公网 IP 的应答包不允许从不持有该 IP 的 NAT 网卡出站。实测留空网关时,外部 SYN 能到达实例、但应答包永远出不去——表现为连接超时。 这与 Linux 的「不需要网关」语义相反,网上按 Linux 思路写的教程不要照搬。
两种「偷懒方案」实测都不可行 :①「自动获取 IP」——实例网络内没有 DHCP,Windows 会落到 APIPA 自分配地址,必定不通;②删掉网关改用 route add 高度量默认路由——实测同样全断。请老老实实按上表静态配置。
Windows 防火墙放行服务端口
配好 IP 后如果仍连不上,先查防火墙:绑定网络在 Windows 里会显示为 「未识别的网络」,归入公用配置文件,入站默认全部拒绝。
为你的服务端口添加放行规则(管理员权限运行,替换端口与规则名):
两个预期行为,不要当成故障 :①「未识别的网络」标签会一直存在,属正常现象;②ICMP 默认同样不通——ping 不通不代表服务不可用,排障时不要拿 ping 当唯一判据(部分运营商网络本身还会丢 ICMP)。
排障速查
「连接被拒绝」和「连接超时」是两种完全不同的信号,先分清再动手:
| 现象 | 含义 | 下一步 |
|---|---|---|
| 连接被拒绝 | SYN 已到达实例、协议栈回了 RST —— 入站链路是通的,只是实例内没有服务监听在该地址/端口 | 检查实例内服务是否启动、是否监听 0.0.0.0 或绑定 IP |
| 连接超时 | 链路根本没通(入站或应答被丢弃) | 检查实例内 IP 配置与防火墙放行,再按 05 节定位 |
# 宿主直连测试(绕开外网)
在宿主机上直接访问绑定 IP,验证实例内段是否正常:
通了但外网不通 → 问题在外部路径;宿主直连也不通 → 回到 03/04 节检查实例内配置与防火墙。
# 其他两个易踩的坑
- 缓存假象 :浏览器缓存 / 运营商缓存会让页面"看起来还能访问",排障时一律用 curl 验证,或对浏览器强制刷新。
- 进阶定位 :宿主上对外网口(eno1)、实例 tap 网卡、incusbr0 三点分别 tcpdump 抓包,看请求在哪一跳消失,即可锁定断点位置。
