1.下载软件包
wget https://github.com/fatedier/frp/releases/download/v0.32.0/frp_0.32.0_linux_amd64.tar.gz
2.解压
tar zxvf frp_0.32.0_linux_amd64.tar.gz
cd frp_0.32.0_linux_amd64
3.查看服务文件
# frpc.service 客户端服务文件
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini
[Install]
WantedBy=multi-user.target
# frps.service 服务器端服务文件
[root@localhost systemd]# cat frps.service
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
[Install]
WantedBy=multi-user.target
# 把二进制文件移动到服务文件对应的地址,并且提高权限
# 允许绑定1024以下的端口,就这个问题弄了一晚上,卧槽无情
mv frps /usr/bin/
setcap cap_net_bind_service=+eip /usr/bin/frps
# 发现自
# https://cloud.tencent.com/developer/article/1526429
# 里面还有解除权限和端口转发
4.配置服务器端
cat >frps.ini<<EOF
[common]
bind_port=10086 # 与客户端绑定的通信端口
vhost_http_port=80 #访问客户端web服务自定义的端口号
EOF
# 创建服务器端服务文件对应的文件夹,并将修改好的服务文件复制过去
mkdir -p /etc/frp
cp frps.ini /etc/frp
# 将服务器的服务文件移动到linux下专门放服务文件的地方
cp systemd/frps.service /usr/lib/systemd/system
# 启动frp服务,并且设为开机启动
systemctl enable --now frps.service
# 查看端口有没有打开
ss -ntl
LISTEN 0 128 :::10086 :::* users:(("frps",pid=8406,fd=7))
LISTEN 0 128 :::2222 :: users:(("frps",pid=8406,fd=10))
LISTEN 0 128 :::111 :::* users:(("rpcbind",pid=490,fd=11))
LISTEN 0 128 :::80 :::* users:(("frps",pid=8406,fd=8))
5.配置客户端
cat >frpc.ini<<EOF
[common]
server_addr=47.93.200.163 # 公网服务器ip
server_port= 10086 # 与服务器端bind_port一致
# 公网通过ssh访问内部服务器
[ssh]
type=tcp # 连接协议
local_ip=10.0.0.8 # 内网服务器ip
local_port=22 # ssh默认端口号
remote_poet=2222 # 自定义访问内部ssh端口号
# 公网访问内部web服务器以http方式
[web]
type=http # 访问协议
local_port=80 # 内部web服务的端口号
custom_domains=wyjn.icu/IP #所绑定的公网服务器域名
EOF
# 创建服务器端服务文件对应的文件夹,并将修改好的服务文件复制过去
mkdir -p /etc/frp
cp frpc.ini /etc/frp
# 将服务器的服务文件移动到linux下专门放服务文件的地方
cp systemd/frpc.service /usr/lib/systemd/system
# 启动frp服务,并且设为开机启动
systemctl enable --now frpc.service
6.访问
ssh -p 2222 root@47.93.200.163 用内网的root密码
ssh -p 2222 域名
web访问47.93.200.163/域名会访问到内网的机器上
7.脚本化
菜单-函数目录-函数体分离
菜单
[root@iz2ze6e74gz7l00leucekiz script]# cat execution.sh
#!/bin/bash
#
#********************************************************************
#Author: wangjian
#QQ: 3555409634
#Date: 2020-03-15
#FileName: execution.sh
#URL: NOT FOUND
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
. function
PS3="`echo -e "\e[1;32m输入函数序号:\e[0m"`"
select MENU in `awk -F"-" '{print $2}' function.repo|tr "\n" " "`;do
case $REPLY in
$REPLY)
`grep "^$REPLY" function.repo| awk -F"-" '{print $2}'`
;;
esac
done
函数目录
[root@iz2ze6e74gz7l00leucekiz script]# cat function.repo
1-disable_selinux
2-disable_firewall
3-install_frp_server
4-remove_frp_server
5-install_frp_client
6-remove_frp_client
函数体
#!/bash/bin
disable_selinux(){
setenforce 0
echo -e "\e[1;37msetenforce 0\e[0m"
echo -e "\e[1;32m`getenforce`-selinux已临时禁用\e[0m"
sed -i.bak 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
echo -e "\e[1;37msed -i.bak 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config\e[0m"
echo -e "\e[1;32mSElinux配置文件已修改,重新启动后才可生效\e[0m"
}
disable_firewall(){
systemctl disable --now firewalld &> /dev/null
echo -e "\e[1;37msystemctl disable --now firewalld &> /dev/null\e[0m"
echo -e "\e[1;32m防火墙已禁用且开机不会启动\e[0m"
}
install_frp_server(){
wget http://47.93.200.163/ssh/software/frp_0.32.0_linux_amd64.tar.gz
tar zxvf frp_0.32.0_linux_amd64.tar.gz
cd frp_0.32.0_linux_amd64
mv frps /usr/bin/
setcap cap_net_bind_service=+eip /usr/bin/frps
cat >frps.ini<<EOF
[common]
bind_port = 10086
# 与客户端绑定的通信端口
vhost_http_port = 80
#访问客户端web服务自定义的端口号
EOF
mkdir -p /etc/frp
cp frps.ini /etc/frp
cp systemd/frps.service /usr/lib/systemd/system
systemctl enable --now frps.service
cd -
rm -rf frp_0.32.0_linux_amd64.tar.gz frp_0.32.0_linux_amd64
}
remove_frp_server(){
}
install_frp_client(){
wget http://47.93.200.163/ssh/software/frp_0.32.0_linux_amd64.tar.gz
tar zxvf frp_0.32.0_linux_amd64.tar.gz
cd frp_0.32.0_linux_amd64
mv frps /usr/bin/
cat >frpc.ini<<EOF
[common]
server_addr = 47.93.200.163
# 公网服务器ip
server_port = 10086
# 与服务器端bind_port一致
# 公网通过ssh访问内部服务器
[ssh]
type = tcp
# 连接协议
local_ip = 10.0.0.8
# 内网服务器ip
local_port = 22
# ssh默认端口号
remote_port = 2222
# 自定义访问内部ssh端口号
# 公网访问内部web服务器以http方式
[web]
type = http
# 访问协议
local_port = 80
# 内部web服务的端口号
custom_domains = wyjn.icu
#所绑定的公网服务器域名
EOF
mkdir -p /etc/frp
cp frpc.ini /etc/frp
# 将服务器的服务文件移动到linux下专门放服务文件的地方
cp systemd/frpc.service /usr/lib/systemd/system
# 启动frp服务,并且设为开机启动
systemctl enable --now frpc.service
cd -
rm -rf frp_0.32.0_linux_amd64.tar.gz frp_0.32.0_linux_amd64
}
remove_frp_client(){
}
8.有关脚本化的感想
# 不足:模块化没有做
比如,frp内网穿透
类型一:可以做成一个模块
一个模块四个功能
客户端安装卸载
服务端安装卸载
之后做成一个小功能
frp client/server install
frp client/server remove
类型二:把安装和卸载的分类做在一起
install frp client/server
remove frp client/server
# 后期填充-脚本结构
模型1:菜单-模块目录-模块相关函数目录-函数体
模型2:菜单-功能目录-功能模块目录-函数体
# 有关功能模块的几点补充
安装-卸载-修改配置文件
# 有关功能模块目录的几点补充
install frp sever/client
remove frp server/client
update frp server/client
# 个人想法
模型二的耦合性不足,太分散,无法形成有效的工具链
模块一随着软件历史发展,可以再进行耦合,将相同类型的软件再形成一层抽象层
比如:
菜单-功能目录-模块目录-模块相关函数目录-函数体
功能:比如说dns功能,有bind模块。dnsqmax模块???咳咳举个栗子
# 再到后期,可以对功能模块细化,根据业务和资源的不同进行细化
菜单-功能目录-轻量级/重量级-模块目录-模块相关函数目录-函数体
# 最终实现层层调用的同时,便于管理和进行耦合
9.提升脚本化能力
基本的文本处理三剑客要会常见用法
还有命令的调用,变量的调用有些小陷阱
``,"",''的区别和应用
10.常见的脚本化的过程中遇到的错误
1.服务起不来
首先jourxx -xe看日志
根据日志看问题
有的服务不报错,只能看日志,或者systenctl status xxx
或者直接看对应端口有没有开,之后再看日志,开了,基本就ok了ss -nutlp
比如:
端口占用
80端口被占用无法绑定
1024以下的端口普通用户没有权限
端口转发还是提升权限
文件无法读取
文件加读权限或者修改所有者
2.无法通信
访问10.0.0.8的时候,长时间无响应
我开了代理(vpn),走隧道到国外主机再访问再返回值能快嘛
11.这就是今晚的感想了,没想到装一个frp弄出这么多事,还好吧!还有好多服务啊!哈哈哈!赶紧学