frp有以下特点:
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
代理组间的负载均衡。
端口复用,多个服务通过同一个服务端端口暴露。
多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
服务端和客户端 UI 页面。
此次实现项目,需要一台云服务器(服务端)、一台本地电脑(客户端)、frp、nginx、docker。
服务端Ubuntu:
首先,在服务端安装nginx:
sudo apt update sudo apt install nginx nginx -v systemctl start nginx systemctl restart nginx
安装docker:
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker version
新增conf配置站点:
/etc/nginx/conf.d/new.conf
打开防火墙端口:
sudo ufw allow 80 sudo ufw status sudo ufw reload #重启防火墙 sudo ufw enable #开启防火墙 sudo ufw disable #关闭防火墙
编辑sshd的配置文件/etc/ssh/sshd_config,将GatewayPorts no 改为:GatewayPorts yes,并重启sshd:
vim /etc/ssh/sshd_config GatewayPorts yes systemctl restart sshd
新建frp配置文件:
sudo mkdir /etc/frp sudo nano /etc/frp/frps.ini
写入配置文件frps.ini:
[common] # 监听端口 bind_port = 7000 # 面板端口 dashboard_port = 7500 # 登录面板账号设置 dashboard_user = admin dashboard_pwd = 123456 # 设置http及https协议下代理端口(非重要) vhost_http_port = 7080 vhost_https_port = 7081 # 身份验证 token = 123456
安装frp:
sudo docker run --restart=always --network host -d -v /etc/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps
至此,就可以通过IP:7500访问配置了
客户端Windows
然后下载客户端,下载地址》》》
这里下载的是frp_0.49.0_windows_amd64.zip
配置:
[common] # server_addr为FRPS服务器IP地址 server_addr = x.x.x.x # server_port为服务端监听端口,bind_port server_port = 7000 # 身份验证 token = 123456 [web1ssh] type = tcp local_ip = 127.0.0.1 local_port = 8080 remote_port = 8080 [wen2ssh] type = tcp local_ip = 127.0.0.1 local_port = 8082 remote_port = 8082
配置好之后,在cmd-执行加载配置:
frpc.exe -c frpc.ini
用dos容易被终止服务,可以写一个bat脚本常驻进程:
右键编辑这个 start.bat,在里面输入如下内容:
@echo off :home frpc -c frpc.ini goto home
方法1:利用开始菜单启动项。
优点:操作简单,拖进去就可以了。
缺点:会显示出命令行窗口。
这里用 Windows 10 介绍,Windows 7 和 Windows 8 基本上一样。
右键 start.bat,创建快捷方式。
打开 C:\Users\你的电脑用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
将快捷方式复制进去
这样就会在你每次开机的时候启动 Frp 了,但是会弹出命令提示符窗口。
方法2:利用任务计划程序。
打开开始菜单,输入 “任务计划程序” 将会自动搜索,接着打开它。
点击右侧的 “创建任务”,名称随意填写,安全选项选择 “不管用户是否登录都要运行”,当然你也可以选择 “只在用户登录时运行”。
选择 “不管用户是否登录都要运行” 可以让你的电脑在断电自动启动后自动运行 frp,你就可以远程桌面连接电脑了。
“使用最高权限运行” 也是可选的,根据个人需要可以选上。
最后勾选 “隐藏”,就不会在启动时弹出命令行窗口了
注意,以上开的所有远程服务端口,必须在服务端ufw allow开启,不然会无法访问。
最后,在nginx conf配置端口映射即可:
server { listen 80; server_name blog.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_max_temp_file_size 0; proxy_redirect off; proxy_read_timeout 240s; } }
加上配置后,还需要域名解析,映射域名和IP。
自此,内网穿透完成。
转载请注明:永盟博客 » 使用frp实现内网穿透(Ubuntu)