Frp 及 Coturn 内网穿透





Frp 及 Coturn  内网穿透



Frp 内网穿透 服务器 搭建

    Linux 服务器端

        # getconf LONG_BIT        \\ 查询 Linux 系统位数
        # wget https://github.com/fatedier/frp/releases/download/v0.37.0/frp_0.37.0_linux_amd64.tar.gz
        # tar zxvf frp_0.37.0_linux_amd64.tar.gz -C /usr/local
        # cd /usr/local
        # mv frp_0.37.0_linux_amd64 frp_0.37
        # cd frp_0.34
        # vim frps.ini                \\ 服务器端主配置文件 替换即可   端口可自定义 没有冲突即可
            [common]
            bind_port = 7000
            host_http_port = 8090        \\ 此为映射内网的http端口 可使用nginx反向代理到127.0.0.1:8090进行访问
            #vhost_https_port = 443

            subdomain_host = frp.syk.my  \\ 绑定个域名 可以在解析下级域名使用 比较繁琐 这条没什么大用 可注释可直接解析域名
            token = xxx                       \\ FRP 身份验证

            dashboard_addr = 0.0.0.0      \\ 服务器端 管理界面
            dashboard_port = 7500          \\ FRPS 服务端 仪表盘的登陆端口 使用 http://IP:7500 访问
            dashboard_user = admin          \\ 登陆用户名 密码
            dashboard_pwd = admin123

            log_level = info              \\ 设置日志显示级别{debug, info, warn, error)
            log_max_days = 999             \\ 设置日志最大天数

        # nohup ./frps -c frps.ini &         \\ 启动命令
        # ps -ef | grep frps
        # ss -tnl                              \\ 7000端口被监听

        # vim /etc/systemd/system/frps.service   \\ 添加 systemd 管理
            [Unit]
            Description=frps
            After=network.target

            [Service]
            ExecStart=/usr/local/frp_0.37/frps -c /usr/local/frp_0.37/frps.ini

            [Install]
            WantedBy=multi-user.target


        # systemctl restart frps
        # ss -tnl

        http://47.91.219.64:7500       \\ 访问


    Linux 客户端

        # getconf LONG_BIT                 \\ 查询 Linux 系统位数
        # wget https://github.com/fatedier/frp/releases/download/v0.37.0/frp_0.37.0_linux_amd64.tar.gz
        # tar zxf frp_0.37.0_linux_amd64.tar.gz -C /usr/local/
        # cd /usr/local
        # mv frp_0.37.0_linux_amd64 frp_0.37
        # cd frp_0.34
        # vim frpc.ini        \\ 客户端 配置文件
            [common]

            server_addr = 47.91.219.64           \\ 服务器端的ip或域名
            server_port = 7000                    \\ 服务器端口7000
            token = xxx                            \\ FRP 身份验证 与服务器端对上即可

            # frpc.ini 管理界面 127.0.0.1 地址为仅限本地,0.0.0.0为不限。
            admin_addr = 0.0.0.0       \\ 客户端管理界面  192.168.10.11:7400 访问  好像不管用 但无所有可以映射端口
            admin_port = 7400
            admin_user = admin
            admin_pwd = admin123

            # 
            # ------------------- 以下为内网端口穿透应用 写进去需要的即可-------------------
            # 

            # 映射内网ssh 22端口 到 5522端口
            # 使用 #root@frp.nasge.com -p 5522
            # 使用 #ssh 47.91.219.64 5522
            [ssh]
            type = tcp
            local_ip = 127.0.0.1
            local_port = 22          \\ ssh 实际端口
            remote_port = 5522        \\ 映射出的 ssh 端口 使用 ssh 47.91.219.64:5522 来连接


            [web_47.91.219.64]
            type = http
            local_ip = 127.0.0.1
            local_port = 80                \\ 本地的http 端口
            custom_domains = 47.91.219.64   \\ 绑定完整域名或使用ip也可以 域名解析到此使用47.91.219.64:8090访问亦可使用反代
            #subdomain = abc  \\ 如果在服务器中的 subdomain_host 绑定了域名 这里可以使用前缀解析 使用 abc.frp.syk.my 访问


            [web_www.syk.my]             \\ 有多个 web 可以添加多个
            type = http
            local_ip = 127.0.0.1
            local_port = 80
            custom_domains = www.syk.my


            [custom]                   \\ 自定义 tcp 端口 名字而已 随便起
            type = tcp
            local_ip = 127.0.0.1
            local_port = 80               \\ 把本地端口映射 到 服务器的8021端口
            remote_port = 8021


        # nohup ./frpc -c frpc.ini &         \\ 启动命令
        # ps -ef | grep frpc
        # ss -tnl                              \\ 7400端口被监听

        # vim /etc/systemd/system/frpc.service   \\ 添加 systemd 管理
            [Unit]
            Description=frpc
            After=network.target

            [Service]
            ExecStart=/usr/local/frp_0.37/frpc -c /usr/local/frp_0.37/frpc.ini

            [Install]
            WantedBy=multi-user.target


        # systemctl restart frpc
        # ss -tnl


        ssh 47.91.219.64 5522             \\ 可以连接到内网
        http://47.91.219.64:7500           \\ 访问服务器端的管理界面
        http://47.91.219.64:8090            \\ 访问内网的 http 网页 web



    Windows 客户端                                \\ 客户端版本要与服务器版本相同

        https://github.com/fatedier/frp/releases   \\ 下载 frp_0.37.0_windows_amd64.zip 即可
        
        解压 修改客户端配置文件 frpc.ini               \\ 放到此目录下即可 c:\frps_0.37
            [common]
            server_addr = 47.91.219.64
            server_port = 7000
            token = xxx

            [rdp]
            type = tcp
            local_ip = 127.0.0.1
            local_port = 3389
            remote_port = 3389
            custom_domains = 47.91.219.64


            在目录中打开 PowerShell       -->      ./frpc -c ./frpc.ini        \\ 临时测试 启动


        frpc.vbs                                        \\ 创建 开机启动文件
            Set ws = CreateObject("Wscript.Shell")
            ws.run "cmd /c c:\frps_0.37\frps.exe -c c:\frps_0.37\frps.ini",vbhide


        启动文件保存在此目录下即可 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp


        注:

            https://github.com/fatedier/frp/releases                        \\ 开源 git 地址
            https://github.com/fatedier/frp/blob/master/README_zh.md         \\ 官方文档
            https://gofrp.org/docs/                                           \\ 官方文档
            frp_0.37.0_linux_amd64.tar.gz           \\ linux 版本
            frp_0.37.0_windows_amd64.zip             \\ windows 版本



    wol 网卡唤醒工具 安装          \\ 未测试

        # wget http://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/w/wol-0.7.1-23.el8.x86_64.rpm
        # rpm -ivh wol-0.7.1-23.el8.x86_64.rpm
        # wol -V

        rpm包下载地址 http://rpmfind.net/linux/rpm2html/search.php?query=wol(x86-64)


    windows 远程多开程序 RDPWrap-v1.6.2.zip       \\ 未测试




