image.png

Holer是一个将局域网中的应用映射到公网访问的端口映射软件,支持转发基于TCP协议的报文。

Holer支持以下两种使用方式,根据实际需求,任选其中一种方式即可:

方式一:

使用公开的holer映射或者开通holer服务,通过holer客户端软件经holer服务器实现公网访问。

方式二:

使用holer服务端软件搭建holer服务,通过holer客户端软件经自己服务器实现公网访问。

Holer客户端软件有Java版本和Go版本,根据偏好,任选其中一种版本使用即可。

关于holer更多的使用示例请参考官方文档资料

Github地址:https://github.com/Wisdom-Projects/holer

## centos搭建教程:

本教程基于宝塔面板,NGINX1.6、MySQL5.7 为基础进行安装。

1.首先下载 holer-server.zip Holer服务端程序。
搭建Holer服务端准备工作

**(1) 准备一台Linux系统或者Windows系统主机,实现公网访问则需要公网IP支持;

(2) 安装Java 1.8及以上版本,执行命令 java -version 检查Java是否可用;

(3) 安装并启动Nginx, 建议安装其稳定版本;

(4) 设置安全规则,允许访问Holer服务端端口6060、600以及端口映射规则所涉及的端口;

(5) 建议申请域名并且完成域名备案,并设置域名泛解析(.域名)和直接解析主域名(@.域名),如果没有域名可以直接使用IP和端口访问。*

2.安装宝塔面板,安装NGIX、安装MySQL、宝塔面板添加数据库。

安装宝塔命令:

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

安装成功后按照控制台提示的地址和端口配置宝塔面板,在面板内的软件商店安装NGINX1.X 、mySQL5.7.

安装完毕后,点击数据库添加一个 holer数据库,用户名、密码自定。

DN<code>AWU_R</code>IXGV9OHTKL.png

安装java

sudo yum update -y
sudo yum install java-1.8.0-openjdk -y
3.上传服务端文件致服务器并解压。

打开配置文件 holer-server/resources/application.yaml 编辑相关配置

server:
  port: 600  #web管理面板的端口
  use-forward-headers: true
  servlet:
    session:
      timeout: 86400s
spring:
  datasource:
    username: holer     #数据库用户名
    password: ********  #密码
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/holer? #holer为数据库名
 createDatabaseIfNotExist=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
    platform: mysql
    #schema: classpath:conf/holer-schema.sql
    data: classpath:conf/holer-data.sql
    initialization-mode: always
    continue-on-error: false
    sql-script-encoding: utf-8
    separator: ;
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: false
    open-in-view: false
logging:
  level:
    root: error
    org.holer: warn
holer:
  server:
    host: 0.0.0.0 #保持0.0.0.0不动
    port: 6060
  sslserver:
    enable: true
    host: 0.0.0.0 #保持0.0.0.0不动
    port: 6443
  domain:
    name: nps.gebilaoyu.club #实测这里可以填你的面板域名或者ip,对最终是否使用域名访问内网服务没有影响。这里我配置的是访问面板的域名
  nginx:
    home: /www/server/nginx   #如果希望内网穿透后可以使用域名访问内网服务,则配置NGINX路径
    #home: C:/nginx
  license:
    serialno: 
4.在服务器安全组、宝塔面板安全中放行相关端口

其中 600 6443 6060 必须放行,因为我映射使用的是9090 所以额外放行了9090端口。

5.启动nps服务

大部分服务器可能需要安装一下go,centos7使用此命名一键安装

yum -y install golang
cd ****/holer-server/bin/  #解压后的holer服务端文件夹,以实际解压为准
chmod 755 holer
./nps install

执行以上命令后holer安装完毕,以后可以在此目录使用以下命令
holer stop 停止服务
holer restart 重启服务
holer start 开启服务

6.配置面板访问域名和外网访问域名
如果使用ip加端口的方式使用,可以略过这一步。

1.首先配置域名映射到服务器ip
2.nginx中进行如下配置

 #holer内网穿透面板
    server {
                listen 80 ;
                listen 443 ssl;
                server_name nps.gebilaoyu.club;   
                ssl_certificate "/cert/4521646_nps.gebilaoyu.club.pem";   
                ssl_certificate_key "/cert/4521646_nps.gebilaoyu.club.key";
                ssl_protocols TLSv1.1 TLSv1.2;
                ssl_prefer_server_ciphers on;
                ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
                add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
                location / {
                            proxy_pass http://127.0.0.1:600;
                            proxy_set_header X-Real-IP $remote_addr;
                            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                            proxy_set_header Host $http_host;
                            proxy_set_header X-NginX-Proxy true;
                            proxy_redirect default;
        }
    }

        #https端口穿透域名
    server {
                listen 80 ;
                listen 443 ssl;
                server_name frp.gebilaoyu.club;   
                ssl_certificate "/cert/4064279_frp.gebilaoyu.club.pem"; 
                ssl_certificate_key "/cert/4064279_frp.gebilaoyu.club.key";
                ssl_protocols TLSv1.1 TLSv1.2;
                ssl_prefer_server_ciphers on;
                ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
                add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
                location / {
                            proxy_pass http://127.0.0.1:9090;
                            proxy_set_header X-Real-IP $remote_addr;
                            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                            proxy_set_header Host $http_host;
                            proxy_set_header X-NginX-Proxy true;
                            proxy_redirect default;
        }

    }

以上配置主要是支持https访问,并配置了ssl证书,将nps.gebilaoyu.club的访问转发至600端口服务(npsWEB面板),将frp.gebilaoyu.club的访问转发至9090端口(穿透的外网端口地址,后面我会在面板中配置)

7.访问面板配置用户和端口映射

如果配置文件application.yaml中设置了域名,并且指定了Nginx主目录,则在浏览器输入URL https://holer.your-domain.com 如果没有设置域名访问,则通过IP和端口登录系统 http://IP地址:600

image.png

登录系统需要输入默认的管理员账号,默认用户名: admin 密码: admin123

用户也可以在文件holer-server/resources/conf/holer-data.sql中修改默认的用户名和密码,然后重启Holer服务端使其生效

在用户列表页面中创建一个Holer客户端

image.png

在端口映射页面中为该Holer客户端创建端口映射

image.png

配置Holer客户端使其与Holer服务端实现端口映射功能
在用户列表页面中选中一条客户端记录,在页面右上角点击详情按钮,弹出的详情框下点击复制按钮;
image.png

然后将详情信息粘贴到记事本里,严格按照详情信息里的使用说明进行操作,这样即可完成Holer客户端配置,从而实现基于自己Holer服务端的端口映射功能。