需要內網域名一個,服務器一臺,我的服務器是阿里雲國內的,域名也是在阿里雲買的,在測試後需要備案,後面我換了一個備案域名就可以訪問了。
安裝git, golang和openssl
yum install -y git golang openssl
使用git下載項目
git clone https://github.com/inconshreveable/ngrok.git /usr/local/ngrok
#進入到ngrok目錄生成證書
域名解析
需要解析域名到服務器,測試域名能訪問服務器後進行下面操作。
#準備一個獨立域名,備好案的,替換下面的axiba.xyz域名
cd /usr/local/ngrok
# 下面的命令用於生成證書
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=axiba.xyz" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=axiba.xyz" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
# 將我們生成的證書替換ngrok默認的證書,會提示覆蓋,輸入y
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
編譯服務端與客戶端
#64位的linux服務端
GOOS=linux GOARCH=amd64 make release-server
#64位的windos客戶端
GOOS=windows GOARCH=amd64 make release-client
編譯後的服務端與客戶端在ngrok/bin目錄下
第一個目錄下面的ngrokd是服務端,第二個目錄下的需要拷貝ngrok.exe到windos平臺,可以使用winScp和Xftp等工具。
啓動服務端
./bin/ngrokd -domain="axiba.xyz"
如下圖就啓動成功
然後我們需要在防火牆中運行這幾個端口通過,或者關閉防火牆,然後還需要在服務器對應的雲平臺設置安全組,允許這幾個端口通過
然後在需要代理的windos平臺吧剛纔那個exe文件下載下來,然後在同級目錄下新建ngrok.cfg與start.bat
ngrok的內容
server_addr: "axiba.xyz:4443"
trust_host_root_certs: false
start.bat的內容
ngrok.exe -subdomain=wx -config=ngrok.cfg 80
wx 是本地自定義下級域名,80是代理的端口
編輯好後點擊start.bat
顯示成功,第一訪問的時候可能比較慢,請耐心。
設置開機自動啓動
進入指定目錄下
cd /etc/systemd/system/
新建文件
touch ngrok.service
編輯文件
vim ngrok.service
cription=ngrok
After=network.target
[Service]
ExecStart=/usr/local/ngrok/bin/ngrokd -domain=axiba.com
[Install]
WantedBy=multi-user.target
加入開機啓動
systemctl enable ngrok.service //加入開機啓動
systemctl daemon-reload //重新載入 systemd,掃描新的或有變動的單元
reboot //重啓系統
其他代碼
systemctl 是管制服務的主要工具, 它整合了chkconfig 與 service功能於一體。
systemctl is-enabled iptables.service
systemctl is-enabled servicename.service #查詢服務是否開機啓動
systemctl enable *.service #開機運行服務
systemctl disable *.service #取消開機運行
systemctl start *.service #啓動服務
systemctl stop *.service #停止服務
systemctl restart *.service #重啓服務
systemctl reload *.service #重新加載服務配置文件
systemctl status *.service #查詢服務運行狀態
systemctl --failed #顯示啓動失敗的服務
注:*代表某個服務的名字,如http的服務名爲httpd