1.用于在公开网络环境访问特定局域网环境下的节点
2.需要有一个具有公网IP的服务器作为中转节点,可参考阿里云、腾讯云,这里我们选用腾讯云服务器
3.需要使用frp,详情可见Github项目
4.可以使用xshell、xftp进行远程管理,软件下载见官网下载免费的教育版即可
5.原参考教程可见中之的视频
配置frp文件
- 分别下载frp客户端
frpc与frp服务端frps, windows 64位下载windows_amd64,linux下载linux_amd64 - 客户端即局域网中需要穿透到外网的节点,服务端即为作为中转的云服务器
本地配置
可以先在本地上把配置⽂件编辑好,再上传到Windows PC和Linux
- 配置服务端文件
frpc.ini:[common] bind_port = 7000 vhost_http_port = 8080 - 其中
bind_port是SSH用端口,vhost_http_port是用来映射Jupyter notebook的端口,完整的参数可以参考frps_full.ini,这⾥不作展开; - 配置客户端文件
frpc.ini:[common] server_addr = [cloud_ip] server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 [web] type = http local_port = 8888 custom_domains = [cloud_ip] - 主要修改了
server_addr为我们的云服务器IP, 并配置了两个映射规则,分别是SSH与web,用于SSH远程访问与映射jupyter notebook。 - 将frp分别上传到服务器和客户端(可以把没⽤的⽂件删掉,服务端只保留
frps相关的文件,客户端只保留frpc相关的文件)
中转服务端设置
- 在服务器防火墙开启配置文件中的端口

