FRP局域网穿透+linux自动监控服务运行
需求:需要将demo 在外网上进行展示.有两台服务器:服务器A(外网服务器,有公网IP,有域名),服务器B(内网服务器,无公网IP,通过wifi链接路由器上网,无域名).其中服务器A性能差(qiong),服务器B性能还行(E3, 24G,GTX1070),希望能够从外网访问家里的服务器,包括http访问和ssh访问.
难点:小区宽带,外网IP不能直接访问,不能设置DMZ主机
解决方案:用FRP来配置服务器A和服务器B,实现用域名访问两个服务器,搭建复杂一点的Demo.
关键技术:1.FRP安装配置,2. linux下配置FRP服务,3.linux下用shell脚本实时监控FRP服务运行,重启后也能自动链接上.
FRP安装配置
安装
去github上面下载最新的release, 本文用的是v0.23.1.
wget https://github.com/fatedier/frp/releases/download/v0.23.1/frp_0.23.1_linux_amd64.tar.gz
然后解压
tar zxvf frp_0.23.1_linux_amd64.tar.gz
得到一个文件夹
imagefrps 是服务器端程序 frps.ini是服务器端配置 (放到有外网的服务器上)
frpc 是客户端程序 frpc.ini是客户端配置(放到内网服务器上)
配置
frps.ini
[common]
bind_port = 7000
frpc.ini
配置ssh登录以及两个网站
[common]
server_addr = xxx.xxx.xxx.xx
server_port = 7000
[ssh]
type = tcp #tcp类型链接
local_ip = 127.0.0.1 #本地ip
local_port = 22 #本地端口
remote_port = xxx #外网访问端口
[web1]
type = tcp
local_port = xxxx
remote_port = xxxx
custom_domains = localhost
[web2]
type = tcp
local_port = xxx
remote_port = xxxx
custom_domains = localhost
后台运行
推荐使用systemctl来管理,比较方便
服务器端配置如下
sudo vim /lib/systemd/system/frps.service
在frps.service里写入以下内容
[Unit]
Description=fraps service
After=network.target
syslog.target Wants=network.target
[Service]
Type=simple #启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/your/path/frps -c /your/path/frps.ini [Install]
WantedBy=multi-user.target
客户端配置也很类似,到这里,可以通过systemctl start frps[frpc]
启动服务了
通过 ssh 外网IP@remote_port可以ssh登录内网服务器了
同理, 对应的外网IP@remote_port 可以访问web1 和web2
但是,如果机器重启了,还需要手动运行这些服务,比较麻烦,而且如果网络中断,可能服务就挂了,需要手动重启服务.如果能够实时监控服务运行状况,而且服务挂了自动运行,就完美了.
监控服务
服务器端监控frps
#!/bin/sh
ps -fe|grep frps |grep -v grep
if [ $? -ne 0 ]
then
echo "start process....."
systemctl start frps
else
echo "runing....."
fi
frps 表示进程特征字符串,能够查询到唯一进程的特征字符串(客户端用frpc代替就可以了)
$?表示上一个脚本运行的返回值
-ne 0 不等于0 表示没有查询到结果
-eq 0 等于0 表示查询到结果
定时监控
每一分钟运行脚本
sudo crontab -e
做如下修改
*/1 * * * * sh /your/path/filename.sh
客户端也要做相应处理,到此,完美解决了这个问题.再也不用担心我的内网穿透问题了.
参考文献:
frp-github: https://github.com/fatedier/frp
frp 后台运行: https://blog.csdn.net/x7418520/article/details/81077652
监控脚本: https://www.cnblogs.com/anitinaj/p/7457000.html
shell中$?含义: https://www.cnblogs.com/chjbbs/p/6393935.html
linux 定时任务: https://blog.csdn.net/gb4215287/article/details/79496390
网友评论