IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用SSH反向隧道进行内网穿透

    bear发表于 2016-10-29 06:42:54
    love 0

    1,前提条件
    A机位于公司的NAT网络,是一台安装在VMware Workstation Player里的Debian 8 64bit虚拟机,本地用户为userA, SSH服务运行于22端口上;
    B机是一台有公网IP的VPS,系统为CentOS 6 64bit,本地用户为userVPS, SSH服务运行于1022端口上;
    C机位于家庭的NAT网络,系统为Windows。
    下面开始操作步骤。

    2,B机(VPS)的操作

    $ vim /etc/ssh/sshd_config  #打开如下选项
    GatewayPorts yes
    
    $ /etc/init.d/sshd reload
    

    3,A机的操作
    前面说了,A机位于公司内部NAT网络内,是一台安装在VMware Workstation Player里的Debian 8 64bit虚拟机。

    sudo apt-get install autossh
    
    配置A机可以免密码登陆到VPS(B机),方法为将A机的公钥发给VPS(B机),这样A机开机时就可以自动建立一条到VPS的SSH隧道
    $ ssh-keygen -t rsa    #连续三次回车,即在本地生成了公钥和私钥,不要设置密码
    $ ssh-copy-id -p VPS的SSH端口 -i ~/.ssh/id_rsa.pub userVPS@VPS的IP
    
    $ sudo touch /var/log/ssh_nat.log && sudo chmod 777 /var/log/ssh_nat.log
    $ /usr/bin/autossh -p VPS的SSH端口 -M 6777 -NR 8388:127.0.0.1:22 userVPS@VPS的IP -i ~/.ssh/id_rsa
    添加的一个-M 6777参数,负责通过6777端口监视连接状态,连接有问题时就会自动重连,去掉了一个-f参数,因为autossh本身就会在background运行。
    
    sudo vim /lib/systemd/system/autossh.service  #将下例内容粘贴复制进去
    
    [Unit]
    Description=Auto SSH Tunnel
    After=network-online.target
    
    [Service]
    User=userA     #改掉这里A机的用户
    Type=simple
    ExecStart=/usr/bin/autossh -M 6777 -NR 8388:127.0.0.1:22 -i ~/.ssh/id_rsa userVPS@VPS的IP -p VPS的SSH端口 >> /var/log/ssh_nat.log 2>&1 &
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    WantedBy=graphical.target
    
    sudo chmod +x /lib/systemd/system/autossh.service    #给予可执行权限
    sudo systemctl enable autossh    #设置开机自启
    sudo systemctl start autossh     #现在就启动服务
    sudo systemctl status autossh  #查看状态,出现Active: active (running)表示正常运行
    

    也可以登陆到VPS(B机)上看看8388商品是否真的有程序在监听

    netstat -antp | grep :8388
    tcp        0      0 0.0.0.0:8388                0.0.0.0:*                   LISTEN      20041/sshd          
    tcp        0      0 :::8388                     :::*                        LISTEN      20041/sshd
    

    4,尝试远程登陆
    接下来,我们就可以在家里的电脑(C机)上登陆到位于公司NAT网络里的那台Debian8虚拟机(A机)。

    ssh userA@VPS的IP -p 8388
    

    注意:这里的userA并不是VPS(B机)上的用户,而是Debian8虚拟机(A机)上的用户。



沪ICP备19023445号-2号
友情链接