一、物理服务器(硬件服务器)怎么样才能使用外网访问?

首先要了解公网IP和私网IP,像家用电脑或者服务器只有一个私网IP,没用公网IP。

如果路由器有公网IP可以间接连接我们的内部服务器,一般要运营商下放公网IP,如果运营商没用下放公网IP,像第三方有很多内网穿透的盒子,例如:内网穿透/旁路由sd-wan组网盒子蒲公英。

我们也可以借助一款强大的软件FRP达到可以让外网访问的效果。

二、什么是内网穿透?

内网穿透的原理很简单的说就是:

        两台计算机A和B都处于不同的局域网中,A想要访问B, 就需要通过一台服务器做桥接的,桥接的方式有两种,一种是服务器相互转发流量 到A和B,另一种是告诉对方公网IP地址,自己充当一个介绍人的角色。      

内网穿透的工具有很多:花生壳、蜻蜓映射、frp、nps、ngrok

我们重点介绍的是frp

三、什么是FRP?

        frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

四、为什么使用 frp?

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
  • 代理组间的负载均衡。
  • 端口复用,多个服务通过同一个服务端端口暴露。
  • 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
  • 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
  • 服务端和客户端 UI 页面。

五、条件准备。

1.一台带有公网IP的云服务器(阿里云或者腾讯云的都可以,linux系统,必须是centos7以上版本,centos6不支持systemctl命令)。

2.备案过的域名

3.物理服务器(内网)、家用电脑(内网)(家用电脑也可以作为服务器

六、安装。

到frp中文文档上,下载最新版本

安装 | frphttps://gofrp.org/docs/setup/

下载完成后,我们用xftp上传的云服务器

我们用xshell分别连接物理服务器和云服务器

 在云服务器上输入解压

tar -zxvf frp_0.38.0_linux_amd64.tar.gz

 

 

服务器端输入ls查看目录,cd frp 进入文件frp下

 进入xftp,点击frps.ini右键进行编辑

在文件中写入并保存

[common]
bind_port = 7000
vhost_http_port = 8080

 

然后在云服务器命令界面开启服务器

./frps -c ./frps.ini

 

这样代表云服务器已经启动了

然后在物理服务也安装

 然后解压,同样修改文件名称

然后进入物理服务器编辑frpc.ini文件

[common]
server_addr = 81.51.019.17 #云服务器公网IP地址
server_port = 7000

[web]
type = http
local_port = 8080
custom_domains = 81.51.019.17 #云服务器公网IP地址

 

 然后保存,端口号是7000,要确保云服务器7000、8080端口开启

在物理服务器上输入启动客户端

./frpc -c ./frpc.ini

 然后用在浏览器输入公网的IP:8080即可访问本地服务器内网IP:8080,访问需要在本地服务器搭建环境。可以用docker搭建,或者用宝塔。

下面介绍用本地服务器用宝塔搭建环境,云服务器也有装有宝塔,端口占用问题

本地搭建宝塔用内网访问登录,安装好web环境,用内网IP填入这样的192.168.0.25:8080

(本地绑定的固定IP)

 安装好之后,frp服务器与客户端都跑起来,输入公网ip:8080访问就是本地内网ip:8080的页面

 云服务器上装宝塔ngix会占用80端口,frps监听不到80端口,可以在/www/server/panel/vhost/nginx

 

 这样修改之后,frps就能监听到80端口,建议还是不要修改80端口,可以监听8080,8081等端口。

宝塔本地服务器搭建的项目内网设置了80端口,再想添加一个会出现域名已经存在

 这样我们可以这样填写

创建成功了,把新新起的删除就可以了

开启https访问

服务器端:

[common]
bind_port = 7000
token = 12345678
vhost_http_port = 8080
#开启https
vhost_https_port = 4430

客户端:

[common]
#公网ip
server_addr = 81.71.159.17
server_port = 7000
token = 12345678

[web]
type = http
local_port = 8080
#公网ip
custom_domains = 81.71.159.17

[test_htts2http]
type = https
custom_domains = xy.ixxxy.com
local_port = 4430

plugin = https2http
#本地服务器IP
plugin_local_addr = 192.168.0.25:80

#证书
plugin_crt_path = ./server.crt
plugin_key_path = ./server.key
#本地服务器IP
plugin_host_header_rewrite = 192.168.0.25
plugin_header_X-From-Where = frp

http访问这是绑定的是公网IP。

例如:外网访问端口:81.71.159.17:8080    内网web设置访问端口:192.168.025  

192.168.025 是我的固定IP,相当于本地服务器的127.0.0.1

 证书怎么获取呢?

        可以宝塔申请一个免费的,然后进入宝塔官网下载。

 下载后是这个样子

frp要求的格式是.crt和.key

plugin_crt_path = ./server.crt
plugin_key_path = ./server.key

打开nginx是这样的格式

出现了.pem后缀的,并没有.crt

这时候,把.pem后缀改成.crt后缀的,然后上传到服务器/root/frp目录,然后关闭进程,重启。

我这边把名字的改成server.crt和server.key了

 

 进入域名:4430就可以通过外网访问到

设置开机自动开启服务

云服务器ctrl + c 终止服务器


设置这样的代码,配置这个服务

vi /lib/systemd/system/frps.service

 

[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/root/frp/frps -c /root/frp/frps.ini  

[Install]
WantedBy=multi-user.target

 保存,设置开机,和开机自动开启

#启动服务
systemctl start frps
#设置开机自启
systemctl enable frps

#停止服务
systemctl stop frps
#关闭开机自启
systemctl disable frps

 reboot重启可以查看进程

ps auxw

 客户端配置开机自起

vi /lib/systemd/system/frpc.service
[Unit]
Description=frapc service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/root/frp/frpc -c /root/frp/frpc.ini

[Install]
WantedBy=multi-user.target
#启动服务
systemctl start frpc
#设置开机自启
systemctl enable frpc
#关闭开机自启
systemctl disable frpc

#停止服务
systemctl stop frpc
#服务状态
systemctl status frpc
#刷新服务列表:
systemctl daemon-reload

在后台运行frp服务命令

#启动服务端
./frps -c ./frps.ini
#启动客户端
./frpc -c ./frpc.ini 

#后台进程启动服务端
nohup ./frps -c frps.ini >/dev/null 2>&1 &
#后台进程启动客户端
nohup ./frpc -c frpc.ini >/dev/null 2>&1 &

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