美文网首页
使用SSH进行内网穿透

使用SSH进行内网穿透

作者: 躺在家里干活 | 来源:发表于2019-10-22 10:06 被阅读0次

    什么是内网穿透

    通俗的讲,就是能让外网的电脑找到处于内网的电脑
    百度百科-内网穿透

    直接进行端口映射行不行

    一般情况下,我们个人用的宽带网络,都是运营商分配的动态IP,如果使用端口映射的方式进行内网穿透的话,需要经常变动出口IP,不是很方便。说到底还是IP地址少啊,IPv6时代这个问题应该会小很多。

    需要哪些东西我们才能实现用SSH进行内网穿透

    • VPS:用来接收网络请求,转发请求与相应数据(一般VPS,都会赠送一个相对稳定的IP
    • 域名:有没有都可以,没有的话需要使用IP进行访问
    • 内网SSH工具:只要内网的设备可以通过SSH命令连接到VPS即可

    实践过程

    0. 内网设备中启动一个网站

    $ python -m SimpleHTTPServer
    Serving HTTP on 0.0.0.0 port 8000 ...
    

    1. 内网设备通过SSH连接到VPS

    # sp***w @ localhost in ~/Documents/*/*/*
    $ ssh -NR 30000:127.0.0.1:8000 username@vps_ip
    
    
    参数 参数说明
    -N 表示不开启shell
    -f 表示后天运行
    -R 表示端口映射,这里会把vps_ip:30000映射到127.0.0.1:8000
    -L 也表示端口英树,不过这个命令表示把端口映射出去

    2. VPS上使用curl命令测试是否能访问

    • 使用curl命令,测试30000端口
    # 此时有成功返回
    curl 127.0.0.1:30000
    <html>......</html>
    
    • 但是,在浏览器中使用IP进行访问

      使用浏览器进行访问
    • 好吧,使用curl通过外网IP+端口访问试一试

    $ curl *.*.*.*:30000
    curl: (7) Failed to connect to 47.98.62.75 port 30000: Connection refused
    
    
    • 所以这个端口是VPS内部可以访问,但是外网是访问不了的,那就看一下这个端口是个什么情况
    $ sudo netstat -tunlp |grep 30000
    tcp        0      0 127.0.0.1:30000         0.0.0.0:*               LISTEN      505/sshd: ****
    
    

    好吧,端口前面清楚的写着127.0.0.1,通过IP当然是无法访问的

    • 怎么办呢?用Nginx转发一下就👌了

    如果VPS中没有Nginx,需要先安装,之后修改配置文件,新增一个Server配置

    $ sudo vim /etc/nginx/nginx.conf
    ......
    http{
    ......
            server {
                    listen 30001;
                    location / {
                            proxy_pass http://127.0.0.1:30000;
                    }
            }
            .....
    }
    .....
    
    # 最后需要reload一下nginx的配置
    $ sudo nginx -s reload
    
    • 使用浏览器访问vps_ip:30001
      访问成功

    更多问题:如何持久化SSH连接

    SSH连接后,一段时间之后,就会自动断开,所以需要借助一些额外的工具重新连接,很多方法都能实现,其中使用Autossh自动重新连接,是一种比较简单的方法
    Autossh Automatically restart SSH sessions and tunnels

    相关文章

      网友评论

          本文标题:使用SSH进行内网穿透

          本文链接:https://www.haomeiwen.com/subject/uvnfvctx.html