美文网首页
利用ssh转发功能做端口映射,实现内网穿透

利用ssh转发功能做端口映射,实现内网穿透

作者: 奔跑伯爵 | 来源:发表于2021-10-16 22:02 被阅读0次

    场景

    1台内网机N可以上网,但是没有公网ip,用户userN,需要ssh的服务端和客户端,以及autossh软件;
    1台操作机C需要通过互联网以ssh的形式主动连接内网机N,需要ssh的客户端;
    1台具有公网ip的服务器S做中转,服务器S的ip为s.s.s.s,用户userS,ssh的端口为portS,需要ssh的服务端;

    内网机N上的步骤

    1. 安装ssh服务端
    apt install ssh
    
    1. 生成密钥文件,避免后续不断的输密码
    ssh-keygen
    

    可以使用默认值

    1. 把公钥提交给服务器S
    ssh-copy-id -i ~/.ssh/id_rsa.pub -p portS userS@s.s.s.s
    
    1. 利用ssh向服务器S建立一条反向隧道
    ssh -CNR 12345:localhost:22 userS@s.s.s.s -p portS
    

    意思是服务器S上的12345端口映射到内网机N的22端口,这种方法会出现断线无法连接的情况
    利用autossh,断线后会自动连接,更加可靠

    1. 安装autossh软件
    apt install autossh
    
    1. 利用autossh建立隧道
    autossh -M 5678 -CNR 12345:localhost:22 userS@s.s.s.s -p portS
    

    autossh比ssh多了一个M参数。
    更合适的方法是采用后文的自启动脚本。

    服务器S上的步骤

    编辑sshd_config文件

    vim /etc/ssh/sshd_config
    

    启用两个配置项,并设置为yes

    GatewayPorts yes
    AllowTcpForwarding yes
    

    操作机C上的步骤

    至此操作机C可以使用ssh客户端连接到服务器S的12345端口,实际上这个数据流会转发到内网机的22端口上,从而实现了内网穿透的功能。

    内网机N上设置autossh为自启动

    创建自启动文件/etc/systemd/system/autossh.service
    内容如下

    [Unit]
    Description=AutoSSH tunnel service Remote port 12345 to local 22
    After=network.target
    
    [Service]
    User=userN
    TimeoutStartSec=30
    Environment="AUTOSSH_GATETIME=0"
    ExecStart=/usr/bin/autossh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -o "ExitOnForwardFailure yes" -M 0 -N -R 12345:localhost:22 userS@s.s.s.s -p portS
    
    [Install]
    WantedBy=multi-user.target
    

    启用开机自启动

    systemctl enable autossh
    

    立即启动

    systemctl start autossh
    

    相关文章

      网友评论

          本文标题:利用ssh转发功能做端口映射,实现内网穿透

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