ngrok 搭建内网穿透
0. 系统环境
- 腾讯云(带公网 IP)
- centos 7.6
- 参考网址: https://www.vediotalk.com/archives/336
1. 准备安装包
- git-2.9.0.tar.gz
- go1.9.2.linux-amd64.tar.gz
- ngrok: git clone https://github.com/inconshreveable/ngrok.git
go 语言不要太新版的,也不要太旧版的,容易出莫名其妙的问题
git 版本不清楚,尽量是 2.0 以上的吧
2. 域名泛解析
参考: https://www.vediotalk.com/archives/336
3. go 环境搭建
下载对应系统的安装包 go1.9.2.linux-amd64.tar.gz
yum install -y mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz
root 下执行
mkdir $HOME/go
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
echo 'export GOPATH=$HOME/go'>> ~/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
source $HOME/.bashrc
4. git 安装
下载安装包
# 下载编译工具
yum -y groupinstall Development Tools
yum -y install zlib-devel perl-ExtUtils-MakeMaker asciidoc xmlto openssl-develyum install curl-develtar -C /usr/local -zxvf git-2.9.0.tar.gz
cd /usr/local/git-2.9.0
./configure --prefix=/usr/local/git
make && make install
export PATH="/usr/local/git/bin:$PATH"
source /etc/profile
git --version
5. 获取 ngrok 源码
cd /usr/local
git clone https://github.com/inconshreveable/ngrok.git
1. 修改 ~/.bashrc
# ngrok
# 修改为自己解析的域名
export NGROK_DOMAIN="xxx.cn"
export GOPATH="/usr/local/ngrok/"
2. source 一下
source ~/.bashrc
3. 生成自签名 ssl 证书
cd /usr/local/ngrokopenssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000# 查看一下
ls -l
- 多了 6 个证书,少了请重新操作
-rw-r--r-- 1 root root 1679 Dec 30 21:37 rootCA.key
-rw-r--r-- 1 root root 1139 Dec 30 21:37 rootCA.pem
-rw-r--r-- 1 root root 17 Dec 30 21:37 rootCA.srl
-rw-r--r-- 1 root root 1021 Dec 30 21:37 server.crt
-rw-r--r-- 1 root root 911 Dec 30 21:37 server.csr
-rw-r--r-- 1 root root 1679 Dec 30 21:37 server.key
4. 替换证书,询问是否确认替换,全部 yes
cp -rf rootCA.pem assets/client/tls/ngrokroot.crt
cp -rf device.crt assets/server/tls/snakeoil.crt
cp -rf device.key assets/server/tls/snakeoil.key
6. 交叉编译
1. windows 客户端编译
- 首先
cd /usr/local/go/src/
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bashrm -rf /root/go1.4
cp -r /usr/local/go /root/go1.4
- 再然后
cd /usr/local/ngrok
GOOS=windows GOARCH=amd64 make release-server release-client
2. mac 客户端编译
- 首先
cd /usr/local/go/src/
GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 ./make.bash
- 再然后
cd /usr/local/ngrok
GOOS=darwin GOARCH=amd64 make release-server release-client
3. linux 客户端编译
- 首先
cd /usr/local/go/src/
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 ./make.bashrm -rf /root/go1.4
cp -r /usr/local/go /root/go1.4
- 再然后
cd /usr/local/ngrok
GOOS=linux GOARCH=amd64 make release-server release-client
4. arm 客户端编译
- 首先
cd /usr/local/go/src/
GOOS=linux GOARCH=arm CGO_ENABLED=0 ./make.bash
- 再然后
cd /usr/local/ngrok
GOOS=linux GOARCH=arm make release-server release-client
8. ngrokd 服务端启动
- 临时启动
/usr/local/ngrok/bin/linux_amd64_linux/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
- 后台启动
nohup /usr/local/ngrok/bin/linux_amd64_linux/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" > /dev/null &
- 想要结束进程
# 得到 PID
ps -aux | grep ngrokd
# kill PID
kill xxxx
- 说明
(2)参数说明:3 个端口可随意配置(不能和现有服务端口冲突,阿里云服务器需打开对应端口)# -domain 访问 ngrok 是所设置的服务地址生成证书时那个域名
# -httpAddr http 协议端口 默认为 80
# -httpsAddr https 协议端口 默认为 443 (可配置 https 证书)
# -tunnelAddr 通道端口,默认 4443(3)注意:
所有涉及的端口,都需在阿里云(腾讯云)上设置规则,即打开端口
9. ngrok 启动客户端
- 将 ngrok 客户端拷贝到需要穿透的服务器
- 创建 ngrok.cfg 配置文件,只使用 ssh 登录
server_addr: "xxx.cn:4443" # 远程地址,需要修改
trust_host_root_certs: false
tunnels: # 隧道ssh: # 隧道名称remote_port: 503 # 绑定到远程地址的那个端口,需要自己设定proto:tcp: 22 # 本地的 TCP 22端口
- 一个网上的
ngrok.cfg
server_addr: "leon.cn:4443" //注意域名一定要和服务器端一致
trust_host_root_certs: false
tunnels:web:subdomain: leon # 域名前缀 leon.cnremote_port: 9024proto:http: 80 # 本地的 HTTP 80 端口https:subdomain: "ssl"proto:https: 443openvpn:remote_port: 5555 # 映射的端口proto:tcp: 1194ssh:remote_port: 2222proto:tcp: 22
- 临时启动
./ngrok -config=ngrok.cfg start http #启动 web 服务
./ngrok -config=ngrok.cfg start tcp #启动 tcp 服务
./ngrok -config=ngrok.cfg start http tcp #同时启动两个服务
./ngrok -config=ngrok.cfg start ssh #同时启动 shh
./ngrok -config=ngrok.cfg start-all #启动所有服务
- 后台启动
setsid ./ngrok -config=ngrok.cfg start-all
- 重启脚本
#/bin/sh# set -x# 检查 ngrokd 是否关闭
# 若关闭,重启服务for ((;;))
do# 显示时间date "+%Y-%m-%d %H:%M:%S"# 查找 ngrokd 的 PIDpidlist=`ps -ef | grep "/usr/local/ngrok/bin/linux_amd64_linux/ngrokd" | grep -v "grep" | awk '{print $2}'` if [ "$pidlist" = "" ] # 如果不存在then echo "no ngrokd pid alive!"# 重启命令`nohup /usr/local/ngrok/bin/linux_amd64_linux/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" > /dev/null 2>&1 &` ; ls > /dev/nullwaitelse echo -e "ngrokd pid list : $pidlist \n"wait fi echo -e "\n\n\n"# 休眠五分钟sleep 300
doneecho "shell stop!!!!!, "
- 运行
nohup sh restart_ngrokd.sh > restart.log &
ngrok 搭建内网穿透相关推荐
- CentOS7下使用ngrok搭建内网穿透服务器
目录 1.简介 1 2. 必要条件 2 2.1.ngrok服务器 2 2.2.域名 2 2.3.ngrok客户端 2 3. 安装依赖包 2 4. 安装golang 2 5. 下载ngrok源码 3 6 ...
- 云服务器+ngrok搭建内网穿透服务(只有公网ip无域名)
有的时候在项目开发或者远程开发时,需要把本地端口映射到公网上,让本地端口可以远程访问(TCP(ssh), http, https等),如果自己没有一台拥有公网ip的服务器的话可以租一台阿里云服务器或者 ...
- Ngrok: 使用 Ngrok 实现内网穿透
Jan 10,2017 in 教程 read (14235) | 百度已收录 | Author: Leonn 目录 背景 NAT 穿透原理 一个栗子 Ngrok 准备工作 编译服务端 服务端 测试连接 ...
- 手把手教你,搭建内网穿透服务
我的 GitHub 仓库:? 手把手教你搭建内网穿透服务,基于 lanproxy 穿透服务,为你深度定制了开箱即用的服务端和客户端 Docker 镜像. 在很多场景下内网穿透都是我们常常遇到的需求,之 ...
- 搭建内网穿透服务一步一步讲解教程
我的 GitHub 仓库:? 手把手教你搭建内网穿透服务,基于 lanproxy 穿透服务,为你深度定制了开箱即用的服务端和客户端 Docker 镜像. 在很多场景下内网穿透都是我们常常遇到的需求,之 ...
- 使用工具ngrok 实现内网穿透(免费)
使用工具ngrok 实现内网穿透 工具下载:ngrok下载,提取码:5555 使用:
- Frps搭建内网穿透(服务器及客户端详细)
目的:通过云服务器搭建内网穿透,实现外网访问内部应用或者服务(不限操作系统,服务器只需一个,客户端可以多个). 所需资源:阿里/百度/腾讯云服务器 有外网IP即可 软件下载(包含Windows.Liu ...
- FRP搭建内网穿透(亲测有效)
FRP搭建内网穿透 1.概述: frp可以通过有公网IP的的服务器将内网的主机暴露给互联网,从而实现通过外网能直接访问到内网主机:frp有服务端和客户端,服务端需要装在有公网ip的服务器上,客户端装在 ...
- Ngrok(内网穿透工具)使用教程详解
简介 国内Ngrok官网地址 Ngrok是什么? ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道 ngrok 可捕获和分析所有通道上的流量,便于后期分析 ...
最新文章
- python 安装nameerror_python NameError:name’file’未定义
- jsp页面发生异常跳转到友好页面
- 保持生长不焦虑,非科班程序媛的进击
- Spring Boot 的starter pom
- 利用matlab求图像均值和方差的几种方法
- 数学猜想验证步骤_10大仍未解开的数学难题
- idea用svn怎么检出项目_IDEA 从SVN检出项目相关配置
- 路由器连接校园网(多个账号,单个账号)
- 通过3dmax将max文件导出为unity3d可用的带贴图的fbx文件
- 运筹学上的lingo小练习——秒懂
- mysql 查询存储过程 速度_查询mysql过程
- JGG | 中国中医科学院仝小林团队/李敏团队和长春中医药大学王泽玉团队合作综述调控肠干细胞代谢活动的关键因素...
- 原生Android设置sim卡锁定,开启SIM卡密码保护
- coap协议学习之搭建coap测试环境
- ClickHouse学习教程
- 山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验
- 安卓模拟器右边的虚拟键盘消失了,怎样调出来
- [知识竞赛策划方案]那么如何用PPT制作知识竞赛所需要的题库?
- 数据库的三级模式:外模式、模式和内模式
- AGX硬盘无法识别:error mounting /dev/sda1 at /media/nvidia/T7:unknow filesystem type ‘exfat‘