Coturn 穿透服务器搭建
 
    # yum install -y make gcc cc gcc-c++ wget openssl-devel libevent libevent-devel mysql-devel
    # wget https://coturn.net/turnserver/v4.5.0.8/turnserver-4.5.0.8.tar.gz
    # wget https://coturn.net/turnserver/v4.5.0.8/turnserver-4.5.0.8.tar.gz
    # tar -zxvf turnserver-4.5.0.8.tar.gz
    # cd turnserver-4.5.0.8/
    # ./configure
    # make && make install
    # openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes
    # cd /usr/local/etc/
    # cp turnserver.conf.default turnserver.conf
    # vim turnserver.conf                          \\ 追加即可
        listening-device=eth0                       \\ 网卡名字
        listening-port=3478
        tls-listening-port=5349
        listening-ip=内网ip
        relay-ip=内网ip
        external-ip=公网ip
        min-port=49152
        max-port=65535
        lt-cred-mech
        realm=admin
        user=user:123456
        cert=/usr/local/etc/turn_server_cert.pem
        pkey=/usr/local/etc/turn_server_pkey.pem
        no-cli
    # turnserver -a -o -c /usr/local/etc/turnserver.conf      \\ 启动
    # ss -tnl                                                  \\ 3478 5349 被监听 防火墙放行tcp及udp 3478即可
 
    http://192.168.10.12:3478                          \\ 有如下页面 即启动成功
        TURN Server
        use https connection for the admin session
 
    https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/     \\ 检测网站
        STUN or TURN URI:  stun:103.113.61.109:3478
        TURN username:     user
        TURN password:     123456
        -->  Add Server  --> Gather candidates --> 有返回 本机ip即通过







