起因
- 由于电脑处于学校内网,没有公网 IP,一般情况下,公网是无法访问自己的电脑的
- 出于一些原因自己的电脑或者内网中设备需要对外提供服务
- 尝试比如花生壳、NAT123 之类的,效果不尽人意
原理
- 原理主要是利用 SSH 隧道 + Node.js 反向代理
- 用户请求 -> BAE Node.js -> SSH 隧道 -> 内网服务器
预备工作
一般情况下百度云不会提供 Port 服务,需要自己主动申请 Port,申请通过大概需要一天
申请通过后,先创建
Node.js项目和Port服务创建好后将
Port的端口改为22,如图所示

- 复制代码库地址,克隆下来

添加公钥
- 创建公钥及获取公钥内容
$ ssh-keygen #创建公钥
$ cat ~/.ssh/id_rsa.pub #得到公钥内容
打开刚从 BAE 克隆下来的文件夹,将得到的公钥内容复制到
app.conf文件中
这时可以通过
ssh bae@[ip] –p [port]测试,看能否正常连接
设置 Node.js 反向代理
- 在
package.json文件中 dependencies 下加上以下内容,如图
"http-proxy" : "1.9.0"

- 将以下内容替换
server.js原有的内容
/*
http-proxy
*/
var http = require('http');
var httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({});
http.createServer(function(req, res) {
proxy.web(req, res, {
target :'http://127.0.0.1:8090' //这里的端口只要和后面的SSH隧道映射端口一致就行
})
}).listen(18080);
建立 SSH 隧道
- 下面的
8090与上面server.js文件里面的8090对应,请把125.221.232.253:80改为想映射的网址,请把111.206.45.12改为百度云 Port 服务对应的 IP,把30349改为百度云 Port 服务对应的端口
ssh -C -N -f -g -R 8090:125.221.232.253:80 bae@111.206.45.12 -p 30349
效果展示
访问百度云提供的域名,已成功映射
