通过ssh实现内网透传

有人问:

申请了一个域名,想通过该域名访问到个人电脑,把个人电脑作为一个服务器,但个人电脑没有公网ip,应该怎么做?想利用DNS技术,但被网上教程整晕了。

答:

相对来说简单的办法,我也在用如下:

  1. 因为域名一定要解析到一个外网ip,所以我是购买了一台阿里云的轻量化应用服务器,赶着新用户优惠期买的一年99块钱(现在多少钱不知道)
  2. 域名需要进行ICP备案,否则无法解析到aliyun的外网ip,这个在阿里云右上角就有一个申请备案的菜单,根据提示输入信息,因为审核有一定要求可能会驳回,只要根据驳回内容进行修正就可以,我是驳回了一次再提交后成功了。
  3. 进行域名解析配置,解析到申请的云服务器外网ip
  4. 在作为服务器的个人电脑上使用ssh进行透传,最好是Windows10,11或者Server版本较新支持ssh指令的操作系统,也可以是Linux系统。
    以对外开放443端口为例的透传指令:ssh -R 0.0.0.0:443:127.0.0.1:443 -p22 -Nf root@[云服务器的外网ip]
  5. (可选)如果需要使用https协议还要申请证书,可以是Let's Encrypt的免费证书。并配置到Nginx或Web服务器中。

完成以上操作后即可以通过域名访问,实际请求流程是,请求到达云服务器,然后通过ssh通道转发到个人电脑。
简单一句话, 透传指令: ssh -R 0.0.0.0:443:127.0.0.1:443 -p22 -Nf root@[云服务器的外网ip]

  • 其中 -R 代表开启反向隧道
  • 0.0.0.0 代表本地监听的ip地址,一般有多块网卡的时候会有多个ip,0.0.0.0即代表监听所有网络
  • 第一个443 代表远端监听的端口
  • 127.0.0.1代表请求转发的目的ip,127.0.0.1代表本机
  • 第二个443代表请求转发到目的ip的哪个端口
  • -p 22 代表ssh到远端服务器使用的端口,即远端服务器ssh服务的监听端口
  • -Nf  -N代表建立连接口不执行任何操作和命令,只是建立隧道连接, f代表在后台以daemon进程运行
  • root@[云服务器的外网ip] 即外网服务器的用户名和ip地址

注:使用ssh建立的隧道可能会因网络问题意外断开,需要手动重连。这时候可以安装一个autossh,实现自动重连:

Ubuntu安装:apt-get install autossh

Cetnos安装:如没有没有安装epel-release仓库,需要先安装 apt-get install autossh, 然后安装autossh,yum install autossh。

使用autossh 替换ssh命令:autossh -M 0 -L 443:127.0.0.1:332 root@[ssh_server] -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3"

-o "ServerAliveInterval 30“ 代表每30秒向服务器发送信息确保连接没有断开

-o "ServerAliveCountMax 3" 端开后重连重试次数 3次

Windows: 建议安装一个WSL2的Ubuntu分发,在Ubuntu上执行实现透传

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值