<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="无需任何软件内网穿透隧道工具：localhost.run">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2024-08-19 15:36<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
无需任何软件内网穿透隧道工具：localhost.run




ngrok之类的内网穿透软件需要下载配置软件，这里有一个既不用下载软件，又不需要注册账号的免费内网穿透工具：localhost.run。


工具官网：http://localhost.run/


使用文档：http://localhost.run/docs/​​


根据官网描述，只需要一行命令，就可以跑起来了：




XML/HTML代码


    ssh -R 80:localhost:8080 nokey@localhost.run









XML/HTML代码


    -R命令表示反向端口转发

    80是被指定的转发端口

    localhost是你局域网ip地址（对应127.0.0.1）

    8080是你的局域网端口号

    nokey@localhost.run是一台处在公网的服务器







例如：需要外网访问局域网服务器 192.168.0.100:9000




XML/HTML代码


    ssh -R 80:192.168.0.100:9000 nokey@localhost.run







虽然可以直接用，但这种方式，给的免费域名只能使用几个小时。要想永久不变域名，需要添加以下SSH Key：


1、现在电脑上生成ssh key：




XML/HTML代码


    ssh-keygen




然后把public key放入到这个添加页面：​ ​https://admin.localhost.run/​​




XML/HTML代码


    cat ~/.ssh/id_rsa.pub







再去运行命令行：


XML/HTML代码


    ssh -R 80:localhost:80 nokey@localhost.run





这里会给你一个随机的域名，可以用浏览器直接访问，因为服务器在境外，速度可能慢一些。




注意：仅支持http方式访问，仅支持80端口的随机域名。


tunnelmole：https://tunnelmole.com/     （功能用法类似，只能转发本机端口）Github


SirTunnel：https://github.com/anderspitman/SirTunnel




自建SSH隧道实现内网穿透与端口转发，Docker快速部署


Github：https://github.com/luler/hello_ssh


一、简介


一款基于OpenSSH构建的内网穿透与端口转发工具，通过SSH隧道技术实现支持所有TCP协议通信，包括SSH、HTTP、HTTPS等各类应用。提供灵活部署方式，特别支持Docker容器化快速部署。


二、安装准备


提前自行安装好docker、docker-compose软件环境


新建docker-compose.yml配置文件，内容如下：


XML/HTML代码


    version: '3'

    services:

      hello_ssh:

        image: ghcr.io/luler/hello_ssh:latest

        ports:

          - &quot;2222:22&quot;  # 这个端口用于连接ssh服务，可修改

          - &quot;9100-9200:9100-9200&quot; #这些端口用于端口转发使用，可修改

        restart: unless-stopped





一键启动程序


XML/HTML代码


    docker-compose up -d





或者


XML/HTML代码


    docker run -p 2222:22 -p 9100-9200:9100-9200 --restart unless-stopped ghcr.io/luler/hello_ssh:latest





附Dockerfile


