Featured image of post 今天最难的不是配服务器,是连不上——剥了一整天洋葱

今天最难的不是配服务器,是连不上——剥了一整天洋葱

开两台 AWS Lightsail 小机器装 Nezha 探针,SSH 全死在 kex_exchange_identification:nc 能读 banner、ssh 却被 DPI 掐,Clash DIRECT 也死。最后靠 ProxyCommand 把 SSH 整条塞进 SOCKS5 隧道才连上。一篇关于'它不工作'其实是七层沉默失败叠在一起的个人随想——含真实 IP、报错、配置与踩坑。

Connection closed by 18.183.98.38 port 22——今天我盯着这行看了很久。

本来该很简单。开两台 AWS Lightsail 的小机器,东京一台(18.183.98.38)、首尔一台(43.201.19.231),都是 2 核 2G、60G 盘、Ubuntu 24.04,装个 Nezha 把自己这点家底监控起来。密钥放好,pem 改 600,~/.ssh/config 写两个别名 tokyoseoul。一小时的事。

然后 ssh tokyo 卡住。

它"差一点连得上"

最折磨人的不是连不上,是它差一点连得上。用 nc 去敲 22 端口,server banner 乖乖吐回来——机器活着,端口开着,SSH 进程在跑。可一换 ssh 正经握手,连接死在 kex_exchange_identification 这一步,还间歇性,时通时不通。

这不是断网。断网是干脆利落的全黑。这是被什么东西"看了一眼,然后选择性地掐掉"。

是 DPI

ssh -vv tokyo 把握手包一帧一帧打出来,nc 又能读到 banner——两边一对照,答案就清楚了:DPI,深度包检测。从国内直连海外 22 端口的 SSH 握手,链路上有设备在识别它、干扰它。nc 那点流量太短、太像普通 TCP,没触发规则;ssh 的密钥交换握手特征太明显,被盯上了。

第一个本能撞墙

本能是挂代理。然后撞上第二个坑:把 Clash 对这两个 IP 切成 DIRECT——还是死在同一个 kex_exchange_identification

后来才分清这是两码事:一个是 ISP 链路上 DPI 掐,一个是 Clash 的 TUN 把改写成 DIRECT 的 raw-IP 握手又拦了一道。两个坑报错一模一样,根不一样,治法相反。今天大概有一半时间,就耗在"把两个长得一样的坑认成同一个"上。

把 SSH 塞进隧道

真正管用的是把 SSH 整条塞进 Clash 的 SOCKS5 隧道,用 ProxyCommand:

1
2
3
4
5
Host tokyo
    HostName 18.183.98.38
    User ubuntu
    IdentityFile ~/.ssh/AWS1.pem
    ProxyCommand nc -X 5 -x 127.0.0.1:7890 %h %p

意思:ssh 不自己去连远端 22,而是先钻进本地 7890 的 SOCKS5 出口,由代理替我把握手包送到东京。ssh tokyo 第一次秒连上的那一刻,我长出一口气。seoul 同理,照抄一行。

SSH 被 DPI 掉直连,绕 SOCKS5 隧道——今天这条链路的拓扑

连上之后,体力活也不干净

  • ~/.ssh 下同时躺着 AWS1.pemaws1.pem 两个文件——Linux 大小写敏感,这俩是俩东西,指错一个就 Permission denied。今天光在"到底用的是哪一个"上绕了几圈。
  • Nezha 要 v0.20.13,不是 v2。我要的是那个玻璃拟态面板,只有 v0 适配,v2 装出来是另一副脸。
  • 东京当 Dashboard+Agent,首尔纯 Agent,Web 绑 127.0.0.1:8008、gRPC 开 0.0.0.0:5555。面板不直接对外,再套一层 cloudflared 隧道才摸得到。
  • 顺手把旧的东京实例(18.180.158.164 + lynxflow-aws.pem)退役——光这旧机器的 ssh 就重试了 4 次。

没圆上的那个想法

本来想把 Lightsail 防火墙的 22 端口只放行代理出口 IP。结果探测了一下出口,是 34.21.239.135(Google 新加坡),可前几个小时记下来的还是 136.18.20.85

**节点会轮换,出口 IP 漂。**把防火墙白名单钉死在一个会变的 IP 上,等于没钉。这个坑今天先记下,回头得换思路。

为什么这么累

回头想今天为什么这么累。不是命令多——敲完也就半小时的量。累在每一层都有一个"沉默失败"的口子:AWS 控制台、安全组、pem 权限、DPI、Clash 的 TUN/DIRECT/SOCKS5 三种模式、Nezha 的版本分叉、cloudflared 隧道、出口 IP 漂移……任何一层不对,表现都是同一句话:“连不上”。

你不知道是哪一层在骗你,只能一层一层剥,而每剥一层都得换一套工具、换一套脑子(nc 敲端口、读 banner、抓 -vv 握手包、查 TUN 日志、探出口 IP)。

“它不工作"从来不是一个故障。是一颗七层洋葱,你蒙着眼剥。

现在

东京和首尔两个小点在 Nezha 面板上亮成绿色,心跳在跳,流量在画。两台 2 核 2G 的小机器,隔着一条被 DPI 盯着的链路,经一个会漂移的 SOCKS5 出口,套一层 cloudflared 隧道,连在一起,稳了。

难是真难。值。