场景指南

使用 Noeio 访问内网服务(子网路由)

内网里跑着一些只监听内网地址的服务——nginx 网关、数据库、管理后台之类。用子网路由让内网里的一台 Linux 节点把整个网段通告进 Mesh,远端节点就能用内网 IP 直接访问这个网段里的任意一台机器,被访问的机器上都不需要装 noeio。

下面假设两台机器已经在同一个虚拟网络里并能互相 ping 通。还没组网的话,先按跨云组网走一遍:部署 derper、生成 token、启动 daemon、分配虚拟 IP。

拓扑示意:图中左侧两台都是普通的 Noeio 节点,区别只在配置带来的角色。一台在远端,开启 accept_routes 作消费端;另一台在内网,是 Linux,作通告端。两者经 overlay 隧道相连,后者通告 192.168.10.0/24,把流量转发并 SNAT 进内网。该网段内的主机彼此同级、都可被远端直接访问,图中以 192.168.10.2 上的 nginx 网关和 192.168.10.11、192.168.10.12 上的其他主机为例,它们都不需要安装 noeio。
  1. 1

    在内网的 Linux 节点上通告网段

    挑一台能访问到目标服务的内网机器当子网路由器,把它所在的网段通告出去。daemon 正在运行时直接用 noeio route advertise 即可生效,不需要重启;命令与参数见管理子网路由。

    noeio route advertise 192.168.10.0/24
    或者在启动时一并指定
    noeio boot --advertise-routes 192.168.10.0/24

    通告端仅 Linux 可用,macOS / Windows 上会返回 FAILED_PRECONDITION,网段不会进入广播。auto_nat 默认开启,daemon 会自己开 ip_forward 并在独立的 noeio 表里配好 SNAT;ip_forward 是主机全局的,想自己管就把它设为 false,见配置文件。

  2. 2

    在远端节点上接受这个网段

    消费端要显式打开 accept_routes 才会安装别人通告的路由,三个平台都支持。这一项没有运行时命令,改完要重启 daemon。

    noeio boot --accept-routes
    或者写进配置文件
    [router]
    accept_routes = true
  3. 3

    确认路由装上了

    输出里会列出学到的网段、它来自哪个节点、当前走直连还是中继,以及状态。active 表示已安装并在用;rejected 会给出原因,最常见的是与本机物理网卡的网段重叠——本地局域网优先,其余冲突规则见子网路由。

    noeio route list
  4. 4

    用内网 IP 访问服务

    此时远端节点访问这个网段的流量会经子网路由器转发,直接请求目标主机的内网地址即可,端口不受限制。下面以网段里的一个 nginx 网关为例。

    curl -I http://192.168.10.2

    流量在子网路由器上做了 SNAT,所以服务端看到的来源是子网路由器的内网地址,不是远端节点的虚拟 IP。请求不通时先在子网路由器上发同一条请求,用来区分是服务本身 / 内网防火墙的问题,还是路由没生效。

  5. 5

    按域名访问(可选)

    nginx 靠 server_name 分流时,只用 IP 请求会落到 default server 上。临时验证加一个 Host 头就够;长期用把域名指到这个内网 IP,写进远端节点的 hosts 或内网 DNS。

    临时验证:带 Host 头
    curl -I -H 'Host: intranet.example.com' http://192.168.10.2
    长期使用:写进远端节点的 hosts
    192.168.10.2  intranet.example.com

几点限制

  • 目前只打通 overlay → 内网这一个方向:内网主机不能主动连远端节点的虚拟 IP,回包靠 conntrack 返回。
  • 有些网段不能通告:前缀短于 /8(含 0.0.0.0/0,出口节点暂不支持)、包含本节点 overlay 地址的网段、包含 derper 或 STUN 地址的网段,以及 127.0.0.0/8 与 169.254.0.0/16。
  • 多台机器通告同一网段是主备而非负载均衡:peer_id 最小的为 active,它消失后由下一个接替。
  • IPv6 子网、以及 macOS 作为通告端,都还不支持。

想了解通告与撤销的具体机制、NAT 规则和信任模型?