// VMIP · 公网 IP 配置 ▍

绑定公网 IP 后的实例内配置

公网 IP 绑定到实例后,还需要在实例内部完成网络配置才能真正可达。不同镜像的处理方式完全不同, 先在 01 节对号入座,再按对应章节操作。

01

先确认你属于哪种情况

面板 cloud 镜像 全自动

内置 incus-agent,绑定 IP 后自动完成实例内配置,无需任何手动操作,配置弹窗都不会出现。

自装 Linux 一条命令

一条命令即时生效(不需要网关),再按需做持久化。见 02 节。

自装 Windows 本页重点

必须在网卡中手动静态配置,且是唯一需要填写网关的场景。见 03 节。

02

自装 Linux:一条命令

把命令中的网卡名换成实例内实际网卡(一般是 eth0 或 enp5s0):

ip addr add <公网IP>/32 dev eth0 && ip link set eth0 up

为什么 Linux 不需要网关 :Linux 默认弱主机模型,源地址为公网 IP 的应答包允许借道 NAT 网卡出站——这点与 Windows 完全不同(见 03 节)。执行后即可通,无需配置网关。

# 重启不失效(持久化,按需)

上面的命令重启后会丢。以 Ubuntu/Debian(netplan)为例,在 /etc/netplan/ 对应配置文件的网卡下追加地址:

ethernets:
  eth0:
    addresses:
      - <公网IP>/32

保存后执行 netplan apply。 其他发行版同理:地址写 IP/32、不配网关。

03

自装 Windows:网卡静态配置

Windows 是唯一需要在网卡里填网关的场景。打开网卡属性前,先记住这三个固定值:

配置项填写值说明
IP 地址控制台绑定的公网 IP即绑定公网 IP 弹窗中显示的地址
子网掩码255.255.255.255固定值,不要改动
默认网关169.254.0.1固定值,由宿主 Incus 提供,必须填写
DNS按需填写可留空;需要在实例内解析域名时填公共 DNS(如 223.5.5.5)
打开网络适配器属性
图 1Win+R 运行 ncpa.cpl 打开网络连接,右键以太网卡 → 属性
进入 IPv4 属性
图 2双击「Internet 协议版本 4 (TCP/IPv4)」
按参数表填写静态 IP
图 3选择「使用下面的 IP 地址」,按上表填写后确定

网关必须填 169.254.0.1,「网关留空」在 Windows 上是错的 :Windows 默认强主机模型,源地址为公网 IP 的应答包不允许从不持有该 IP 的 NAT 网卡出站。实测留空网关时,外部 SYN 能到达实例、但应答包永远出不去——表现为连接超时。 这与 Linux 的「不需要网关」语义相反,网上按 Linux 思路写的教程不要照搬。

两种「偷懒方案」实测都不可行 :①「自动获取 IP」——实例网络内没有 DHCP,Windows 会落到 APIPA 自分配地址,必定不通;②删掉网关改用 route add 高度量默认路由——实测同样全断。请老老实实按上表静态配置。

04

Windows 防火墙放行服务端口

配好 IP 后如果仍连不上,先查防火墙:绑定网络在 Windows 里会显示为 「未识别的网络」,归入公用配置文件,入站默认全部拒绝。

为你的服务端口添加放行规则(管理员权限运行,替换端口与规则名):

netsh advfirewall firewall add rule name="web-80" dir=in action=allow protocol=TCP localport=80

两个预期行为,不要当成故障 :①「未识别的网络」标签会一直存在,属正常现象;②ICMP 默认同样不通——ping 不通不代表服务不可用,排障时不要拿 ping 当唯一判据(部分运营商网络本身还会丢 ICMP)。

05

排障速查

「连接被拒绝」和「连接超时」是两种完全不同的信号,先分清再动手:

现象含义下一步
连接被拒绝SYN 已到达实例、协议栈回了 RST —— 入站链路是通的,只是实例内没有服务监听在该地址/端口检查实例内服务是否启动、是否监听 0.0.0.0 或绑定 IP
连接超时链路根本没通(入站或应答被丢弃)检查实例内 IP 配置与防火墙放行,再按 05 节定位

# 宿主直连测试(绕开外网)

在宿主机上直接访问绑定 IP,验证实例内段是否正常:

curl -v http://<绑定IP>:<端口>

通了但外网不通 → 问题在外部路径;宿主直连也不通 → 回到 03/04 节检查实例内配置与防火墙。

# 其他两个易踩的坑

  • 缓存假象 :浏览器缓存 / 运营商缓存会让页面"看起来还能访问",排障时一律用 curl 验证,或对浏览器强制刷新。
  • 进阶定位 :宿主上对外网口(eno1)、实例 tap 网卡、incusbr0 三点分别 tcpdump 抓包,看请求在哪一跳消失,即可锁定断点位置。