CGNAT及多层NAT下的Linux节点如何配置支持公网Windows服务器SSH访问
实现方案:SSH远程端口转发访问CGNAT后Linux节点
前置准备
- 公网Windows服务器开启SSH服务:Windows 10 1809+/Server 2019+可直接在「设置-应用-可选功能」中安装OpenSSH服务器,低版本可手动安装OpenSSH for Windows
- 所有Linux节点预装OpenSSH客户端,主流发行版默认已自带
- 公网Windows服务器防火墙放行后续要用到的转发端口段(例如10000-10100)的入站规则
核心原理
每个处于CGNAT后的Linux节点主动向公网Windows服务器发起SSH远程端口转发,将自身本地22端口(SSH默认服务端口)绑定到公网Windows服务器的指定本地端口上,后续在Windows服务器上访问对应绑定的本地端口,即可连通对应Linux节点的SSH服务。
操作步骤
1. Linux节点临时转发配置(仅当前会话生效,断开后失效)
在Linux节点执行以下命令,替换对应占位符即可:ssh -fN -R <Windows侧绑定端口>:localhost:22 <Windows服务器用户名>@<Windows公网IP>
参数说明:
-f:SSH连接成功后转入后台运行-N:不执行远程命令,仅做端口转发-R:启用远程端口转发规则<Windows侧绑定端口>:每个节点分配唯一的1024以上未被占用端口,例如节点1用10001、节点2用10002<Windows服务器用户名>:Windows服务器的SSH登录账号<Windows公网IP>:公网Windows服务器的公网地址
执行后按提示输入Windows服务器的SSH登录密码即可完成转发配置。
2. 公网Windows服务器发起SSH连接
配置完成后,在Windows服务器上执行以下命令即可访问对应Linux节点:ssh <Linux节点用户名>@localhost -p <该节点绑定的Windows侧端口>
例如节点1绑定了10001端口,Linux节点用户名是root,执行命令为ssh root@localhost -p 10001
3. Linux节点持久化配置(开机自启、断线自动重连)
临时配置在网络波动、节点重启后会失效,可通过systemd配置服务实现持久化:
- 先配置Linux节点SSH密钥免密登录公网Windows服务器,避免每次连接需要输入密码:
执行ssh-keygen一路回车生成密钥对,再执行ssh-copy-id <Windows服务器用户名>@<Windows公网IP>,输入Windows SSH密码完成密钥上传。 - 新建systemd服务文件:
sudo nano /etc/systemd/system/ssh-forward.service
写入以下内容,替换对应占位符:
[Unit] Description=SSH Remote Port Forward to Public Windows Server After=network.target [Service] User=<Linux节点本地用户名> ExecStart=/usr/bin/ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o ExitOnForwardFailure=yes -fN -R <Windows侧绑定端口>:localhost:22 <Windows服务器用户名>@<Windows公网IP> Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
- 启动服务并设置开机自启:
sudo systemctl daemon-reload sudo systemctl start ssh-forward.service sudo systemctl enable ssh-forward.service
注意事项
- 每个Linux节点需绑定不同的Windows侧端口,避免端口冲突导致转发失败
- 若需要其他公网设备无需登录Windows服务器即可直接访问Linux节点,可修改Windows侧
C:\ProgramData\ssh\sshd_config文件,将GatewayPorts参数改为yes后重启Windows的sshd服务,后续直接通过Windows公网IP+绑定端口即可访问对应节点。安全提示:开启该配置后转发端口会暴露在公网,建议配置Windows防火墙仅放行可信IP访问这些端口,避免被暴力破解 - 若转发频繁断线,可调整systemd服务配置中的
ServerAliveInterval(心跳发送间隔,单位秒)和RestartSec(断线后重连等待时间,单位秒)参数,适配网络环境。
内容的提问来源于stack exchange,提问作者ivbsd1
相关产品推荐
相关产品推荐

