去发现生活中的美好,记录生活中的点点滴滴

使用frp实现内网穿透(Ubuntu)

linux admin 67℃

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

frp github地址

至此,就可以通过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)

喜欢 (2)