FTP 服务器




FTP 服务器

    ftp  是文件传输协议 软件有 pure-Ftpd 等
    sftp 基于 SSH 的 安全文件传输协议  软件有  internal-sftp  和  vsftpd 等


internal-sftp 搭建       \\ 系统自带的 sftp工具
    
    # useradd -s /sbin/nologin -M sftp01    \\ 创建用户 sftp01 并禁止ssh登录 不创建家目录
    # passwd sftp01
    # mkdir -p /data/sftp        \\ 创建sftp根目录
    # chown root:root /data/sftp  \\ 此目录开始一直往上到系统根目录为止的目录拥有者都只能是root
    # chmod 755 /data/sftp         \\ 此目录开始一直往上到系统根目录为止都不可以具有群组写入权限 最大权限为755 设置成777会报错
    # mkdir -p /data/sftp/sftp01    \\ 创建 sftp01 的根目录
    # chown root:sftp01 /data/sftp/sftp01 \\ 此为sftp01根目录 sftp01用户并没有写权限 可以在此目录下面 创建工作目录 具有写权限
    # chmod 755 /data/sftp/sftp01          \\ 此目录权限也只能是755 否则无法限制目录 会读取到 系统根目录下的所有文件
    # usermod -d /data/sftp/sftp01 sftp01   \\ -d 修改用户登入时的目录  既此sftp用户的根目录
    # mkdir -p /data/sftp/sftp01/upload      \\ 创建上传的工作目录 如有需要 可以创建多个
    # chown sftp01:sftp01 /data/sftp/sftp01/upload   \\ 给予权限
    # vim /etc/ssh/sshd_config
        # Subsystem      sftp    /usr/libexec/openssh/sftp-server        \\ 注释掉此行    配置文件最后
      Subsystem       sftp    internal-sftp    \\ 指定使用sftp服务使用系统自带的internal-sftp 如不添加用户无法通过sftp登录
      Match Group sftp01,sftp02                 \\ 匹配用户 如果要匹配多个组 多个组之间用逗号分割
      ChrootDirectory /data/sftp/%u              \\ 这里的%u指的是账号名,/home/sftp/%u 含义是:/sftp/sftpuser
      ForceCommand    internal-sftp               \\ 指定sftp命令
      AllowTcpForwarding no                        \\ 这两行是禁止用户端口转发   如要使用端口转发就删掉这两个行
      X11Forwarding no
    # systemctl restart sshd
    # ss -tnl                                   \\ sftp 使用的 ssh 端口
    # sftp -o Port=22 sftp01@127.0.0.1           \\ 本机 linux 测试连接
    # sftp -o Port=59157 sftp01@192.168.10.13     \\ 其他 linux 测试连接

    windows 可以使用 FileZilla 或 xshell自带的 xftp 6 连接
        sftp地址 sftp://192.168.10.13
        端  口 22
        用户名 sftp01
        密  码 123456

    注:
        关于 internal-sftp 服务
            对目录的所有权限不能精确控制删除权限

        关于 /usr/sbin/nologin 和 /bin/false 的区别
            /bin/false: 什么也不做只是返回一个错误状态 然后立即退出 户会无法登录 并且不会有任何提示
            /bin/false: 是最严格的禁止login选项,一切服务都不能用。
            /sbin/nologin: 会礼貌的向用户显示一条信息 并拒绝用户登录:This account is currently not available.
            /sbin/nologin: 只是不允许login系统
            有一些软件 比如一些ftp服务器软件 对于本地非虚拟账户 只有用户有有效的shell才能使用ftp服务
            这时候就可以使用nologin使用户即不能登录系统 还能使用一些系统服务 比如ftp服务. /bin/false则不行 这是二者的重要区别之一
        关于 错误  Couldn't read packet: Connection reset by peer  是由于 权限导致的


