存档2019年12月16日

FRP

FRP 项目地址:https://github.com/fatedier/frp
https://www.cnblogs.com/sanduzxcvbnm/p/8508741.html

一键安装脚本项目地址:https://github.com/clangcn/onekey-install-shell/

下载一键部署脚本
$ wget –no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh

$ chmod 700 ./install-frps.sh 授权
这个一键部署脚本比较好用,为了提高国内用户下载安装包速度还提供了阿里云节点的安装源。整个脚本使用起来也比较简单,对一些常用的 FRP 服务端配置参数都做了交互式选择让用户可以方便的根据自己实际情况进行选择。脚本比较贴心的一点是对默认的公网地址进行了检测,省去了手动输入的麻烦。

install-frps.sh {install|uninstall|update|config}
配置 FRP $ ./install-frps.sh config
更新 FRP 服务端$ ./install-frps.sh update
卸载 FRP 服务端$ ./install-frps.sh uninstall

FRP 服务端安装完成后,一键部署脚本还提供了一个日常管理 FRP 服务端的管理脚本来进行日常的启动、重启、停止等操作,非常的方便。
frps status manage : frps {start|stop|restart|status|config|version}
新版可以直接使用不用以下配制

Usage: /etc/init.d/frps {start|stop|restart|status|config|version}

手动安装后配制成为服务启动 /etc/systemd/system# vi frps.service

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

[Service]
Type=simple
# User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
# /root/frp_0.20.0_linux_amd64
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

#启动 frp 并设置开机启动
systemctl enable frpc
systemctl start frpc
systemctl status frpc

===

客户端下载 https://diannaobos.com/frp/
nohup ./frpc -c ./frpc.ini & 启用
jobs -l
ps -aux|grep frpc

2、修改配置文件    frpc.ini

[common]
server_addr = xxx.com
server_port = 5443

### console or real logFile path like ./frpc.log
log_file = ./frpc.log

### trace, debug, info, warn, error
log_level = info
log_max_days = 3

### for authentication
token = yourToken

### your proxy name will be changed to {user}.{proxy}
user = ser28

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 822

[http]
type = http
local_ip = 127.0.0.1
local_port = 80
subdomain = web28

[https]
type = https
local_ip = 127.0.0.1
local_port = 443
subdomain = web28

注意:访问服务端的80端口就相当于访问你本地的8080端口

3、启动

windows cmd里边进入frp客户端相应目录,启动frps.exe or frps.exe -c frpc.ini
注意保持与服务器版本一致和token的变化
# 0.17.0以前的版本 #privilege_token = yourToken
# 0.17.0以后的版本 token = yourToken
开启子域名,先设置*.xxx.com的解析,在frps.ini增加以下

subdomain_host = xxx.com

搭建ngrok服务器

apt-get install build-essential golang mercurial git     安装git 和Golang

git clone https://github.com/tutumcloud/ngrok.git ngrok

生成签名或申请SSL证书

cd ngrok

NGROK_DOMAIN=”ngrok.xxx.com”

openssl genrsa -out base.key 2048

openssl req -new -x509 -nodes -key base.key -days 10000 -subj “/CN=$NGROK_DOMAIN” -out base.pem

openssl genrsa -out server.key 2048

openssl req -new -key server.key -subj “/CN=$NGROK_DOMAIN” -out server.csr

openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

替换证书

cp base.pem assets/client/tls/ngrokroot.crt  

cp server.crt assets/server/tls/snakeoil.crt

cp server.key assets/server/tls/snakeoil.key

编译

make release-server release-client

编译成功后会在bin目录下找到ngrokd和ngrok这两个文件。其中ngrokd 就是服务端程序。

启动服务端

./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain=“ngrok.xxx.com” -httpAddr=“:880” -httpsAddr=“:8443”

httpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,可以随意指定。ngrokd 还会开一个 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=”:xxx” 指定)。

服务端配置

设置为系统程序,并后台运行,在/etc/systemd/system/目录下创建服务ngrok.service,内容为

[Unit]
Description=ngrok server
After=network.target

[Service]

Type=simple
ExecStart=/opt/ngrok/ngrok/bin/ngrokd -tlsKey=/myweb/ngrok/server.key -tlsCrt=/myweb/ngrok/server.crt -domain=”ngrok.xxx.com” -httpAddr=”:80″ -httpsAddr=”:443″ -log "/var/log/ngrokd.log"

Restart=on-failure

[Install]
WantedBy=multi-user.target

systemctl start ngrok.service启动服务

使用服务

sudo systemctl enable ngrokd
sudo systemctl start ngrokd
sudo systemctl status ngrokd

编译客户端

(1)windows

GOOS=windows GOARCH=amd64 make release-client

(2)mac

GOOS=darwin GOARCH=amd64 make release-client

#linux客户端
GOOS=linux GOARCH=amd64(386) make release-client
#linux服务端
GOOS=linux GOARCH=386 make release-server

客户端配置

执行对应的命令会在bin目录下生成相对应的windows、mac目录,ngrok.exe就存放在对应目录下。将对应的ngrok.exe下载到本地。

在同级目录下新建一个配置文件ngrok.cfg

server_addr: “ngrok.xxx.com:4443”

trust_host_root_certs: false

同级目录下新建一个启动脚本startup.bat

@echo on

cd %cd%

#ngrok -proto=tcp 22

#ngrok start web

ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=yjc 8080

 

客户端服务添加到 systemd 自启动服务中,保存下面内容到文件 /lib/systemd/system/ngrok.service

[Unit]
Description=ngrok client
After=network.target

[Service]
Type=simple
ExecStart=/opt/ngrok/ngrok -config "/opt/ngrok/ngrok.yml" -log "/var/log/ngrok.log" start transmission ssh
Restart=on-failure

[Install]
WantedBy=multi-user.target

ExecStart 加载了配置文件 /opt/ngrok/ngrok.ym
server_addr: ngrok.xxx.com:4443
trust_host_root_certs: false
tunnels:
  transmission:
    remote_port: 9091
    proto:
      tcp: 9091
  ssh:
    remote_port: 23333
    proto:
      tcp: 22

FYI:

Can’t load /root/.rnd into RNG

cd /root
openssl rand -writerand .rnd

ping ngrok.xxx.com 提示找不到 host, 直接把域名和 IP 写到内服务器的 /etc/hosts 文件上