记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

无需任何软件内网穿透隧道工具:localhost.run

无需任何软件内网穿透隧道工具:localhost.run

ngrok之类的内网穿透软件需要下载配置软件,这里有一个既不用下载软件,又不需要注册账号的免费内网穿透工具:localhost.run。
工具官网:http://localhost.run/
根据官网描述,只需要一行命令,就可以跑起来了:
XML/HTML代码
  1. ssh -R 80:localhost:8080 nokey@localhost.run
XML/HTML代码
  1. -R命令表示反向端口转发
  2. 80是被指定的转发端口
  3. localhost是你局域网ip地址(对应127.0.0.1)
  4. 8080是你的局域网端口号
  5. nokey@localhost.run是一台处在公网的服务器
例如:需要外网访问局域网服务器 192.168.0.100:9000
XML/HTML代码
  1. ssh -R 80:192.168.0.100:9000 nokey@localhost.run
虽然可以直接用,但这种方式,给的免费域名只能使用几个小时。要想永久不变域名,需要添加以下SSH Key:
1、现在电脑上生成ssh key:
XML/HTML代码
  1. ssh-keygen
然后把public key放入到这个添加页面:​ ​https://admin.localhost.run/​​
XML/HTML代码
  1. cat ~/.ssh/id_rsa.pub
再去运行命令行:
XML/HTML代码
  1. ssh -R 80:localhost:80 nokey@localhost.run
这里会给你一个随机的域名,可以用浏览器直接访问,因为服务器在境外,速度可能慢一些。
注意:仅支持http方式访问,仅支持80端口的随机域名。
tunnelmole:https://tunnelmole.com/     (功能用法类似,只能转发本机端口)Github
SirTunnel:https://github.com/anderspitman/SirTunnel
自建SSH隧道实现内网穿透与端口转发,Docker快速部署
一、简介
一款基于OpenSSH构建的内网穿透与端口转发工具,通过SSH隧道技术实现支持所有TCP协议通信,包括SSH、HTTP、HTTPS等各类应用。提供灵活部署方式,特别支持Docker容器化快速部署。
二、安装准备
提前自行安装好docker、docker-compose软件环境
新建docker-compose.yml配置文件,内容如下:
XML/HTML代码
  1. version: '3'
  2. services:
  3.   hello_ssh:
  4.     image: ghcr.io/luler/hello_ssh:latest
  5.     ports:
  6.       - "2222:22"  # 这个端口用于连接ssh服务,可修改
  7.       - "9100-9200:9100-9200" #这些端口用于端口转发使用,可修改
  8.     restart: unless-stopped
一键启动程序
XML/HTML代码
  1. docker-compose up -d
或者
XML/HTML代码
  1. docker run -p 2222:22 -p 9100-9200:9100-9200 --restart unless-stopped ghcr.io/luler/hello_ssh:latest