........................................................................................................................


pure-Ftpd 搭建

    # yum install pure-ftpd                                      \\ epel 源     宝塔面板上的ftp
    # useradd pureftp01 -M -s /sbin/nologin                       \\ 不创建的家目录
    # pure-pw useradd pureftp01 -u pureftp01 -d /data/pureftp01 -m \\ 创建虚拟用户 关联系统用户 -d 设置ftp登录目录           
    # mkdir -p /data/pureftp01                          \\ -m 创建数据库文件 如果没有 -m 需单独执行命令 # pure-pw mkdb
    # chown -R pureftp01:pureftp01 /data/pureftp01
    # vim /etc/pure-ftpd/pure-ftpd.conf                              \\ 主配置文件
        PureDB                        /etc/pure-ftpd/pureftpd.pdb     \\ 虚拟用户数据库   去掉注释即可
        NoAnonymous                  yes                               \\ 关闭匿名用户访问
        # KeepAllFiles                 yes                  \\ 允许用户断点续传 这两项同开启时 不允许用户删除文件 只能上传
        # NoRename                     yes                   \\ 不允许自动重命名 这两项同开启时 不允许用户删除文件 只能上传

    # systemctl restart pure-ftpd                              \\ 新加用户 不用重启也可以



    pure-Ftpd 配置文件详解
        ChrootEveryone               yes   \\ 锁定所有用户到家目录中   默认开启
        MaxClientsNumber             50     \\ 最大的客户端数量
        MaxClientsPerIP              8       \\ 同一个ip 允许 8个连接
        DisplayDotFiles              yes      \\ 不显示隐藏文件
        AnonymousOnly                no        \\ 只允许匿名用户     默认关闭
        NoAnonymous                  no         \\ 不允许 匿名用户    默认关闭
        DontResolve                  yes         \\ 禁止反向解析
        MaxIdleTime                  15           \\ 最大空闲时间
        # LDAPConfigFile                /etc/pure-ftpd/pureftpd-ldap.conf    \\ LDAP配置文件目录
        # MySQLConfigFile               /etc/pure-ftpd/pureftpd-mysql.conf    \\ Mysql 配置文件目录
        # PGSQLConfigFile               /etc/pure-ftpd/pureftpd-pgsql.conf     \\ PGSQL 配置文件目录
        # PureDB                        /etc/pure-ftpd/pureftpd.pdb             \\ 虚拟用户数据库
        # UnixAuthentication           yes       \\ 主机认证
        LimitRecursion               10000 8      \\ 列表最大显示文件 最深8个目录
        AnonymousCanCreateDirs       no            \\ 是否允许匿名用户创建用户
        MaxLoad                      4              \\ 最多可下载的数量
        # PassivePortRange             30000 50000   \\ 主动连接的端口范围
        # ForcePassiveIP               192.168.0.1    \\ 设置地址 总是指向到 匿名目录
        # AnonymousRatio               1 10            \\ 匿名用户上传下载速度比率
        # UserRatio                    1 10             \\ 用户上传下载速度比率
        # Bind                         127.0.0.1,21      \\ 绑定的ip 和端口
        # AnonymousBandwidth           8                  \\ 匿名用户的带宽 8KB
        # UserBandwidth                8                   \\ 用户的带宽 8KB
        Umask                        133:022                \\ 文件和目录的 Umask 码
        MinUID                      1000                     \\ 用户ID要大于1000才能登录
        AllowUserFXP                 no                       \\ 是否允许用户使用FXP协议
        AllowAnonymousFXP            no                        \\ 是否允许匿名用使用FXP协议
        ProhibitDotFilesWrite        no           \\ 是否允许写入点文件
        ProhibitDotFilesRead         no            \\ 是否允许读取点文件
        AnonymousCantUpload         yes             \\ 不允许匿名用户上传
        NoChmod                      yes             \\ 不允许用户改变权限
        # KeepAllFiles                 yes            \\ 允许用户断点续传
        # Quota                        1000:10         \\ 磁盘配额
        MaxDiskUsage                   99               \\ 磁盘最大利用率
        # NoRename                     yes               \\ 不允许自动重命名
        # IPV4Only                     yes                \\ 只允许使用IPV4协议

