家里没有公网IP,因此导致家里的GPU服务器,NAS在外网访问起来非常困难,尝试过使用花生壳、零遁出的内网穿透工具。但效果都不太好,链接速度不稳定,所以就尝试搞了个frp做了个内网穿透 准备工作 【服务端S】一台带有公网IP的服务器(阿里云、腾讯云等) 【客户端C】你需要在外网访问的内网服务器【frp】frp安装文件 其中,服务端是指能提供公网IP的服务器,客户端C需要将端口Port_c映射到公网服务器S的端口Port_s上,通过访问公网服务器S的端口Port_s,就可以访问内网客户端C的Port_c端口了。 获取frp安装文件 进入Git-frp,下载对应的frp文件,我下载的是frp_0.32.0_linux_amd64.tar.gz,可以在GitHub页面直接点击下载,也可以使用下面的命令。注意,客户端C与客户端C都需要下载frp文件 wget https://github.com/fatedier/frp/releases/download/v0.32.0/frp_0.32.0_linux_amd64.tar.gz 服务端配置 新建路径/usr/local/frp,将刚才下载的frp文件,解压到这个路径下 mkdir -p /usr/local/frptar -zxvf frp_0.32.0_linux_amd64.tar.gz -C /usr/local/frpcd /usr/local/frp/frp_0.32.0_linux_amd64 进入/usr/local/frp后,需要关注4个文件:分别是frpc、frpc.ini和frps、frps.ini。frpc、frpc.ini是客户端所关注文件,frps、frps.ini是服务端所关注两个文件。配置服务器端,将客户端的配置文件删除 rm /usr/local/frp/frp_0.32.0_linux_amd64/frpc* 接下来,对frps.ini进行配置。默认的frps.ini中,只包含了端口一项,出于安全考虑,可以添加一个token,我的frps.ini是这样的 [common] bind_port = 7000 token = 82#¥F95f45@3f #客户端连接服务器端的口令 配置完成后,执行下面命令,就可以启动frp了 /usr/local/frp/frp_0.32.0_linux_amd64/frps -c /usr/local/frp/frp_0.32.0_linux_amd64/frps.ini 需要注意的是,要检查你的公网服务器,7000端口是否对外开放了,不开放端口,是没有办法进行访问的 客户端配置 客户端配置与服务端配置其实大同小异,在新建路径/usr/local/frp,将刚才下载的frp文件,解压到这个路径下 mkdir -p /usr/local/frptar -zxvf frp_0.32.0_linux_amd64.tar.gz -C /usr/local/frpcd /usr/local/frp/frp_0.32.0_linux_amd64 进入/usr/local/frp后,需要关注4个文件:分别是frpc、frpc.ini和frps、frps.ini。frpc、frpc.ini是客户端所关注文件,frps、frps.ini是服务端所关注两个文件。配置客户端,将服务器端的配置文件删除 rm /usr/local/frp/frp_0.32.0_linux_amd64/frps* 接下来,对frps.ini进行配置。我的frps.ini是这样的 [common] server_addr = xxx.xxx.xxx.xxx # 服务端ip server_port =7000 #服务端端口 token = 82#¥F95f45@3f #连接服务端口令[ssh] type = tcp local_ip = 127.0.0.1 #127.0.0.1或者本地ip local_port = 22 #要穿透的本地端口 remote_port =6661 # 暴露到外网的端口 配置完成后,执行下面命令,就可以启动frp了 /usr/local/frp/frp_0.32.0_linux_amd64/frpc -c /usr/local/frp/frp_0.32.0_linux_amd64/frpc.ini 需要注意的是,要检查你的公网服务器6661端口,内网客户端22端口是否开放。 测试 通过 ssh 访问内网机器,假设用户名为 test:ssh -oPort=6661 test@x.x.x.x这里ip为服务端ip,端口为我们暴露到外网的端口即 6661。使用xshell等ssh链接工具,也可以进行测试 配置开机自启动 为增加内网穿透的稳定性,需要添加开机自启动,我使用systemctl来控制启动。以服务端为例,首先,编写脚本 sudo vim /lib/systemd/system/frps.service [Unit] Description=fraps service After=network.target network-online.target syslog.target Wants=network.target network-online.target [Service] Type=simple #启动服务的命令(此处写你的frps的实际安装目录) ExecStart=/usr/local/frp/frp_0.32.0_linux_amd64/frps -c /usr/local/frp/frp_0.32.0_linux_amd64/frps.ini [Install] WantedBy=multi-user.target 客户端的脚本,与服务器端脚本没啥区别,将frps替换成frpc就可以了 [Unit] Description=fraps service After=network.target network-online.target syslog.target Wants=network.target network-online.target [Service] Type=simple #启动服务的命令(此处写你的frps的实际安装目录) ExecStart=/usr/local/frp/frp_0.32.0_linux_amd64/frpc -c /usr/local/frp/frp_0.32.0_linux_amd64/frpc.ini [Install] WantedBy=multi-user.target 然后分别在客户端与服务器端启动 frpssudo systemctl start frps再打开自启动sudo systemctl enable frps 几条有用的命令 重启 sudo systemctl restart frps停止 sudo systemctl stop frps查看应用日志 sudo systemctl status frps 总结 本文介绍了ssh远程登录的方法,如果需要完成ftp、http等映射,可以添加端口映射实现frp可以做域名映射,这个后续有时间再写详细过程 直接买性能优异的云主机太贵了,但使用frp做内网穿透,比较费时,可能还有安全问题,这个就看自己的取舍了生命不息,折腾不止