利用ssh反向代理访问内网-跳板机

博客介绍了通过将外网服务器搭建为跳板机,实现其他电脑通过外网服务器访问内网服务器或进行ssh远程控制的方法。给出了内网和外网服务器的使用命令,解释了原理,还说明了如何让命令开机自动生效,同时指出ssh反向链接不稳定,autossh可自动重连。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

内网服务器A(192.168.100.100)无法访问外网,现有外网服务器B(1.2.3.4),想通过B来访问A,即通过将外网服务器B搭建为跳板机,使得其他电脑可以通过B来访问A,或者ssh远程控制A

使用命令
# 反向代理(推荐autossh)
ssh -fCNR remote_ip:remote_port:local_ip:local_port remote_user@remote_ip
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口

autossh -M monitor_port -fCNR remote_ip:remote_port:local_ip:local_port remote_user@remote_ip
-M 指定心跳端口,用来发送echo数据,+1的端口来接收

# 正向代理
ssh -fCNL bind_ip:bind_port:local_ip:local_port local_user@local_ip
内网服务器(反向)
# ssh秘钥的密码设置为空的话,就可以实现完全脚本自动启动
# 需要提前将秘钥ssh-copy-id到外网服务器
autossh -M 40230 -fCNR  10022:192.168.100.100:22 kube@1.2.3.4 -i /root/.ssh/100_key
外网服务器(正向)
ssh -fCNL *:2233:127.0.0.1:10022 kube@127.0.0.1
验证
# 在其他机器上通过ssh访问内网服务器A,需要输入内网用户的密码
ssh -p 2233 root@1.2.3.4
原理

外网服务器的ssh命令表示:所有发送到1.2.3.4:2233的流量会转发到1.2.3.4:10022上
内网服务器的ssh命令表示:所有发送到1.2.3.4:10022上的流量转发到内网的22端口上

开机自动生效

将命令加入到/etc/rc.d/rc.local即可

备注

ssh反向链接不稳定,超时会断开连接
autossh断开后,会自动重连

