公网端口
公网端口是机器自己地址上的一个号码,连过去就直接进到某一个容器里。 别人输入 203.0.113.10:31000,连接就落到你容器里的 3000 端口上 —— 没有域名,没有证书,中间也没有网页服务器。所以它是游戏服务器、数据库、VPN、 代理,以及任何「不是网站」的东西的答案。
它也是容器页面上唯一一件拿着容器的人自己做不了的事。这不是漏掉了, 第 2 节讲为什么。
如果你的服务本来就是网站,那你要的是域名:见快速上手第 6 步。 一个域名不花机器什么,一个端口要花掉一个号码。
1. 两种进来的方式,各自的代价
一台机器上一千个域名,和一个域名花的一样多:它们都从同样那两个端口进来, 机器按请求里的名字分派。号码不是这样的。31000 就是一个,只能给一个容器, 两个租户都想要它,就是一件得有人来定的事。
这个区别决定了下面的一切,也包括「按钮在谁手里」。
2. 谁来开
| 机器的主人 | 在自己机器上的任何容器上开、改、关公网端口 |
| 你,拿着容器的人 | 看到每一条映射,测试有没有东西应答,以及去要一个 |
域名是你自己加的,不用谁批准。端口不是你自己加的, 因为端口是别人机器上的一个号码,而每个号码只有一个。 去找你的房东要;在他们那一侧就是一个按钮。
这件事对你没有任何隐瞒。卡片上列着这个容器的每一条映射,无论是生效中还是待重启; 容器的历史里也记着每一次开和关,什么时候,以及是谁做的。
3. 如果容器在你手里
端口卡片在容器页面上,域名卡片下面。它分成两段,两段的意思不一样:
- 来自互联网 —— 谁都能连到。左边的地址是你发给别人的,右边的
:3000是容器里必须有东西在听的那个端口。 - 仅本机可达 —— 你的域名就是从这里进来的。它们只在机器上可达,别处都不行, 这正是对的:机器上的网页服务器从公网收下请求,再从这里递进去。 除非某个域名不工作,否则你不用管这一段。
测试会从机器上拨一次这个号码,告诉你有没有东西应答。 两种答案指向的是不同的人,值得分清楚:
| 它说什么 | 意思是 |
|---|---|
| 生效中,并且测试说有应答 | 正常。公网上的人拿到的就是你在提供的东西。 |
| 无响应 | 机器确实占着这个号码,但你容器里没有东西在那个端口上应答。这一侧是你的:服务没跑起来,或者它只监听了 127.0.0.1。 |
| 待重启 | 映射已经记下了,但还没生效。容器的网络下次重启时它才开始工作。 |
| 没有测试按钮 | 这是一条 UDP 映射。UDP 没有握手,也就没有什么可以诚实地报告。 |
无响应是最常见的那一种,通常改一行配置就好: 容器里只绑 127.0.0.1 的服务,从容器外面是够不着的。改成 0.0.0.0 再试。
要去要一个的时候,告诉房东你的服务在容器里监听哪个端口 —— 7777、51820,随便它是多少 —— 以及它是 TCP 还是 UDP。 别的他们不需要知道,外面那个号码由他们挑。
4. 如果机器是你在跑
在容器页面上,端口 → 开一个端口:
- 容器端口是租户的服务在里面监听的那个。这个由他们告诉你。
- 公网端口留空,机器就从自己的池子里挑一个空号(没改过的话是
30000–32767)。当外面已经有东西认死了某个号码时才填 —— 租户已经发出去的客户端配置、一条 DNS SRV 记录、一个监控探针。 - 协议 —— 除非服务是 UDP,否则填 TCP。WireGuard、DNS 和大多数游戏服务器是 UDP。
输入框下面那一行,在任何东西被发出去之前就把整条映射预览出来; 有两种写错法在那里就被拦下,不会跑到机器上去:小于 1024 的号码, 以及落在机器私有池(20000–29999)里的号码 —— 那是容器侧映射分配用的段, 放一个公网号码进去,迟早会撞上。
在这里开端口,并不会去开你云厂商的防火墙。 机器把号码绑上了, 挡在它前面的安全组还是得放行。把整个池子一次性放开 —— 30000–32767,TCP 和 UDP —— 以后卖多少容器都不用再想这件事。 不放开的话,面板上一切看起来都对,卡片写着「生效中」,而外面什么都连不上。
一段连续端口是一行,而不是四十行。容器端口填 3000-3009, 机器一次映射十个号码,31000→3000 一直到 31009→3009。 两边永远一样长、偏移固定 —— 机器能表达的就是这个形状,所以卡片在你打字时就按这个来。 一段默认最多 64 个端口。
开和关都会重启这个容器的网络。 用时远不到一秒, 但在那一下里,走它其他端口的连接会断 —— 包括租户的 SSH 会话。 卡片会写出这是谁,好让你知道断的是谁的连接。不急的话就勾上等下次重启再生效: 映射记下来,什么都不打断,容器下次重启时它开始生效。
关是行上齿轮后面的按钮。号码会还回池子里,所以同一条映射再开一次, 不一定还是原来那个号码。容器里面什么都不变。 下面那一段里的映射 —— 域名从那里进来的那些 —— 只要还有域名需要它就关不掉, 拒绝的时候会说出是哪个域名。
5. 公网端口不是什么
- 不是给 HTTP 用的。 域名能在标准端口上够到同一个服务,不占机器的号码, 还带证书。如果访客必须被告知一个端口号才能打开你的站点,那就是哪里做错了。
- 不是防火墙。 公网上谁都能连到这个号码,hqnode 不做过滤。 里面是什么在应答,他们拿到的就是什么 —— 认证要做在服务里。
- 不是一个固定地址。 关掉一条映射,号码就回到池子里。 如果外面有东西认死了某个号码,要的时候就说清楚,让它按号开而不是随机挑。
有一件事是域名给不了的:连接是带着客户端自己的地址过来的。 走网页服务器时,除非服务懂 PROXY 协议,否则容器看到的整个互联网都是同一个地址; 走公网端口,它看到的是真实地址,任何协议都一样,什么都不用配。
6. 出问题的时候
| 你看到的 | 通常是什么 |
|---|---|
| 状态写着无响应 | 容器里那个端口上没有东西在听,或者它绑的是 127.0.0.1 而不是 0.0.0.0。 |
| 测试说有应答,但你连不上 | 机器所在云厂商的防火墙没放行这个号码。这要机器主人在安全组里开,不是在面板里开。 |
| 行上一直写着待重启 | 它在等容器的网络重启。重启容器,或者请主人不勾延后再开一次。 |
| 号码被拒绝,说已被占用 | 机器上已经有别的东西拿着它。让机器自己挑,或者换一个号码要。 |
| 号码被拒绝,说在私有段里 | 它落在机器内部映射用的池子里。20000–29999 之外、1024 以上的号码都行。 |
| 一条 UDP 映射,没法检查 | 没有可跑的检查 —— UDP 没有握手。用真正要用它的那个客户端从外面试。 |
| 一切看着都对,但完全没有反应 | 看看容器在不在跑、机器在不在线:面板在同一页上都会说。 |
接下来
- 使用你的容器 —— 其余归你改的东西。
- 快速上手 —— 域名、DNS 和 HTTPS,按顺序走一遍。
- 跑一个代理或 VPN —— 哪种形状需要端口,哪种靠一个名字就能进来。
- 自己跑一台机器 —— 这一页的另一面。