内网穿透(Linux-windows)-frp

文章目录

  • 内网穿透(Linux-windows)-frp
    • 准备工作
    • 工具下载
    • 服务端 Linux 安装
    • 客户端 windows 安装
    • nginx 配置
    • 安全组、防火墙处理
      • 阿里云安全组放开端口
      • Linux 服务器防火墙打开,并放开端口
    • 遇到问题
    • 参考资料

内网穿透(Linux-windows)-frp

使用背景
公司办公,Git代码都是内网才能访问,有的还是内网域名,远程协助开发时无法访问到内网,仓库管理十分困难。这时通过内网穿透,然后现场客户端通过nginx代理一下git地址,就可以通过自己公网的服务器进行访问现成内网Git了。

目标:访问 http://test.yuming.com:7001 (或http://123.0..0.1:7001)到内网 Git 地址 http://git.test.cn 上

  • 公网服务器IP:123.0.0.1
  • 公网服务器IP域名 test.yuming.com
  • 内网本机IP:192.168.0.1
  • 内网GitLab域名地址:http://git.test.cn

准备工作

  • 需要有一台带域名的公网服务器(我的是阿里云,如下为小编随机写的ip及域名)
    • 公网服务器IP:123.0.0.1
    • 公网服务器IP域名 test.yuming.com
  • frp 服务端、客户端工具
  • nginx

工具下载

  • GitHub下载 frp :https://github.com/fatedier/frp/releases
    内网穿透(Linux-windows)-frp_第1张图片

  • Nginx 下载:http://nginx.org/en/download.html

服务端 Linux 安装

  • 上传到服务器:cd …/home/outside/
  • 解压:tar -zxvf frp_0.34.3_linux_amd64.tar.gz
  • 重命名目录名:mv frp_0.34.3_linux_amd64 frps

    这里主要关注4个文件,分别是frpc、frpc.ini和frps、frps.ini,前者两个文件是客户端所关注文件,后者两个文件是服务端所关注两个文件

  • 配置服务端(公网服务器),首先删掉frpc、frpc.ini两个文件,然后再进行配置 frps.ini
    内网穿透(Linux-windows)-frp_第2张图片
[common]
# 服务器端端口
bind_addr = 0.0.0.0
bind_port = 7000

# 客户端连接凭证,自定义且与客户端一致
privilege_token = mytoken

# 最大连接数
max_pool_count = 5

bind_udp_port = 7031
kcp_bind_port = 7032
# 客户端映射的端口(这个就是公网访问使用的端口http://test.yuming.com:7001 )
vhost_http_port = 7001
vhost_https_port = 44001
subdomain_host = test.yuming.com

# 服务器看板的访问端口
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin

# 日志,如上面截图中的日志记录,方便我们查看日志(后面启动命令我直接加了这个)
enable_prometheus = true
log_file = ./frps.log
log_level = info
log_max_days = 3

  • 启动服务

如果没有权限,先赋权限: chmod a+x frps

1. 常规启动(关闭窗口停用):./frps -c frps.ini
2. 带日志后台挂起:nohup ./frps -c frps.ini & tail -f nohup.out
3. 不带日志后台挂起:nohup ./frps -c frps.ini >/dev/null 2>&1 &
    说明:>/dev/null 2>&1 &,表示丢弃。
4. 也可以设置开启自启动,放到服务器配置文件中,我这里不做自动启动配置,因为用一段就不用了,大家有需要的看我下面参考资料连接有配置示例

内网穿透(Linux-windows)-frp_第3张图片

  • FRP 服务端 Dashboard 监控台
    通过 Dashboard 可以方便的查看 FRP 的状态以及代理统计信息展示,要使用这个功能首先需要在 FRP 服务端配置文件中指定 Dashboard 服务使用的端口,网页访问:http://123.0.0.1:7500/
    内网穿透(Linux-windows)-frp_第4张图片

token 说明
默认情况下只要知道 FRP 服务端开放的端口,任意 FRP 客户端都可以随意在服务端上注册端口映射,这样对于在公网上的 FRP
服务来说显然不太安全。FRP 提供了身份验证机制来提高 FRP 服务端的安全性。要启用这一特性也很简单,只需在 FRP 服务端和 FRP
客户端的 common 配置中启用 token 参数就行。启用这一特性后,只有 FRP 服务端和 FRP 客户端的 common 配置中的 token 参数一致身份验证才会通过,FRP
客户端才能成功在 FRP 服务端注册端口映射。