不确定协议类型可以两个都加上
启动frp进程
先使用命令符加载进frp文件侠下
- 服务端
出现权限问题可使用./frps -c ./frps.inichmod 777 ./frps提升frps文件权限 - 客户端
linux 命令:frpc -c frpc.ini
windows 命令:ls #列出当前目录的所有文件和子目录名称 CD #用于更改当前工作目录 cd ..为返回上一级 pwd #用于显示当前所在的工作目录的全路径名称dir #列出当前目录的所有文件和子目录名称 CD #用于更改当前工作目录 cd ..为返回上一级 - 在其他电脑上使用ssh测试:
windows命令行:
mac命令行:ssh username@cloud_ip -p portnumber
xshell:ssh -p portnumber username@cloud_ipssh username@cloud_ip portumber
自启动配置
云端linux
- 确保安装了
systemd# yum yum install systemd # apt apt install systemd - 使用文本编辑器,如
vim创建并编辑frps.service文件。此处的文件名称决定了服务的名称。
或vim /etc/systemd/system/frps.servicevim /lib/systemd/system/frps.service - ps: 1.
/lib/systemd/system/(或/usr/lib/systemd/system/)- 系统级服务文件存放位置
- 通常由软件包管理器自动安装到这里
- 不建议直接修改这里的文件(系统更新可能覆盖)
2./etc/systemd/system/ - 用户自定义服务文件存放位置
- 优先级高于
/lib/systemd/system/ - 适合用户自己创建的服务
- 写入以下内容:
路径要使用绝对路径,可以通过[Unit] Description=Frp Server Service After=network.target [Service] Type=simple User=root #此处用户名需要修改 Restart=on-failure RestartSec=5s ExecStart=/root/frp_0.51.3_linux_amd64/frps -c /root/frp_0.51.3_linux_amd64/frps.ini #此处文件路径需要修改 LimitNOFILE=1048576 [Install] WantedBy=multi-user.targetpwd来查看路径 - 使用以下命令,实现开机自启动:
显示以下内容则表示自启成功:systemctl daemon-reload systemctl enable frps systemctl start frps systemctl status frps
命令功能参考如下:systemctl start frps #启动frps systemctl enable frps #打开自启动 systemctl disable frps #关闭自启动 systemctl restart frps #重启进程 systemctl stop frps #停止进程 systemctl status frps #查看进程日志
linux客户端
同上,使用vim /lib/systemd/system/frpc.service创建并编辑 frpc.service 文件。写入以下内容:
[Unit]
Description=Frp cliant Service
After=network.target
[Service]
Type=simple
User=ps
#此处用户名需要修改
Restart=always
RestartSec=5
ExecStart=/home/ps/tools/frp_0.51.3_linux_amd64/frpc -c /home/ps/tools/frp_0.51.3_linux_amd64/frpc.ini
#此处文件路径需要修改
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
路径要使用绝对路径,可以通过pwd来查看路径,并使用systemctl enable frps打开自启动
windows客户端
- 在
frps文件中新建批处理文件autostart.bat文件:@echo off chcp 65001 title 内网穿透_不要关闭此窗口!!! echo ---------------------分割线----------------- echo 不要关闭此窗口!!! echo 不要关闭此窗口!!! echo 不要关闭此窗口!!! echo ---------------------分割线----------------- if not defined TAG ( set TAG=1 start wt -p "cmd" %0 #要确保安装了windows terminal,如果没有安装,可以在Microsoft store中安装 exit ) :home frpc -c frpc.ini goto home #为了崩溃或者异常后可以重启 - 创建
autostart.bat的快捷⽅式 - 打开
C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\,将快捷⽅式粘贴到进去 - 这个⽅法在每次PC开机时,就会弹出Windows Terminal的窗⼝,可能有点碍事,但你可以直接看到frpc的运⾏状态
- 如果你暂时不需要启动frpc,直接Ctrl + C终⽌即可,然后需要运⾏的时候再去⼿动运⾏ autostart.bat 即可
- 使用
shutdown /r /t 0重启windows服务器
jupyter notebook配置
详情可见frp实现内网穿透以及配置Jupyter Notebook远程连接与使用frp穿透远程访问Jupyter Notebook方法
生成nootbook配置文件
执行以下命令,会在用户目录下生成的配置文件~/.jupyter/jupyter_notebook_config.py,之后在这个文件中再进行配置。
jupyter notebook --generate-config
详细配置设置
- 进入
python环境:from notebook.auth import passwd passwd() #设置自己的密码,例如123 #然后两次输入确认生成加密字符串 #一定保留好加密字符串 - 对
~/.jupyter/jupyter_notebook_config.py进行配置允许访问:
注意:如果用frp做内网穿透的话,这里的端口需要对应上面frp客户端web服务配置的端口号,tensorboard可视化等等其他web服务也是一样c.NotebookApp.allow_remote_access = True #允许远程访问 c.NotebookApp.allow_root = True #允许root访问 c.NotebookApp.ip='*' # 这一项为noteboook运行所占用的IP c.NotebookApp.password = '上面复制的加密字符串' c.NotebookApp.open_browser = False # 禁止自动打开浏览器 c.NotebookApp.port =8888 # 端口 c.NotebookApp.notebook_dir = '设置Notebook启动进入的目录' - 配置完成,重启notebook即可
使用nohup命令后台运行jupyter notebook,并将输出的内容追加的内容输出到jupyter.out文件中,同时将错误信息也输出到文件中。nohup jupyter notebook >>jupyter.out 2>&1 & - 使用
frp配置中的云服务器IP+端口号即可以远程访问
多个 SSH 服务复用同一端口
修改不同实例名即可
[ssh3]#修改这里的实例名
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2333
由于云主机的frp服务器端口是开放的,任意的frp客户端都可以随意在服务器注册端口映射,这样子在公网上及其不安全,所以建议要
默认情况下只要知道 FRP 服务端开放的端口,任意 FRP 客户端都可以随意在服务端上注册端口映射,这样对于在公网上的 FRP 服务来说显然不太安全。FRP 提供了身份验证机制来提高 FRP 服务端的安全性。
可以使用token加强验证。详见frp帮助文档
#在common中加入以下参数
token = [密码] #在frps与frpc的common中都加入以下参数
frp配置实现转发多个http站点
将新加的[web]项type改为tcp,后面也不用加域名或者ip。
frp会直接将其当作tcp数据包处理,只处理到了传输层(tcp),而没有到应用层(http)。
配置如下:
[web]
type = http
local_port = 8501
remote_port = 8080
custom_domains = 122.51.109.45
[web2]
type = tcp
local_ip = 127.0.0.1
local_port = 9995
remote_port = 9995
[web3]
type = tcp
local_ip = 127.0.0.1
local_port = 8502
remote_port = 8081