• {{article.mytitle}}
  • 内网穿透教程

    Author : zbzhen,       Last modification time : Tue Feb 21 10:41:24 2023

    1. 内网穿透教程

    1.1. 阿里云服务器需要做的工作

    1. 下载并解压 https://github.com/fatedier/frp

    2. 修改配置文件frps.ini 记得设置一个长一点的密码

      [common]
      bind_port = 7000
      token = wo_shi_aliyun_mima
      
      
    3. 开启TCP协议, 端口是7000

    4. 运行nohup ./frps -c frps.ini >logfile.dat 2>&1 &

    5. 停止ps -aux|grep frp| grep -v grep 查看进程号, 进程号是第一个数字

      kill -9 进程号可停止, 例如kill -9 3498

    1.2. 实验室服务器需要做的工作

    1. 下载并解压 https://github.com/fatedier/frp

    2. 修改配置文件frpc.ini

      假设阿里云的公网ip是47.13.4.5

      [common]
      server_addr = 47.13.4.5
      server_port = 7000
      token = wo_shi_aliyun_mima
      
      [ssh]
      type = tcp
      local_ip = 127.0.0.1
      local_port = 22
      remote_port = 6000
      
      
    3. 运行nohup ./frpc -c frpc.ini >logfile.dat 2>&1 &

    1.3. 个人电脑需要做的工作

    假设实验室机器的用户名为shiyanshi
    ssh -p 6000 shiyanshi@47.13.4.5

    1.4. 安全策略

    上面的步奏是可以轻松实现内网穿透, 但是会把实验室的机器暴露在公网里, 为此, 建议用安全策略

    • 阿里云要做的工作是一样的

    • 实验室服务器的frpc.ini的配置文件内容为
      假设阿里云的公网ip是47.13.4.5

      [common]
      server_addr = 47.13.4.5
      server_port = 7000
      token = wo_shi_aliyun_mima
      
      [anquansecret_ssh]
      type = stcp
      sk = zheshigaojimima
      local_ip = 127.0.0.1
      local_port = 22
      
      
      
    • 个人电脑上也要运行frp, 配置文件frpc.ini内容为

      [common]
      server_addr = 47.13.4.5
      server_port = 7000
      
      [secret_ssh_visitor]
      type = stcp
      role = visitor
      server_name = anquansecret_ssh
      sk = zheshigaojimima
      bind_addr = 127.0.0.1
      bind_port = 6000
      
      
      

      假设实验室机器的用户名为shiyanshi
      运行./frpc -c frpc.ini
      连接ssh -p 6000 shiyanshi@127.0.0.1

    1.5. 多控模式

    如果实验室有多台服务器, 该怎么处理?

    假设实验室有两台服务器A与B

    • 服务器A的配置文件frpc.ini

      [common]
      server_addr = 47.13.4.5
      server_port = 7000
      token = wo_shi_aliyun_mima
      
      [anquansecret_sshA]
      type = stcp
      sk = zheshigaojimimaA
      local_ip = 127.0.0.1
      local_port = 22
      
      
    • 服务器B的配置文件frpc.ini

      [common]
      server_addr = 47.13.4.5
      server_port = 7000
      token = wo_shi_aliyun_mima
      
      [anquansecret_sshB]
      type = stcp
      sk = zheshigaojimimaB
      local_ip = 127.0.0.1
      local_port = 22
      
      
    • 个人电脑上的配置文件frpc.ini

      [common]
      server_addr = 47.13.4.5
      server_port = 7000
      token= wo_shi_aliyun_mima
      
      [secret_ssh_visitor]
      type = stcp
      role = visitor
      server_name = anquansecret_sshA
      sk = zheshigaojimimaA
      bind_addr = 127.0.0.1
      bind_port = 6000
      
      
      [secret_ssh_10_10_15_8]
      type = stcp
      role = visitor
      server_name = anquansecret_sshB
      sk = zheshigaojimimaB
      bind_addr = 127.0.0.1
      bind_port = 6001
      
      

      端口得设两个,
      假设服务器A上的用户名为jqA, 服务器B上的用户名为jqB, 则连接方式分别为

      ssh -p 6000 jqA@127.0.0.1

      ssh -p 6001 jqB@127.0.0.1

    1.6. 开机启动

    1.6.1. 简单方法

    这个已经测试成功
    /etc/rc.local的代码exit 0前面加上开启frp的命令即可, 例如在阿里云上添加
    nohup /xxx/frps -c /xxx/frps.ini >/xxx/logfile.dat 2>&1 &
    这里xxx为/frp的绝对路径

    1.6.2. 非root的方法

    这个并没有测试成功
    这个并没有测试成功

    利用crontab命令实现

    1. crontab -e
    2. @reboot nohup /xxx/frps -c /xxx/frps.ini >/xxx/logfile.dat 2>&1 &

    常用命令

    • crontab -l查看所有任务

    • ps ufx | grep cron查看正在进行的任务

    停止crontab正在执行的任务

    • 方法一: 先查看进程号, 再删除.

    • 方法二:

      1. crontab -e
      2. #注释掉想要停止的认为
      3. 重启crontab, 命令为sudo service cron reload

    1.7. 免密登陆

    • 本地客户端生成密钥ssh-keygen, 一路回车即可

    • 可以通过cd ~/.ssh; ls查看刚创建的密钥

    • ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.10.33.44

    • 连接ssh root@10.10.33.44

    这种功能方法比输入密码肯定要安全不少
    , 并且也方便很多. 但是也要注意安全, 万一自己电脑私钥泄露, 就会影响到服务器的安全.

    1.8. 参考教程