内网穿透

内网穿透

  • 内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。下面就相互通信的主机在网络中与 NAT 设备的相对位置介绍内网穿透方法。
  • 其实说白了就是让你的局域网/内网可以被公共场合访问。

内网穿透主要功能

  • 在内网环境下的服务器和应用只有在同一个内网环境下才能访问连接,内网穿透可以实现外网对内网的访问连接。
  • 如需要出差在外想要访问在公司内的电脑远程桌面连接,使用内网穿透即可以实现。
  • 网站应用需要外网访问且考虑收录时,使用80网站应用类型的映射方式将内网网站映射到外网直接访问。
  • SVN等443端口https协议应用的使用场景,使用443https应用的应用类型的映射方式将其映射到外网直接访问。
  • 办公OA等不考虑收录的WEB网站应用,使用非80网站的应用类型的映射方式,映射后外网访问带外网端口。
  • 固定端口和UDP等在访问端也适合安装使用客户端的场景,使用全端口映射方式实现外网的访问。
  • 远程桌面、数据库、等其他普通TCP应用外网直接访问场景需求,使用其他非网站映射方式。

FRP 高性能反向代理应用

  • frp 是一个高性能的反向代理应用,支持 tcp, udp, http, https 协议。

frp 的作用

  • 利用处于防火墙后的机器,对外网环境提供 http 或 https 服务。
  • 对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
  • 利用处于防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司局部环境的主机。
  • 开发状态
  • frp 仍然处于前期开发阶段,未经充分测试与验证,官方不推荐用于生产环境 。当然,如果你可容忍其部分的不稳定,可以玩玩。
20210621100122344.png

FRP 安装配置简单使用

  • 原理图
architecture.png

准备测试环境

  • 一台公网linux服务器(39.153.56.3)
  • 一台内网win10服务器
  • 根据自己电脑配置下载对应的FRP
    • frpgithub下载地址
    1a820a9c-d9d0-4123-bf44-e5d2915f9758.png

服务端安装启动

在公网linux服务器搭建FRP服务端

代码语言:javascript
复制
 tar -zxvf frp_0.48.0_linux_amd64.tar.gz  # 解压
 cd frp_0.48.0_linux_amd64/
 rm -rf frpc*                             # 删除客户端软件相关的
 vim frps.ini                             # 修改配置文件

frps.ini

代码语言:javascript
复制
[common]
# 与client通讯的端口
bind_port = 10001
# 验证的token
token = tY7rxYs75XddMbAhwdd
# dashboard的端口
dashboard_port = 6600
# 用户名
dashboard_user = admin
# 密码
dashboard_pwd = 123456
# 日志文件路径
log_file = ./frps.log
# 日志级别
log_level = info

指定配置文件启动

代码语言:javascript
复制
./frps -c frps.ini

客户端安装启动

内网win10服务器搭建FRP客户端

解压、删除多余的服务端程序(文件名称为frps开头的)

配置文件

配置一个mysql映射、一个web服务器映射、一个远程桌面控制

代码语言:javascript
复制
[common]
;公网frp服务器
server_addr = 39.153.56.3
server_port = 10001
token = tY7rxYs75XddMbAhwdd
log_file = ./frpc.log

[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 3306

[webserver]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 80

打开设置--->系统---->远程桌面---->启用远程桌面

[remote]
type = tcp
local_ip = 127.0.0.1

打开win10设置--->系统---->远程桌面---->高级设置--->当前远程桌面端口

local_port = 3389
remote_port = 3389

运行frp客户端

代码语言:javascript
复制
frpc.exe -c frpc.ini

测试

  • 注意 你的公网服务器是否放开了对应端口以及是否有安全组之类的设置。
  • 注意 你的内网/局域网win10电脑启动了mysql数据库,开启了nginx程序的80端口web服务。
  • 注意 远程桌面控制需要你win10电脑开启远程链接限制 打开设置--->系统---->远程桌面---->启用远程桌面
  • 使用公网服务器 ip + port 即可访问到内网/局域网的数据库/http服务以及使用远程桌面。

在win10上以守护进程方式启动frp客户端

  • NSSM 是一个服务封装程序,它可以将普通 exe 程序 或 Java程序 或 Nodejs 项目封装成服务,像 windows 服务一样运行。
  • 支持普通 exe 程序(控制台程序或者带界面的 Windows 程序都可以)
  • 安装简单,修改方便
  • 可以重定向输出(并且支持 Rotation)
  • 可以自动守护封装了的服务,程序挂掉了后可以自动重启
  • 可以自定义环境变量
  • 下载 NSSM 官网下载链接
  • 解压,把 nssm.exe文件放到frpc的根目录
  • 在本文件夹运行 nssm.exe install
nssm-config.png
ce.png