客户端 windows 安装

[common]
# 公网IP
server_addr = 123.0.0.1
# 与服务端 bind_port 对应
server_port = 7000
# 与服务端一致
privilege_token = mytoken
protocol = tcp
#7033

[web]
type = http
# 内网本及 ip 
local_ip = 192.168.0.1
# 内网要代理的端口,与 nginx 对应,用于监听
local_port = 7001
use_compression = 
use_encryption = 
# 公网域名
custom_domains =test.yuming.com

# 配置可以通过ssh连接到内网的主机,如果需要的话,可以做此配置
[ssh]
# 特权模式,默认需要设置为true
privilege_mode = true
# 代理的类型为tcp
type = tcp
# 设置要代理的本地或局域网内的ip
local_ip = 192.168.0.1
# 设置ssh远程连接的本地端口,默认ssh都为22
local_port = 22
# 远程连接的端口,即使用ssh连接时需要通过此端口进行连接,注意:需要开启云服务器的该端口
remote_port = 6000
  • 启动
  1. cmd 进入到文件存放目录,启动
    ./frpc -c ./frpc.ini
  2. 也可以把命令放到 .bat 文件中,每次双击执行即可
  3. 也可以类似服务端,配置开启自启(我觉得没必要,有需要的百度一下,这里偷懒了)
  4. 我现在用的是0.16版本,是exe文件,也是直接执行的
    内网穿透(Linux-windows)-frp_第5张图片

注意:这里大家可能起不来,无法连接到服务器,仔细检查一下前面的配置是否匹配正确,如果正确还不能用先听一下,先进行下面步骤。

nginx 配置

1、下载后解压即可
2、配置代理,废话少说,上图
内网穿透(Linux-windows)-frp_第6张图片

3、配置完别着急,还得继续往下进行

安全组、防火墙处理

阿里云安全组放开端口

内网穿透(Linux-windows)-frp_第7张图片

Linux 服务器防火墙打开,并放开端口

  • 查看防火墙状态:
    firewall-cmd --state

    如果终端输出running就表示防火墙已经开启了,反之就没有。可以通过查询防火墙的当前状态来确定服务器是否开启了防火墙
    systemctl status firewalld
    输出的信息中,会告诉你是否处于活动状态
    内网穿透(Linux-windows)-frp_第8张图片

  • 启动防火墙
    systemctl start firewalld

  • 查看已经开放的端口
    firewall-cmd --list-ports
    这一步的操作就好比在Windows上的防火墙中新建一个入站规则。

  • 只添加一个单独的端口(示例为7001
    firewall-cmd --zone=public --add-port=7001p --permanent

  • 添加一组连续的端口(示例为82到85)
    firewall-cmd --zone=public --add-port=82-85/tcp --permanent

  • 启动防火墙
    firewall-cmd --reload
    执行这条命令后,会输出success的字样表示已经重启成功了。
    此时在去查看端口的情况 firewall-cmd --list-ports 就可以发现7001端口已经成功添加进去了。

  • 关闭端口与关闭防火墙(扩展)
    firewall-cmd --zone=public --remove-port=81/tcp --permanent
    systemctl stop firewalld.service

  • 浏览器访问 http://test.yuming.com:7001 或 http://123.0…0.1:7001 会直接进到内网 Git 地址 http://git.test.cn 上,成功了!

遇到问题

太忙了,先不写了,以后补

  • 连接失败
    检查服务端、客户端端口地址是否正确
  • 连接间歇性中断
    应该是阿里云服务器是低配版,给限流了,我升级了临时宽带到10M,好了

参考资料

  1. https://www.pianshen.com/article/753386607/
  2. https://www.pianshen.com/article/2061265428/
  3. http://www.kaixinit.com/info/maintenance/1611.html
  4. https://www.cnblogs.com/catcher1994/p/6923744.html?utm_source=itdadao&utm_medium=referral
  5. https://www.cnblogs.com/chywx/p/10939966.html

你可能感兴趣的