内网穿透的需求背景
我们需要通过外网访问内网服务时,由于内网没有对应的外网IP无法暴露服务,这时候需要搭建一个外网与内网互通的桥梁,使得我们可以访问内网的服务,这个桥梁我们可以称呼它为“内网穿透”。
内网穿透的技术可选方案
目前内网穿透可选的技术实现方案有 Frp,Ngrok,Natapp,Spike,花生壳,Zerotier。
其实现原理大同小异,核心就是构建一座“桥梁”。
每种技术具体的实现原理在每个穿透技术实现上再讨论。
今天着重探讨一下Frp 的搭建与使用。
Frp 介绍
- frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
- frp 官网
- frp Git
- frp 客服端与服务端下载
Frp原理及流程图
Frp 搭建准备
- 准备至少两台服务器 系统为centos7.9(这就使用虚拟机模拟)
- 192.168.100.190 作为 frps【模拟外网服务器】
- 192.168.100. 191 作为 frpc
想要达到的效果是通过 190 登录 191 的ssh.
-
分别在190,191 上执行
mkdir /opt/softs && cd /opt/softs -
分别在190,191 上执行
wget https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_386.tar.gz
这一步如果出现 -bash: wget: command not found 异常 则先执行
yum install -y wget
再执行一次
wget https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_386.tar.gz
3. 分别在190,191 上执行
tar -xvf frp_0.45.0_linux_386.tar.gz && cd frp_0.45.0_linux_386
4. 执行 ll 命令 我们会看到如下目录
5. 在190【外网服务器】上把 frps.ini 替换成如下配置
[common]
# 当前frp服务器接受数据的IP 默认 0.0.0.0 接受服务器所有网卡IP数据
bind_addr=0.0.0.0
# 服务端与客服端通信端口 默认 7000
bind_port = 5000
# frp 管理控制台
dashboard_addr = 0.0.0.0
dashboard_user = root
dashboard_pwd = 123456
dashboard_port = 5500
# 转发的服务端口
vhost_ssh_port = 2222
# 转发多个端口
vhost_tcp_port01 = 80
vhost_tcp_port02 = 443
# 心跳连接 必须有 单位秒 服务端与客服端都需要加,保持连接稳定
heartbeat_timeout = 30
# 日志保存时间
log_max_days = 365
#端口白名单,为了防止端口被滥用,可以手动指定允许哪些端口被使用
privilege_allow_ports = 1-6000
# token是frps与frpc通信凭证 如果frps配置了则frpc一定需要配置且与frps保持一致[可不配置]
token = tokensecret
6. 执行 ./frps -c frps.ini & 如果看到下图信息表示服务端已经启动成功
如果想要后台运行执行如下命令
nohup frps -c frps.ini >> frps.log 2>&1 &
在浏览器中输入 http://192.168.100.190:5500/ 可查看frps配置及其连接情况
ps: 如果访问不了 查看一下 防火墙是否开启
systemctl status firewalld
如果防火墙状态为 Active: active (running) 执行如下命令关闭防火墙再访问。
systemctl stop firewalld && systemctl disable firewalld
7.在191上 配置frpc.ini
[common]
# frp 服务器的公网IP地址
server_addr = 192.168.100.190
# frp服务器的通信端口[与服务端配置要保持一致] 默认 7000
server_port = 5000
# token是frps与frpc通信凭证 如果frps配置了则frpc一定需要配置且与frps保持一致
token = tokensecret
# ssh 只是一个标识符号 可随意更改
[ssh]
# 协议类型
type = tcp
# 客服端内网IP地址 最好不要用127.0.0.1
local_ip = 192.168.100.191
#设置要访问到内部的这个服务时,需要访问的外部域名,
#可以设置为IP,不能和其他穿透服务重复,如果有多个穿透服务建议用域名
#域名可以设置二级域名,这样就可以建多个穿透服务了
# custom_domains = xx.yourdomain.com
# 需要转发的客服端端口
local_port = 22
# 映射到公网端口
remote_port = 2222
# 心跳连接 必须有 单位秒 服务端与客服端都需要加,保持连接稳定
heartbeat_timeout = 30
8. 执行 ./frpc -c frpc.ini & 命令,如果看到如下图结果表示启动成功
如果想要关闭窗口后服务还在运行则需要执行 nohup frpc -c frpc.ini >> frpc.log 2>&1 &
9 . 通过ssh命令 或者xshell 访问191服务器
后记
文章写的有点啰嗦混乱。当你点开文章时希望对你有点帮助。有建议亦可留言探讨。