<think>好的,用户之前问过在没有公网IP的情况下使用代理服务器的问题,现在他问的是不在局域网内,想访问局域网内的所有服务。我需要根据之前的回答来扩展,同时考虑用户可能的需求和背景。 首先,用户可能是一个普通用户,没有太多网络知识,所以需要简单明了的解决方案。他们可能想远程访问家里的设备,比如NAS、摄像头或者内部网站,但缺乏公网IP,所以需要内网穿透或者代理的方法。 回顾之前的回答,我提到了代理服务器内网穿透工具、云服务器跳板等方法。现在需要针对访问所有服务的情况,可能需要更全面的解决方案,比如VPN或者更灵活的内网穿透工具。 可能的解决方案包括: 1. VPN(如OpenVPN、WireGuard):用户需要设置VPN服务器,这样连接到VPN后,可以像在局域网内一样访问所有服务。但需要公网服务器或者使用内网穿透工具来暴露VPN服务。 2. 内网穿透工具(如frp、ngrok、ZeroTier):这些工具可以将局域网内的服务映射到公网,或者创建虚拟网络,让远程设备加入。ZeroTier可能更适合,因为它创建虚拟局域网,用户直接加入即可访问所有服务,不需要单独映射每个端口。 3. 云服务器作为跳板:在云服务器上设置反向代理,将所有流量转发到内网,可能需要配置多个端口或使用动态DNS。 4. 使用SSH隧道:通过SSH动态端口转发或端口转发,临时访问内网服务,但可能需要配置多个端口,不够方便。 需要比较这些方案的优缺点,考虑易用性、成本、安全性。用户可能希望简单且免费,所以ZeroTier或Tailscale这样的工具可能更合适,因为它们设置简单,不需要公网IP,且免费层足够个人使用。 另外,用户可能关心安全性,需要提醒使用加密协议,避免暴露服务到公网的风险。同时,合规性方面,某些工具可能在某些地区被限制,需要注意。 最后,总结推荐方案,根据用户的技术能力和需求,给出最合适的建议。比如,技术能力强的用户可以用frp或自建VPN,普通用户推荐ZeroTier或Tailscale。</think>如果你不在局域网内,但想访问局域网内的所有服务(如文件共享、内部网站、NAS、摄像头等),可以通过以下方案实现远程访问。以下是具体方法及工具推荐: --- ### **一、核心思路** 1. **穿透内网边界**:通过代理、VPN 或虚拟网络技术将外部设备与局域网连接。 2. **暴露服务到公网**:将局域网内的服务映射到公网服务器,或直接建立加密隧道访问--- ### **二、具体方案与工具** #### **1. 使用 VPN(推荐长期使用)** 通过 VPN 连接到局域网后,你的设备会像在局域网内部一样访问所有服务。 - **适用场景**:需要稳定、完整访问所有内网服务。 - **工具推荐**: - **WireGuard**:轻量、高性能,适合家庭网络。 - **OpenVPN**:兼容性强,支持复杂网络环境。 - **Tailscale**(基于 WireGuard):无需公网 IP,自动组网,简单易用。 **步骤(以 Tailscale 为例)**: 1. **在内网设备安装 Tailscale**: ```bash # 在局域网内的设备(如 NAS、PC)执行 curl -fsSL https://tailscale.com/install.sh | sh tailscale up ``` 2. **在远程设备安装 Tailscale**: - 下载客户端(支持 Windows/macOS/iOS/Android)并登录同一账号。 3. **直接访问内网服务**: - 远程设备通过 Tailscale 分配的虚拟 IP(如 `100.x.x.x`)访问内网服务(如 `http://100.x.x.x:8080`)。 **优点**: - 无需公网 IP,自动穿透 NAT。 - 加密通信,安全性高。 - 支持多设备跨平台。 --- #### **2. 内网穿透工具(推荐临时使用)** 将内网服务映射到公网,通过公网地址访问- **适用场景**:临时访问、无需长期连接。 - **工具推荐**: - **frp**:开源,支持 TCP/UDP,需自备云服务器- **Ngrok**:免费版支持 HTTP/TCP,适合简单场景。 - **Cloudflare Tunnel**:免费,无需公网 IP,支持 HTTPS。 **步骤(以 Cloudflare Tunnel 为例)**: 1. **在内网设备安装 `cloudflared`**: ```bash # Linux 安装 wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 chmod +x cloudflared-linux-amd64 ``` 2. **创建隧道并映射服务**: ```bash ./cloudflared-linux-amd64 tunnel create my-tunnel # 将内网的 192.168.1.100:80 映射到公网域名 ./cloudflared-linux-amd64 tunnel route dns my-tunnel my-service.your-domain.com ./cloudflared-linux-amd64 tunnel run my-tunnel ``` 3. **通过域名访问**: - 访问 `https://my-service.your-domain.com` 即可穿透到内网服务。 **优点**: - 免费,无需公网 IP。 - 自动配置 HTTPS 证书。 --- #### **3. 虚拟局域网工具(推荐轻量级)** 通过虚拟网络将远程设备加入“局域网”。 - **工具推荐**: - **ZeroTier**:创建虚拟局域网,支持全平台。 - **Hamachi**:商业工具,界面友好。 **步骤(以 ZeroTier 为例)**: 1. **注册 ZeroTier 账号**,创建一个虚拟网络(Network ID)。 2. **在内网设备安装 ZeroTier**: ```bash # Linux curl -s https://install.zerotier.com | sudo bash zerotier-cli join <Network-ID> ``` 3. **在远程设备安装 ZeroTier**,加入同一 Network ID。 4. **在 ZeroTier 控制台授权设备**,分配虚拟 IP。 5. **直接通过虚拟 IP 访问内网服务**(如 `192.168.192.x`)。 **优点**: - 无需配置端口转发。 - 支持跨运营商和复杂网络环境。 --- #### **4. SSH 隧道(适合技术用户)** 通过 SSH 动态转发或端口转发访问内网- **适用场景**:临时访问少量服务。 - **示例命令**: ```bash # 动态端口转发(SOCKS5 代理ssh -D 1080 user@公网跳板IP # 端口转发(将内网 192.168.1.100:80 映射到本地 8080 端口) ssh -L 8080:192.168.1.100:80 user@公网跳板IP ``` - **使用**: - 浏览器设置 SOCKS5 代理 `127.0.0.1:1080` 访问所有内网服务。 - 直接访问 `http://localhost:8080` 访问内网网站。 --- ### **三、方案对比** | 方案 | 适合场景 | 优点 | 缺点 | |---------------------|--------------------------|-------------------------------|-------------------------------| | **VPN (Tailscale)** | 长期、多设备访问 | 全流量加密,无需配置 | 依赖第三方工具(如 Tailscale)| | **Cloudflare Tunnel**| 暴露 Web 服务到公网 | 免费,自动 HTTPS | 仅支持 HTTP/TCP | | **ZeroTier** | 虚拟局域网内全服务访问 | 无需公网 IP,跨平台 | 需客户端安装 | | **SSH 隧道** | 临时、技术用户 | 无需额外工具,灵活 | 仅支持 TCP,配置复杂 | --- ### **四、注意事项** 1. **安全性**: - 避免直接暴露内网服务到公网(如用 Cloudflare Tunnel 替代直接端口映射)。 - 使用 VPN 或 TLS 加密(如 HTTPS)保护通信。 2. **性能**: - 跨国流量可能延迟较高(优先选择靠近你的服务器或 CDN)。 3. **合规性**: - 部分工具可能被网络防火墙拦截(如 ZeroTier 需开放 UDP 9993 端口)。 --- ### **五、最终建议** - **小白用户**:直接使用 **Tailscale** 或 **ZeroTier**,5 分钟完成配置。 - **Web 服务暴露**:选择 **Cloudflare Tunnel**,免费且安全。 - **技术极客**:自建 **WireGuard VPN** 或通过 **SSH 隧道** 精细控制。 根据你的需求选择方案,即可实现从外网无缝访问内网所有服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cnzf1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值