内网穿透动态域名解析服务(简称NAT-DDNS),是一种基于动态域名服务(DDNS)和网络地址转换(NAT)的服务器内外网动态映射方法。
帮助用户实现在内网IP地址环境下也能实现动态域名解析服务,使动态IP地址实时与服务器保持交流,绑定固定域名,让上网用户输入特定域名即可访问内网主机,轻松实现用自己的主机架设WEB/FTP/OA/ERP/CRM等服务器,还可实现远程管理、远程存取等功能。
在此非常感谢koolshare的宝大对ngrok进行的二次开发。
脚本是业余爱好,英文属于文盲,写的不好,root帐号登录你的vps执行下面命令:建议先安装screen。
安装命令执行:
wget --no-check-certificate https://github.com/clangcn/ngrok-one-key-install/raw/master/install_ngrok.sh -O ./install_ngrok.sh chmod 500 ./install_ngrok.sh ./install_ngrok.sh install
-------------------------分割线-------------------------
安装脚本源码:
#!/bin/bash
#===============================================================================================
# System Required: CentOS Debian or Ubuntu (32bit/64bit)
# Description: Install Ngrok for CentOS Debian or Ubuntu
# Author: Clang <admin@clangcn.com>
# Intro: https://clang.cn
#===============================================================================================
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
shell_run_start=`date "+%Y-%m-%d %H:%M:%S"` #shell run start time
version="V2.2"
str_ngrok_dir="/usr/local/ngrok"
function fun_clang.cn(){
echo ""
echo "#######################################################################"
echo "# install Ngrok for Debian/Ubuntu/CentOS Linux Server"
echo "# Intro: https://clang.cn/blog/"
echo "#"
echo "# Author: Clang <admin@clangcn.com>"
echo "# version:${version}"
echo "#######################################################################"
echo ""
}
# Check if user is root
function rootness(){
if [[ $EUID -ne 0 ]]; then
fun_clang.cn
echo "Error:This script must be run as root!" 1>&2
exit 1
fi
}
function get_char(){
SAVEDSTTY=`stty -g`
stty -echo
stty cbreak
dd if=/dev/tty bs=1 count=1 2> /dev/null
stty -raw
stty echo
stty $SAVEDSTTY
}
# Check OS
function checkos(){
if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release; then
OS=CentOS
elif grep -Eqi "Debian" /etc/issue || grep -Eq "Debian" /etc/*-release; then
OS=Debian
elif grep -Eqi "Ubuntu" /etc/issue || grep -Eq "Ubuntu" /etc/*-release; then
OS=Ubuntu
else
echo "Not support OS, Please reinstall OS and retry!"
exit 1
fi
}
# Get version
function getversion(){
if [[ -s /etc/redhat-release ]];then
grep -oE "[0-9.]+" /etc/redhat-release
else
grep -oE "[0-9.]+" /etc/issue
fi
}
# CentOS version
function centosversion(){
local code=$1
local version="`getversion`"
local main_ver=${version%%.*}
if [ $main_ver == $code ];then
return 0
else
return 1
fi
}
# Check OS bit
function check_os_bit(){
if [[ `getconf WORD_BIT` = '32' && `getconf LONG_BIT` = '64' ]] ; then
Is_64bit='y'
else
Is_64bit='n'
fi
}
function check_centosversion(){
if centosversion 5; then
echo "Not support CentOS 5.x, please change to CentOS 6,7 or Debian or Ubuntu and try again."
exit 1
fi
}
# Disable selinux
function disable_selinux(){
if [ -s /etc/selinux/config ] && grep 'SELINUX=enforcing' /etc/selinux/config; then
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
fi
}
function fun_set_ngrok_user_env(){
str_single_user=""
echo -e "\033[33mSetting script environment, single-user or multi-user?\033[0m"
read -p "(single-user please input: y,multi-user input N,Default [no]):" str_single_user
case "${str_single_user}" in
y|Y|Yes|YES|yes|yES|yEs|YeS|yeS)
echo "You will set single-user!"
str_single_user="y"
;;
n|N|No|NO|no|nO)
echo "You will set multi-user!"
str_single_user="n"
;;
*)
echo "You will set multi-user!"
str_single_user="n"
esac
fun_set_ngrok_domain
}
function fun_set_ngrok_domain(){
# Set ngrok domain
NGROK_DOMAIN=""
read -p "Please input domain for Ngrok(e.g.:ngrok.clang.cn):" NGROK_DOMAIN
check_input
}
function fun_randstr(){
index=0
strRandomPass=""
for i in {a..z}; do arr[index]=$i; index=`expr ${index} + 1`; done
for i in {A..Z}; do arr[index]=$i; index=`expr ${index} + 1`; done
for i in {0..9}; do arr[index]=$i; index=`expr ${index} + 1`; done
for i in {1..16}; do strRandomPass="$strRandomPass${arr[$RANDOM%$index]}"; done
echo $strRandomPass
}
function fun_set_ngrok_pass(){
# Set ngrok pass
ngrokpass=`fun_randstr`
read -p "Please input password for Ngrok(Default Password: ${ngrokpass}):" ngrok_pass
if [ "${ngrok_pass}" = "" ]; then
ngrok_pass="${ngrokpass}"
fi
}
function check_input(){
# check ngrok domain
if [ "$NGROK_DOMAIN" = "" ]; then
echo -e "Your input is empty,please input again..."
fun_set_ngrok_domain
else
echo -e "Your domain: \033[41;37m "${NGROK_DOMAIN}" \033[0m."
fun_set_ngrok_pass
fi
# check ngrok pass
if [ "$ngrok_pass" = "" ]; then
echo -e "Your input is empty,please input again..."
fun_set_ngrok_pass
else
echo -e "Your ngrok pass: \033[41;37m "${ngrok_pass}" \033[0m."
echo -e "\033[32m \033[05mPress any key to start...or Press Ctrl+c to cancel\033[0m"
char=`get_char`
pre_install
fi
}
function pre_install(){
echo "Install ngrok,please wait..."
echo "============== Install packs =============="
if [ "${OS}" == 'CentOS' ]; then
#yum -y update
yum -y install nano net-tools openssl-devel curl curl-devel psmisc wget
else
apt-get update -y
apt-get install -y wget build-essential mercurial nano curl psmisc openssl libcurl4-openssl-dev
fi
[ ! -d ${str_ngrok_dir}/bin/ ] && mkdir -p ${str_ngrok_dir}/bin/
cd ${str_ngrok_dir}
# Download ngrok file
if [ "${Is_64bit}" == 'y' ] ; then
if [ ! -s ${str_ngrok_dir}/bin/ngrokd ]; then
if ! wget --no-check-certificate https://github.com/clangcn/ngrok-one-key-install/raw/master/ngrokd/ngrokd.x86_64 -O ${str_ngrok_dir}/bin/ngrokd; then
echo "Failed to download ngrokd.x86_64 file!"
exit 1
fi
fi
else
if [ ! -s ${str_ngrok_dir}/bin/ngrokd ]; then
if ! wget --no-check-certificate https://github.com/clangcn/ngrok-one-key-install/raw/master/ngrokd/ngrokd.x86 -O ${str_ngrok_dir}/bin/ngrokd; then
echo "Failed to download ngrokd.x86 file!"
exit 1
fi
fi
fi
if [ -s ${str_ngrok_dir}/bin/ngrokd ]; then
[ ! -x ${str_ngrok_dir}/bin/ngrokd ] && chmod 755 ${str_ngrok_dir}/bin/ngrokd
cd ${str_ngrok_dir}
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
config_runshell_ngrok
clear
fun_clang.cn
echo "Install Ngrok completed! enjoy it."
echo "========================================================================="
echo "On key install Ngrok ${version} for Debian/Ubuntu/CentOS Linux Server"
echo "========================================================================="
echo ""
echo "For more information please visit https://clang.cn/"
echo ""
echo -e "ngrok status manage: \033[45;37m/etc/init.d/ngrokd\033[0m {\033[40;31mstart\033[0m|\033[40;32mstop\033[0m|\033[40;33mrestart\033[0m|\033[40;34mconfig\033[0m|\033[40;35madduser\033[0m|\033[40;36minfo\033[0m}"
echo -e "Your Domain: \033[32m\033[01m${NGROK_DOMAIN}\033[0m"
echo -e "Ngrok password: \033[32m\033[01m${ngrok_pass}\033[0m"
echo -e "http_port: \033[32m\033[01m80\033[0m"
echo -e "https_port: \033[32m\033[01m443\033[0m"
echo -e "remote_port: \033[32m\033[01m4443\033[0m"
echo -e "Config file: \033[32m\033[01m${str_ngrok_dir}/.ngrok_config.sh\033[0m"
echo ""
/etc/init.d/ngrokd start
echo "========================================================================="
exit 0
else
echo ""
echo "Sorry,Failed to install Ngrok!"
echo "You can download /root/ngrok_install.log from your server,and mail ngrok_install.log to me."
exit 1
fi
shell_run_end=`date "+%Y-%m-%d %H:%M:%S"` #shell run end time
time_distance=$(expr $(date +%s -d "$shell_run_end") - $(date +%s -d "$shell_run_start"));
hour_distance=$(expr ${time_distance} / 3600) ;
hour_remainder=$(expr ${time_distance} % 3600) ;
min_distance=$(expr ${hour_remainder} / 60) ;
min_remainder=$(expr ${hour_remainder} % 60) ;
echo -e "Shell run time is \033[32m \033[01m${hour_distance} hour ${min_distance} min ${min_remainder} sec\033[0m"
}
function config_runshell_ngrok(){
if [ "${str_single_user}" == 'y' ] ; then
cat > ${str_ngrok_dir}/.ngrok_config.sh <<EOF
#!/bin/bash
# -------------config START-------------
dns="${NGROK_DOMAIN}"
pass="${ngrok_pass}"
http_port=80
https_port=443
remote_port=4443
srtCRT=server.crt
strKey=server.key
loglevel="INFO"
SingleUser="y"
# -------------config END-------------
EOF
else
cat > ${str_ngrok_dir}/.ngrok_config.sh <<EOF
#!/bin/bash
# -------------config START-------------
dns="${NGROK_DOMAIN}"
pass="${ngrok_pass}"
http_port=80
https_port=443
remote_port=4443
srtCRT=server.crt
strKey=server.key
loglevel="INFO"
SingleUser="n"
# -------------config END-------------
EOF
fi
if ! wget --no-check-certificate https://github.com/clangcn/ngrok-one-key-install/raw/master/ngrokd.init -O /etc/init.d/ngrokd; then
echo "Failed to download ngrokd.init file!"
exit 1
fi
[ ! -x ${str_ngrok_dir}/.ngrok_config.sh ] && chmod 500 ${str_ngrok_dir}/.ngrok_config.sh
[ ! -x /etc/init.d/ngrokd ] && chmod 755 /etc/init.d/ngrokd
if [ "${OS}" == 'CentOS' ]; then
if [ -s /etc/init.d/ngrokd ]; then
chmod +x /etc/init.d/ngrokd
chkconfig --add ngrokd
fi
else
if [ -s /etc/init.d/ngrokd ]; then
chmod +x /etc/init.d/ngrokd
update-rc.d -f ngrokd defaults
sed -i 's/#TMPTIME=.*/TMPTIME=-1/' /etc/default/rcS
sed -i 's/TMPTIME=.*/TMPTIME=-1/' /etc/default/rcS
fi
fi
[ -s /etc/init.d/ngrokd ] && ln -s /etc/init.d/ngrokd /usr/bin/ngrokd
}
function check_nano(){
nano -V
#echo $?
if [[ $? -le 1 ]] ;then
echo " Run nano success"
else
echo " Run nano failed"
if [ "${OS}" == 'CentOS' ]; then
echo " Install centos nano ..."
#yum -y update
yum -y install nano
else
echo " Install debian/ubuntu nano ..."
apt-get update -y
apt-get install -y nano
fi
fi
# if [[ ! -d "$result" ]]; then
# echo "not found"
# else
# echo "found"
# fi
echo $result
}
function check_killall(){
killall -V
#echo $?
if [[ $? -le 1 ]] ;then
echo " Run killall success"
else
echo " Run killall failed"
if [ "${OS}" == 'CentOS' ]; then
echo " Install centos killall ..."
#yum -y update
yum -y install psmisc
else
echo " Install debian/ubuntu killall ..."
apt-get update -y
apt-get install -y psmisc
fi
fi
# if [[ ! -d "$result" ]]; then
# echo "not found"
# else
# echo "found"
# fi
echo $result
}
############################### uninstall function ##################################
function fun_install_ngrok(){
fun_clang.cn
checkos
check_centosversion
check_os_bit
disable_selinux
if [ -s ${str_ngrok_dir}/bin/ngrokd ] && [ -s /etc/init.d/ngrokd ]; then
echo "Ngrok is installed!"
else
fun_set_ngrok_user_env
fi
}
function fun_configure_ngrok(){
check_nano
if [ -s ${str_ngrok_dir}/.ngrok_config.sh ]; then
nano ${str_ngrok_dir}/.ngrok_config.sh
else
echo "Ngrok configuration file not found!"
fi
}
function fun_uninstall_ngrok(){
fun_clang.cn
if [ -s ${str_ngrok_dir}/bin/ngrokd ] && [ -s /etc/init.d/ngrokd ]; then
echo "============== Uninstall Ngrok =============="
save_config="n"
echo -e "\033[33mDo you want to keep the configuration file?\033[0m"
read -p "(if you want please input: y,Default [no]):" save_config
case "${save_config}" in
y|Y|Yes|YES|yes|yES|yEs|YeS|yeS)
echo ""
echo "You will keep the configuration file!"
save_config="y"
;;
n|N|No|NO|no|nO)
echo ""
echo "You will NOT to keep the configuration file!"
save_config="n"
;;
*)
echo ""
echo "will NOT to keep the configuration file!"
save_config="n"
esac
checkos
/etc/init.d/ngrokd stop
if [ "${OS}" == 'CentOS' ]; then
chkconfig --del ngrokd
else
update-rc.d -f ngrokd remove
fi
rm -f /etc/init.d/ngrokd /usr/bin/ngrokd /var/run/ngrok_clang.pid /root/ngrok_install.log /root/ngrok_update.log
if [ "${save_config}" == 'n' ]; then
rm -fr ${str_ngrok_dir}
else
rm -fr ${str_ngrok_dir}/bin/ ${str_ngrok_dir}/ngrok.log ${str_ngrok_dir}/rootCA.* ${str_ngrok_dir}/server.*
fi
echo "Ngrok uninstall success!"
else
echo "Ngrok Not install!"
fi
echo ""
}
function fun_update_ngrok(){
fun_clang.cn
if [ -s ${str_ngrok_dir}/bin/ngrokd ] && [ -s /etc/init.d/ngrokd ]; then
echo "============== Update Ngrok =============="
checkos
check_centosversion
check_os_bit
check_killall
killall ngrokd
[ ! -d ${str_ngrok_dir}/bin/ ] && mkdir -p ${str_ngrok_dir}/bin/
rm -f ${str_ngrok_dir}/bin/ngrokd /etc/init.d/ngrokd /usr/bin/ngrokd /var/run/ngrok_clang.pid /root/ngrok_install.log /root/ngrok_uninstall.log
cd ${str_ngrok_dir}
# Download ngrok file
if [ "${Is_64bit}" == 'y' ] ; then
if [ ! -s ${str_ngrok_dir}/bin/ngrokd ]; then
if ! wget --no-check-certificate https://github.com/clangcn/ngrok-one-key-install/raw/master/ngrokd/ngrokd.x86_64 -O ${str_ngrok_dir}/bin/ngrokd; then
echo "Failed to download ngrokd.x86_64 file!"
exit 1
fi
fi
else
if [ ! -s ${str_ngrok_dir}/bin/ngrokd ]; then
if ! wget --no-check-certificate https://github.com/clangcn/ngrok-one-key-install/raw/master/ngrokd/ngrokd.x86 -O ${str_ngrok_dir}/bin/ngrokd; then
echo "Failed to download ngrokd.x86 file!"
exit 1
fi
fi
fi
[ ! -x ${str_ngrok_dir}/bin/ngrokd ] && chmod 755 ${str_ngrok_dir}/bin/ngrokd
if ! wget --no-check-certificate https://github.com/clangcn/ngrok-one-key-install/raw/master/ngrokd.init -O /etc/init.d/ngrokd; then
echo "Failed to download ngrokd.init file!"
exit 1
fi
[ ! -x /etc/init.d/ngrokd ] && chmod 755 /etc/init.d/ngrokd
if [ "${OS}" == 'CentOS' ]; then
if [ -s /etc/init.d/ngrokd ]; then
chmod +x /etc/init.d/ngrokd
chkconfig --add ngrokd
fi
else
if [ -s /etc/init.d/ngrokd ]; then
chmod +x /etc/init.d/ngrokd
update-rc.d -f ngrokd defaults
fi
fi
clear
/etc/init.d/ngrokd start
echo "Ngrok update success!"
else
echo "Ngrok Not install!"
fi
echo ""
}
clear
rootness
action=$1
[ -z $1 ]
case "$action" in
install)
rm -f /root/ngrok_install.log
fun_install_ngrok 2>&1 | tee /root/ngrok_install.log
;;
config)
fun_configure_ngrok
;;
uninstall)
fun_uninstall_ngrok 2>&1 | tee /root/ngrok_uninstall.log
;;
update)
fun_update_ngrok 2>&1 | tee /root/ngrok_update.log
;;
*)
fun_clang.cn
echo "Arguments error! [${action} ]"
echo "Usage: `basename $0` {install|uninstall|update|config}"
;;
esac
╃苍狼山庄╃