........................................................................................................................


vsftpd 搭建

    # rpm -qa | grep vsftp
    # yum install vsftpd
    # systemctl restart vsftpd
    # ss -tnl                      \\ 21端口被监听

    # vim /etc/vsftpd/user_list      \\ 该文件用来指示的默认账户在默认情况下也不能访问ftp
    # vim /etc/vsftpd/ftpusers        \\ 文件用来指定哪些用户不能访问ftp服务器


    匿名用户访问                      \\ 匿名用户是使用 ftp 用户登录而已
        # cat /etc/passwd | grep ftp  \\ 可以看到 ftp 用户的家目录为 /var/ftp 所以ftp匿名用户登录后的目录为 /var/ftp
        # vim /etc/vsftpd/vsftpd.conf  \\ 主配置文件
            anon_upload_enable=YES      \\ 允许匿名用户
            anon_mkdir_write_enable=YES  \\ 开启匿名用户创建目录  否则匿名用户无法创建目录
            chroot_local_user=YES         \\ 不允许用户进入主目录之外的目录  默认为NO  默认ftp用户是可以向上切换到要目录之外的
            anon_root=/data/ftp01          \\ 修改匿名用户的登录目录为 /data/ftp01 默认即可 此目录ftp用户不可有写权限 否则报错
            anon_umask=022                  \\ 设置上传文件的权限为644  控制文件的下载权限  可以下载上传的文件
            anon_other_write_enable=YES      \\ 删除权限   如果没有此权限则匿名用户不能删除只能上传   *** 权限控制 ***
        # mkdir -p /data/ftp01/upload         \\ 创建工作目录
        # chown ftp:ftp /data/ftp01/upload     \\ 给所有权限      如果使用默认目录 # chown ftp:ftp /var/ftp/pub 
        # systemctl restart vsftpd

        windows 连接
            计算机的地址栏 --> ftp://192.168.10.13

        windows 可以使用 FileZilla 或 xshell自带的 xftp 6 连接
            sftp地址 ftp://192.168.10.13     \\ 由于是匿名用户 其他为空即可


    非匿名用户访问
        # vim /etc/vsftpd/vsftpd.conf
            chroot_local_user=YES               \\ 不允许用户进入主目录之外的目录
            local_root=/data/ftp01               \\ 修改登录目录  默认为用户的家目录
            local_umask=022                       \\ 下载权限     默认开启
            write_enable=YES                       \\ 写入权限   如果关闭只能下载 不能上传、删除、重命名
            #cmds_denied=DELE                       \\ 不能删除文件  如有需要 需要的话可以打开注释
            #download_enable=NO                     \\ 只能上传、删除、重命名  不能下载  需要的话可以打开注释
        # useradd -s /sbin/nologin -M vsftp01         \\ 创建用户 不允许登录 不创建家目录
        # passwd vsftp01
        # usermod -d /data/ftp01 vsftp01
        # mkdir -p /data/ftp01/upload                   \\ 创建工作目录
        # rm -r /var/ftp                                 \\ 此目录是匿名用户登录 如不使用匿名用户登录 删除即可
        # chown vsftp01:vsftp01 /data/ftp01/upload        \\ 给所有权限 
        # systemctl restart vsftpd

        # vim /etc/pam.d/vsftpd
            #auth       required    pam_shells.so            \\ 注释掉
            auth       required     pam_nologin.so            \\ 需要加一行      否则会报错 530 Login incorrect.

        windows 连接
            计算机的地址栏 --> ftp://192.168.10.13

        windows 可以使用 FileZilla 或 xshell自带的 xftp 6 连接
            sftp地址 ftp://192.168.10.13        \\ 由于是匿名用户 其他为空即可


    虚拟用户      \\ 未配置 需要的时候 自行查询即可


    注:
        vsftpd 可实现用户对文件的 上传 下载 及 删除的控制
        只上传  不能下载及删除
        只上传及下载 不能删除
        上传 下载 删除都可以