内网穿透Frp

发布于 2024-05-22  123 次阅读


一、概述
1.1 定义
判别:常规一个公司或一个小区内的所有电脑都处于运行商设计的局域网内,若在百度里输入IP 产生的结果和用命令ipconfig产生的结果不一样,则处于局域网内部
功能:内网穿透技术旨在使内网主机和云服务器的端口产生映射关系,例如访问http://doubi.com:9000,会映射到局域网:http://192.168.1.123:6000

1.2 常规应用

  • 后端自己维护:网站后端重要数据,如数据库等放在本地局域网服务器里
  • 后台登录:将本地的ssh端口(22)、后台端口(根据软件确定)映射到具有公网id的服务器
  • 查看当前内网ip位置
# win10使用:也可通过此命令查看ip网络层级结构
>>> tracert 8.8.8.8
# centos使用:也可通过此命令查看ip网络层级结构
>>> traceroute 8.8.8.8
# 此处为当前PC的网关
 1  gateway (192.168.1.1)  0.291 ms * *
# 还是内网:要是非路由器ip,则为服务提供商给套的内网ip
# 若出家里路由器ip后第一个还是内网ip,则只能用内网穿透进行外网访问
 2  10.200.96.1 (10.200.96.1)  12.666 ms  12.724 ms  12.684 ms
# 同上
 3  10.1.2.13 (10.1.2.13)  9.560 ms  9.519 ms  9.579 ms
 4  * * *
# 同上
 5  10.1.1.121 (10.1.1.121)  9.396 ms  9.344 ms  9.439 ms
# 进入Internet,此为公网ip进行的转发
 6  211.139.0.57 (211.139.0.57)  29.251 ms  4.201 ms  14.723 ms
.......
# 到达谷歌DNS服务器
17  dns.google (8.8.8.8)  40.245 ms  42.933 ms  46.931 ms

二、FRP自有公网服务器

  • 购买了阿里云、腾讯云等服务器的
  • 如果流量小,建议用第三篇方法

2.1 下载软件

  • 下载文件:
# 版本页面
https://github.com/fatedier/frp/releases
# 路由命名规则:download/版本号/frp_版本号_linux_amd64.tar.gz
wget https://github.com/fatedier/frp/releases/download/v0.39.1/frp_0.39.1_linux_amd64.tar.gz

文件目录frp下

2.2 公网服务器设置

[common]
# 公网服务器的通信端口(与内网PC间)
bind_port = 7001				
# 通信密码,最好别用常用密码
token = 1234567890

公网服务器服务文件:systemd文件夹下的frps.service

[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
# 只改下面这一句,注意frps和frps.ini位置
ExecStart=nohup /root/bin/frp/frps -c /root/bin/frp/frps.ini 

[Install]
WantedBy=multi-user.target

启动

  • 前置处理:将frp文件夹拷贝到/root/bin文件夹内,将frps.service放在/lib/systemd/system文件夹内
  • 服务端常用命令
systemctl daemon-reload			# 重新加载服务配置文件
systemctl start frps.service	# 启动服务
systemctl enable frps.service	# 设置开机启动
systemctl status frps.service	# 查看服务启动情况
systemctl stop frps.service     # 关闭服务

内网PC设置

内网PC配置文件:frpc.ini

[common]
# 公网IP地址
server_addr = 12.23.45.67
# 公网端口,需与frps.ini对应
server_port = 7001
# 通信时携带的口令
token = 1234567890

# ssh通信设置:常用于在外网以公网服务器为跳板ssh到内网服务器
# 功能:公网6010端口接收到的请求会转发到内网PC的22端口
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 公网服务器端口:后台(如宝塔)和服务商(如阿里云和腾讯云都有线上防火墙阻挡端口)
remote_port = 6010

# 后台api端口:本地http(80端口)服务和公网服务器6020端口做映射
[api]
type = tcp
local_ip = 127.0.0.1
local_port = 80
# 公网服务器端口:后台(如宝塔)和服务商(如阿里云和腾讯云都有线上防火墙阻挡端口)
remote_port = 6020

# 宝塔面板端口映射
[bt_pannel]
type = tcp
local_ip = 127.0.0.1
local_port = 8888
# 公网服务器端口:后台(如宝塔)和服务商(如阿里云和腾讯云都有线上防火墙阻挡端口)
remote_port = 10004

内网PC服务文件:systemd文件夹下的frpc.service

[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
# 只改下面这一句,关注frpc和frpc.ini位置
ExecStart=nohup /root/bin/frp/frpc -c /root/bin/frp/frpc.ini

[Install]
WantedBy=multi-user.target

启动

  • 前置处理:将frp文件夹拷贝到/root/bin文件夹内,将frpc.service放在/lib/systemd/system文件夹内
  • 客户端常用命令
systemctl daemon-reload			# 重新加载服务配置文件
systemctl start frpc.service	# 启动服务
systemctl enable frpc.service	# 设置开机启动
systemctl status frpc.service	# 查看服务启动情况
systemctl stop frpc.service     # 关闭服务,每次有新增端口都要重新启动下服务

2.4 成果
至此,如果公网ip为12.34.56.78,内网ip为192.168.1.123,公网ip对应的域名为http://doubi.com
则:

ssh访问:http://doubi.com:6010映射为http://192.168.1.123:22
网站接口访问:http://doubi.com:6020映射为http://192.168.1.123:80
网站宝塔后台访问:http://doubi.com:10004映射为http://192.168.1.123:8888

端口开放:

三个访问对应端口防火墙必须放行,腾讯云、阿里云服务器均存在线上防火墙,宝塔面板也有防火墙


作者非常懒惰,一句话我都不想留,除非我想