Dockerfile
XML/HTML代码
  1. FROM alpine:3.19
  2.  
  3. # 安装OpenSSH服务器和必要工具
  4. RUN apk --no-cache add openssh openssh-server-pam bash
  5.  
  6. # 创建jump用户
  7. RUN adduser -D jump && \
  8.     passwd -d jump && \
  9.     mkdir -p /home/jump/.ssh && \
  10.     chown jump:jump /home/jump/.ssh
  11.  
  12. # 创建必要的SSH目录
  13. RUN mkdir -p /var/run/sshd
  14.  
  15. # 创建一个端口信息显示脚本
  16. RUN echo '#!/bin/bash' > /usr/local/bin/show-forwards && \  
  17.     echo 'echo "═════════════ PORT FORWARDING INFO ═════════════"' >> /usr/local/bin/show-forwards && \
  18.     echo 'echo "???? Connection from: $SSH_CLIENT"' >> /usr/local/bin/show-forwards && \
  19.     echo 'echo ""' >> /usr/local/bin/show-forwards && \
  20.     echo 'echo "???? Active port forwardings:"' >> /usr/local/bin/show-forwards && \
  21.     echo 'netstat -tln | grep LISTEN | grep -v 127.0.0.1 | grep -v "::1" | grep -v :22 | while read line; do' >> /usr/local/bin/show-forwards && \
  22.     echo '    proto=$(echo $line | awk "{print \$1}")' >> /usr/local/bin/show-forwards && \
  23.     echo '    local=$(echo $line | awk "{print \$4}")' >> /usr/local/bin/show-forwards && \
  24.     echo '    echo "   → $proto $local"' >> /usr/local/bin/show-forwards && \
  25.     echo 'done' >> /usr/local/bin/show-forwards && \
  26.     echo 'echo ""' >> /usr/local/bin/show-forwards && \
  27.     echo 'echo "This session will remain active for port forwarding."' >> /usr/local/bin/show-forwards && \
  28.     echo 'echo "Press Ctrl+C to terminate the connection."' >> /usr/local/bin/show-forwards && \
  29.     echo 'echo "════════════════════════════════════════════════"' >> /usr/local/bin/show-forwards && \
  30.     echo 'sleep infinity' >> /usr/local/bin/show-forwards && \
  31.     chmod +x /usr/local/bin/show-forwards
  32.  
  33. # 配置SSH服务
  34. RUN sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords yes/' /etc/ssh/sshd_config && \
  35.     sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \
  36.     sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \
  37.     # 添加保活设置
  38.     echo "ClientAliveInterval 3" >> /etc/ssh/sshd_config && \
  39.     echo "ClientAliveCountMax 3" >> /etc/ssh/sshd_config && \
  40.     # 检查并替换已存在的GatewayPorts,如果不存在则添加
  41.     sed -i '/^GatewayPorts/d' /etc/ssh/sshd_config && \
  42.     echo "GatewayPorts yes" >> /etc/ssh/sshd_config && \
  43.     # 添加jump用户的特殊配置
  44.     echo "Match User jump" >> /etc/ssh/sshd_config && \
  45.     echo "    PermitEmptyPasswords yes" >> /etc/ssh/sshd_config && \
  46.     echo "    AllowTcpForwarding yes" >> /etc/ssh/sshd_config && \
  47.     echo "    X11Forwarding no" >> /etc/ssh/sshd_config && \
  48.     echo "    PermitTTY yes" >> /etc/ssh/sshd_config && \
  49.     echo "    PermitTunnel no" >> /etc/ssh/sshd_config && \
  50.     # 使用显示端口映射的脚本
  51.     echo "    ForceCommand /usr/local/bin/show-forwards" >> /etc/ssh/sshd_config
  52.  
  53. # SSH需要的host keys
  54. RUN ssh-keygen -A
  55.  
  56. # 开放22端口
  57. EXPOSE 22
  58.  
  59. # 启动SSH服务
  60. CMD ["/usr/sbin/sshd", "-D", "-e"]
三、使用示例
1. 把本机上工作在9000端口的portainer服务暴露到公网
执行下面端口转发命令,左边的9100端口可以选择容器映射到主机的9100-9200端口(一个端口只能被一个隧道使用,否则执行下面命令会在客户端提示warning),- p 2222是指定连接ssh服务的端口,localhost:9000为任何本机可以访问的服务,这里指定为本机的portainer服务
XML/HTML代码
  1. ssh -R 9100:localhost:9000 jump@45.125.32.62 -p 2222
成功执行完上面命令,就可以通过公网ip(域名)+端口访问本地服务了
使用ip+端口可以正常访问portainer服务
2. 暴露一个工作在3306端口的mysql服务
执行下面命令可以暴露任何TCP协议的端口,左边设置公网服务器的端口,localhost:3306就是本机可以连接的mysql服务
XML/HTML代码
  1. ssh -R 9101:localhost:3306 jump@45.125.32.62 -p 2222
成功执行上面命令之后,就可以使用公网ip+9101端口访问mysql服务
四、总结
自建ssh隧道服务可以一定程度保证网络速度稳定性、数据安全性,不过前提是你的有一个具有公网ip的服务器
ssh客户端直连使用非常方便,一行命令就能实现端口转发,但是不能自动重连,可以考虑使用autossh来进一步保证内网穿透的稳定性
当前工具默认设置为无需密码即可使用ssh隧道服务,可能存在被盗用风险,可自行参考源码构建镜像,增加密码验证功能。

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):