物料需求:
软件:
- 67.0.0
- WinSCP
服务器:
搬瓦工VPS【服务器系统版本centos6 x86】
客户端:
黑群晖【系统X64】
- 文件需求
ngrok.cfg
ngrok14.sh【安装go1.4.2需要】
ngrok.sh
资料整理来源:
#原创新人#搭建ngrok服务器实现内网穿透—黑群晖教程
https://post.smzdm.com/p/588765/
DSM6.2修改ROOT密码并获得权限
https://vipiu.net/archives/2019/04/04/1401.html
linux Vi操作和使用方法详解
https://blog.csdn.net/xie_xiansheng/article/details/78413306
Centos7搭建Ngrok
https://blog.csdn.net/u010887744/article/details/53957683
https://www.cnblogs.com/liutao1122/p/8268932.html
步骤:
- WinSCP上传sh ngrok14.sh 到服务器root文件夹
- PUTTY连线服务器 root登入 使用putty运行脚本安装
2-1提升sh脚本权限:chmod +x ngrok14.sh
2-2运行脚本:sh ./ngrok14.sh
选择安装依赖
2-3运行脚本:sh ./ngrok14.sh
选择安装git
2-4运行脚本:sh ./ngrok14.sh
选择安装go【此次安装的go1.4.2】
2-5 WinSCP连线服务器,把安装好的go【/usr/local/go】备份一个到root下面【root/go1.4.2/】
2-6 提升sh脚本权限:chmod +x ngrok.sh
2-7 运行脚本:sh ./ngrok.sh
选择安装go【此次安装的是go1.9.2】
2-8 WinSCP连线服务器,把安装好的go【/usr/local/go】备份一个到root下面【root/go-go1.9.2/】
3、NGROK安装
3-1返回git的上层目录:cd /usr/local/
3-2 git clone https://github.com/inconshreveable/ngrok.git
#不是所有者使用HTTPS方式或者SSH方式
如果报错: git clone: fatal: Unable to find remote helper for ‘https’
由于 Git configure 配置时没有设定 –with-curl –with-expat 造成
CentOS使用yum安装curl开发相关库后重新配置编译git即可:
命令:yum install libcurl-devel 随后cd到git目录make && make install等等..
3-3 生成自签名证书,
在生成证书时需要一个解析到服务器上的主域名,以”www.hdtvmv.com”为例:
cd ngrok
NGROK_DOMAIN=”www.hdtvmv.com”
openssl 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
将新生成的证书,替换掉assets/client/tls下的证书
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
3-4编译ngrok服务端:
cd到ngrok目录
//指定环境变量位64位linux版本
GOOS=linux GOARCH=amd64 #如果是32位系统,这里GOARCH=386
make release-server
如果报错:-bash: make: command not found
因为安装系统的时候使用的是最小化mini安装,系统没有安装make、vim等常用命令,
直接yum安装即可:yum -y install gcc automake autoconf libtool make
编译会很慢(依赖git),耐心等待
这里会等很久:GOOS=”” GOARCH=”” go get github.com/jteeuwen/go-bindata/go-bindata
提速方案:翻墙or更改hosts(vim /etc/hosts,maybe需要reboot)
如果报错:fatal: unable to access ‘https://github.com/alecthomas/log4go/’
或其他下载失败,多半是由于GFW,重来一次获取就OK了。
正常情况下,在ngrok/bin/下会有ngrokd文件,这就是我们的服务端了。
3-5 编译客户端(go >= 1.6):
cd到ngrok目录
(1)若是客户端使用与服务器相同系统可直接使用 make release-client指令。
(2)若是不同系统,则需要通过go中的make.bash手工编译出跨编译工具。
在$GOROOT/src目录下找到make.bash文件,通过设置GOOS和GOARCH来完成生成跨编译工具:
#linux
make release-client
#windows
GOOS=windows GOARCH=amd64 make release-client
#mac
GOOS=darwin GOARCH=amd64 make release-client
编译客户端ngrok(不同系统不同的命令如下)
32位linux客户端: GOOS=linux GOARCH=386 make release-client
64位linux客户端: GOOS=linux GOARCH=amd64 make release-client
32位windows客户端: GOOS=windows GOARCH=386 make release-client
64位windows客户端: GOOS=windows GOARCH=amd64 make release-client
32位mac平台客户端:GOOS=darwin GOARCH=386 make release-client
64位mac平台客户端:GOOS=darwin GOARCH=amd64 make release-client
ARM平台linux客户端: GOOS=linux GOARCH=arm make release-client
我这里是32位linux和64位linux客户端编译
GOOS=linux GOARCH=amd64 make release-client
正常情况下,在cd usr/local/ngrok/bin/linux_amd64/下,有刚生成的ngrok,下载备用。
3-6服务器启动80,443,服务器默认需要修改为8888,8889【改成你喜欢的也可以】不然要做web网站的话可能没有80端口了
/usr/local/ngrok/bin/ngrokd -domain=”www.hdtvmv.com” -tlsCrt=”/usr/local/ngrok/device.crt” -tlsKey=”/usr/local/ngrok/device.key” -httpAddr=”:8888″ -httpsAddr=”:8889″ -tunnelAddr=”:4443″
测试下服务端是否正常运行
以上服务端和客户端都编译好可以正常运行了,需要服务端开机启动的
vi /etc/rc
末尾exit前新建一行添加
/usr/local/ngrok/bin/ngrokd -domain=”www.hdtvmv.com” -tlsCrt=”/usr/local/ngrok/device.crt” -tlsKey=”/usr/local/ngrok/device.key” -httpAddr=”:8888″ -httpsAddr=”:8889″ -tunnelAddr=”:4443″
reboot后查看进程是否启动成功
3-7客户端调试
客户端需要两个文件,一个是刚刚在vps编译并下载到本地的客户端程序,另一个是ngrok.cfg配置文件(附件带),配置文件的作用是指定穿透什么端口
1、使用root用户登录群晖6.1(不会的自行百度。。我懒 )
2、新建一个ngrok的文件夹:mkdir ngrok
3、使用winscp把本地的ngrok和ngrok.cfg拉到刚刚新建的文件夹中
4、ngrok.cfg文件的配置说明,自行根据需求修改
涂抹处需要填你解析的域名,端口号为默认的4443
我这里穿透了两个端口“nas”和“rtnas”分别是群晖的5000和中继路由(192.168.7.2)的80端口
remote_port为远程端口,即服务器端口
tcp:5000为使用tcp协议,不填IP即为本地nas端口50000
远程访问时,输入你的域名:端口号即可
当然可以用http协议,但是我的域名没有备案,打不开。。。
ps:编写这个cfg文件不可用tab键!不可用tab键!不可用tab键!只能用空格!!!
5、提升ngrok文件夹的权限:chmod 777 -R ngrok
6、开始测试运行
/root/ngrok/ngrok -config /root/ngrok/ngrok.cfg start nas rtnas
ps:这里命令行最后的nas和rtnas和配置文件相同,代表你启动哪些端口
如无意外,显示online即成功
测试下“域名:7777”,顺便测试速度,成功!
7、最后需要客户端开机启动
vi /etc/rc
末尾exit前新建一行添加
/root/ngrok/ngrok -config /root/ngrok/ngrok.cfg start nas rtnas
终~
以上,感谢 sunny大神 的一键脚本
所有附件链接
https://pan.baidu.com/share/init?surl=pLjuNOn
密码: sffp
PS:
域名申请自己百度
域名A记录到服务器IP就好。
贴一张我自己的截图
【图片上不来,就不贴了】
附录
ngrok14.sh
#!/bin/bash
# -*- coding: UTF-8 -*-
#############################################
#作者网名:Sunny #
#作者博客:www.sunnyos.com #
#作者QQ:327388905 #
#作者QQ群:57914191 #
#作者微博:http://weibo.com/2442303192 #
#############################################
# 获取当前脚本执行路径
SELFPATH=$(cd “$(dirname “$0″)”; pwd)
GOOS=`go env | grep GOOS | awk -F\” ‘{print $2}’`
GOARCH=`go env | grep GOARCH | awk -F\” ‘{print $2}’`
echo ‘请输入一个域名’
read DOMAIN
install_yilai(){
yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++ unzip
}
# 安装git
install_git(){
unstall_git
if [ ! -f $SELFPATH/git-2.6.0.tar.gz ];then
wget https://www.kernel.org/pub/software/scm/git/git-2.6.0.tar.gz
fi
tar zxvf git-2.6.0.tar.gz
cd git-2.6.0
./configure –prefix=/usr/local/git
make
make install
ln -s /usr/local/git/bin/* /usr/bin/
rm -rf $SELFPATH/git-2.6.0
}
# 卸载git
unstall_git(){
rm -rf /usr/local/git
rm -rf /usr/local/git/bin/git
rm -rf /usr/local/git/bin/git-cvsserver
rm -rf /usr/local/git/bin/gitk
rm -rf /usr/local/git/bin/git-receive-pack
rm -rf /usr/local/git/bin/git-shell
rm -rf /usr/local/git/bin/git-upload-archive
rm -rf /usr/local/git/bin/git-upload-pack
}
# 安装go
install_go(){
cd $SELFPATH
uninstall_go
# 动态链接库,用于下面的判断条件生效
ldconfig
# 判断操作系统位数下载不同的安装包
if [ $(getconf WORD_BIT) = ’32’ ] && [ $(getconf LONG_BIT) = ’64’ ];then
# 判断文件是否已经存在
if [ ! -f $SELFPATH/go1.4.2.linux-386.tar.gz ];then
wget https://dl.google.com/go/go1.4.2.linux-386.tar.gz –no-check-certificate
fi
tar zxvf go1.4.2.linux-386.tar.gz
else
if [ ! -f $SELFPATH/go1.4.2.linux-386.tar.gz ];then
wget https://dl.google.com/go/go1.4.2.linux-386.tar.gz –no-check-certificate
fi
tar zxvf go1.4.2.linux-386.tar.gz
fi
mv go /usr/local/
ln -s /usr/local/go/bin/* /usr/bin/
}
# 卸载go
uninstall_go(){
rm -rf /usr/local/go
rm -rf /usr/bin/go
rm -rf /usr/bin/godoc
rm -rf /usr/bin/gofmt
}
# 安装ngrok
install_ngrok(){
uninstall_ngrok
cd /usr/local
if [ ! -f /usr/local/ngrok.zip ];then
cd /usr/local/
wget http://www.sunnyos.com/ngrok.zip
fi
unzip ngrok.zip
export GOPATH=/usr/local/ngrok/
export NGROK_DOMAIN=$DOMAIN
cd ngrok
openssl 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 server.key 2048
openssl req -new -key server.key -subj “/CN=$NGROK_DOMAIN” -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
# 替换下载源地址
sed -i ‘s#code.google.com/p/log4go#github.com/keepeye/log4go#’ /usr/local/ngrok/src/ngrok/log/logger.go
cd /usr/local/go/src
GOOS=$GOOS GOARCH=$GOARCH ./make.bash
cd /usr/local/ngrok
GOOS=$GOOS GOARCH=$GOARCH make release-server
/usr/local/ngrok/bin/ngrokd -domain=$NGROK_DOMAIN -httpAddr=”:80″
}
# 卸载ngrok
uninstall_ngrok(){
rm -rf /usr/local/ngrok
}
# 编译客户端
compile_client(){
cd /usr/local/go/src
GOOS=$1 GOARCH=$2 ./make.bash
cd /usr/local/ngrok/
GOOS=$1 GOARCH=$2 make release-client
}
# 生成客户端
client(){
echo “1、Linux 32位”
echo “2、Linux 64位”
echo “3、Windows 32位”
echo “4、Windows 64位”
echo “5、Mac OS 32位”
echo “6、Mac OS 64位”
echo “7、Linux ARM”
read num
case “$num” in
[1] )
compile_client linux 386
;;
[2] )
compile_client linux amd64
;;
[3] )
compile_client windows 386
;;
[4] )
compile_client windows amd64
;;
[5] )
compile_client darwin 386
;;
[6] )
compile_client darwin amd64
;;
[7] )
compile_client linux arm
;;
*) echo “选择错误,退出”;;
esac
}
echo “请输入下面数字进行选择”
echo “#############################################”
echo “#作者网名:Sunny”
echo “#作者博客:www.sunnyos.com”
echo “#作者QQ:327388905”
echo “#作者QQ群:57914191”
echo “#作者微博:http://weibo.com/2442303192”
echo “#############################################”
echo “————————“
echo “1、全新安装”
echo “2、安装依赖”
echo “3、安装git”
echo “4、安装go环境”
echo “5、安装ngrok”
echo “6、生成客户端”
echo “7、卸载”
echo “8、启动服务”
echo “9、查看配置文件”
echo “————————“
read num
case “$num” in
[1] )
install_yilai
install_git
install_go
install_ngrok
;;
[2] )
install_yilai
;;
[3] )
install_git
;;
[4] )
install_go
;;
[5] )
install_ngrok
;;
[6] )
client
;;
[7] )
unstall_git
uninstall_go
uninstall_ngrok
;;
[8] )
echo “输入启动域名”
read domain
echo “启动端口”
read port
/usr/local/ngrok/bin/ngrokd -domain=$domain -httpAddr=”:$port”
;;
[9] )
echo “输入启动域名”
read domain
echo server_addr: ‘”‘$domain:4443′”‘
echo “trust_host_root_certs: false”
;;
*) echo “”;;
esac
ngrok.sh的内容跟ngrok14.sh只是修改了一下go的版本和下载地址而已,用以下代码替换相应内容即可
# 安装go
install_go(){
cd $SELFPATH
uninstall_go
# 动态链接库,用于下面的判断条件生效
ldconfig
# 判断操作系统位数下载不同的安装包
if [ $(getconf WORD_BIT) = ’32’ ] && [ $(getconf LONG_BIT) = ’64’ ];then
# 判断文件是否已经存在
if [ ! -f $SELFPATH/go1.9.2.linux-386.tar.gz ];then
wget https://dl.google.com/go/go1.9.2.linux-386.tar.gz –no-check-certificate
fi
tar zxvf go1.9.2.linux-386.tar.gz
else
if [ ! -f $SELFPATH/go1.9.2.linux-386.tar.gz ];then
wget https://dl.google.com/go/go1.9.2.linux-386.tar.gz –no-check-certificate
fi
tar zxvf go1.9.2.linux-386.tar.gz
fi
mv go /usr/local/
ln -s /usr/local/go/bin/* /usr/bin/
}
ngrok.cfg
server_addr: “www.hdtvmv.com:4443”
trust_host_root_certs: false
tunnels:
nas:
remote_port: 7777
proto:
tcp: 5000
rtnas:
remote_port: 6666
proto:
tcp: 192.168.7.2:80
前阵子搬瓦工IP被qiang了。mark一下以下几个方案和建议



搬瓦工vps的IP被封(3) V2Ray+mKCP部署及V2RayN客户端配置使用教程
https://eveaz.com/1078.html
搬瓦工vps的IP被封(4) Cloudflare+V2Ray+Caddy+WebSocket+TLS
https://eveaz.com/1094.html
搬瓦工VPS /Vtrul国外VPS安装V2Ray 一键搭建命令和优化详细图文教程
https://www.wervps.com/we/2358.html
搬瓦工网址
https://www.bwh88.net/
V2RayN简单使用教程
https://blog.sharkyzh.cn/post/50d46b4d.html
最简单的搬瓦工搭配v 2 ray
https://www.jianshu.com/p/6d7ac1f84836