XML/HTML代码


    FROM alpine:3.19

     

    # 安装OpenSSH服务器和必要工具

    RUN apk --no-cache add openssh openssh-server-pam bash

     

    # 创建jump用户

    RUN adduser -D jump &amp;&amp; \

        passwd -d jump &amp;&amp; \

        mkdir -p /home/jump/.ssh &amp;&amp; \

        chown jump:jump /home/jump/.ssh

     

    # 创建必要的SSH目录

    RUN mkdir -p /var/run/sshd

     

    # 创建一个端口信息显示脚本

    RUN echo '#!/bin/bash' &gt; /usr/local/bin/show-forwards &amp;&amp; \  

        echo 'echo &quot;═════════════ PORT FORWARDING INFO ═════════════&quot;' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        echo 'echo &quot;???? Connection from: $SSH_CLIENT&quot;' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        echo 'echo &quot;&quot;' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        echo 'echo &quot;???? Active port forwardings:&quot;' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        echo 'netstat -tln | grep LISTEN | grep -v 127.0.0.1 | grep -v &quot;::1&quot; | grep -v :22 | while read line; do' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        echo '    proto=$(echo $line | awk &quot;{print \$1}&quot;)' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        echo '    local=$(echo $line | awk &quot;{print \$4}&quot;)' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        echo '    echo &quot;   &rarr; $proto $local&quot;' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        echo 'done' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        echo 'echo &quot;&quot;' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        echo 'echo &quot;This session will remain active for port forwarding.&quot;' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        echo 'echo &quot;Press Ctrl+C to terminate the connection.&quot;' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        echo 'echo &quot;════════════════════════════════════════════════&quot;' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        echo 'sleep infinity' &gt;&gt; /usr/local/bin/show-forwards &amp;&amp; \

        chmod +x /usr/local/bin/show-forwards

     

    # 配置SSH服务

    RUN sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords yes/' /etc/ssh/sshd_config &amp;&amp; \

        sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config &amp;&amp; \

        sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config &amp;&amp; \

        # 添加保活设置

        echo &quot;ClientAliveInterval 3&quot; &gt;&gt; /etc/ssh/sshd_config &amp;&amp; \

        echo &quot;ClientAliveCountMax 3&quot; &gt;&gt; /etc/ssh/sshd_config &amp;&amp; \

        # 检查并替换已存在的GatewayPorts，如果不存在则添加

        sed -i '/^GatewayPorts/d' /etc/ssh/sshd_config &amp;&amp; \

        echo &quot;GatewayPorts yes&quot; &gt;&gt; /etc/ssh/sshd_config &amp;&amp; \

        # 添加jump用户的特殊配置

        echo &quot;Match User jump&quot; &gt;&gt; /etc/ssh/sshd_config &amp;&amp; \

        echo &quot;    PermitEmptyPasswords yes&quot; &gt;&gt; /etc/ssh/sshd_config &amp;&amp; \

        echo &quot;    AllowTcpForwarding yes&quot; &gt;&gt; /etc/ssh/sshd_config &amp;&amp; \

        echo &quot;    X11Forwarding no&quot; &gt;&gt; /etc/ssh/sshd_config &amp;&amp; \

        echo &quot;    PermitTTY yes&quot; &gt;&gt; /etc/ssh/sshd_config &amp;&amp; \

        echo &quot;    PermitTunnel no&quot; &gt;&gt; /etc/ssh/sshd_config &amp;&amp; \

        # 使用显示端口映射的脚本

        echo &quot;    ForceCommand /usr/local/bin/show-forwards&quot; &gt;&gt; /etc/ssh/sshd_config

     

    # SSH需要的host keys

    RUN ssh-keygen -A

     

    # 开放22端口

    EXPOSE 22

     

    # 启动SSH服务

    CMD [&quot;/usr/sbin/sshd&quot;, &quot;-D&quot;, &quot;-e&quot;]





三、使用示例


1. 把本机上工作在9000端口的portainer服务暴露到公网


执行下面端口转发命令，左边的9100端口可以选择容器映射到主机的9100-9200端口（一个端口只能被一个隧道使用，否则执行下面命令会在客户端提示warning），- p 2222是指定连接ssh服务的端口，localhost:9000为任何本机可以访问的服务，这里指定为本机的portainer服务


XML/HTML代码


    ssh -R 9100:localhost:9000 jump@45.125.32.62 -p 2222





成功执行完上面命令，就可以通过公网ip（域名）+端口访问本地服务了


使用ip+端口可以正常访问portainer服务


2. 暴露一个工作在3306端口的mysql服务


执行下面命令可以暴露任何TCP协议的端口，左边设置公网服务器的端口，localhost:3306就是本机可以连接的mysql服务


XML/HTML代码


    ssh -R 9101:localhost:3306 jump@45.125.32.62 -p 2222





成功执行上面命令之后，就可以使用公网ip+9101端口访问mysql服务


四、总结


自建ssh隧道服务可以一定程度保证网络速度稳定性、数据安全性，不过前提是你的有一个具有公网ip的服务器


ssh客户端直连使用非常方便，一行命令就能实现端口转发，但是不能自动重连，可以考虑使用autossh来进一步保证内网穿透的稳定性


当前工具默认设置为无需密码即可使用ssh隧道服务，可能存在被盗用风险，可自行参考源码构建镜像，增加密码验证功能。


serveo--功能同上的一个免费穿透项目：https://serveo.net  教程


hello_ssh--快速搭建SSH服务端，用于实现端口转发（Docker）


Github：https://github.com/luler/hello_ssh  教程


其他搭建服务器项目：教程


sish：https://docs.ssi.sh/getting-started


Github：https://github.com/antoniomika/sish


Dockerhub：https://hub.docker.com/r/antoniomika/sish


</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
