一.概要
1.名称解释:
内网穿透即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。
就是说映射端口,能让外网的电脑找到处于内网的电脑,提高下载速度。
2.本文目的:
实现ARM,Window,Linux,Mac系统主机,在没有公网固定IP的情况下,仍可访问主机上部署的web服务。
实现ssh登陆。
二.准备
1.服务器1台
本人用的是 阿里服务器 公网 IP:
X.X.X.X
2.域名
申请 万网域名: ayyxxx.com
解析设置
二. 安装go
1.下载go
cd ~
wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz
2.设置环境变量
echo 'export GOROOT=/usr/local/go' >> /etc/profile
echo 'export PATH=$PATH:$GOROOT/bin' >> /etc/profile
echo 'export GOPATH=$HOME/go' >> /etc/profile
echo 'export GOROOT_BOOTSTRAP=/usr/local/go' >> /etc/profile
source /etc/profile
此处可能在make生成服务端和客户端时报错:
##### Building Go bootstrap tool.
cmd/dist
ERROR: $GOROOT_BOOTSTRAP must not be set to $GOROOT
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
解决方法:
将当前的go复制一份
#cp -rf go go1.4
3.检查是否安装成功
go version
# 正常的话会返回类似这样的信息: go version go1.9.2 linux/amd64
三.安装ngrok
1.下载ngrok
cd /usr/local/
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=/usr/local/ngrok/
export NGROK_DOMAIN="cdgngrok.ayyxxx.com"
cd ngrok
2.生成证书(重要)
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
3.在软件源代码目录下面会生成一些证书文件,我们需要把这些文件拷贝到指定位置
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
说明:提示是否覆盖原有文件, 输入 y
4.如果是在国内的服务器需要执行此步,香港或者国外的服务器不需要
vim /usr/local/ngrok/src/ngrok/log/logger.go
log "github.com/keepeye/log4go"
5.(1)编译服务端(同时也编译了一个linux下的客户端),注意这里的amd64,如果是32位的话,请修改成386
cd /usr/local/go/src
GOOS=linux GOARCH=amd64 ./make.bash
cd /usr/local/ngrok/
GOOS=linux GOARCH=amd64 make release-server release-client
此处可能报错:
##### Building Go bootstrap tool.
cmd/dist
ERROR: $GOROOT_BOOTSTRAP must not be set to $GOROOT
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
解决方法:
将当前的go复制一份
#cp -rf go go1.4
(2)编译arm客户端
cd /usr/local/go/src
GOOS=linux GOARCH=arm ./make.bash
cd /usr/local/ngrok/
GOOS=linux GOARCH=arm make release-client
(3)编译windows下的客户端
cd /usr/local/go/src
GOOS=windows GOARCH=amd64 ./make.bash
cd /usr/local/ngrok/
GOOS=windows GOARCH=amd64 make release-client
说明:编译生成的 服务端和客户端文件放在 /usr/local/ngrok/bin/ 下
6.启动服务端
cd /usr/local/ngrok/bin/
./ngrokd -domain="cdgngrok.ayyxxx.com" &
## & 设置后台运行
出现如下内容说明启动成功:
7.客户端的运行
本人玩的是 EW-320, 支持Linux系统。插上网线,并设置 ip及网关,使其可以联网。
拷贝 ngrok服务器 /usr/local/ngrok/bin/linux_arm/ 下的 ngrok
复制到 EW-320网关 ~
家目录
(1)配置ngrok.yml,如下:
cd ~
vim ngrok.yml
server_addr: "cdgngrok.ayyxxx.com:4443"
tunnels:
ssh:
remote_port: 51200 #远程端口
proto:
tcp: ":22"
web:
subdomain: 77 #子域名
proto:
http: ":80"
(2)启动arm的客户端
./ngrok -config=ngrok.yml start ssh web
启动成功:
(3)测试web服务
浏览器中访问域名: 77.cdgngrok.ayyxxx.com 效果与 输入 ip地址效果一样,如下图
(4)测试是ssh登录
远程连接工具xshell
ssh登录成功
——————————————————————————————————
结束
——————————————————————————————————