有时候需要在外网访问一下内网的站点,比如论坛什么的。
一、Dog-tunnel
下载(不要下载 Lite 版):http://dog-tunnel.tk/
本地电脑(需要校内网络认证)执行:
dtunnel -reg xxx -local 192.168.1.10:4321 -clientkey kkkkk
上面 172.16.168.200:2333 假设是内网的一个服务。
外网的服务器执行:
dtunnel -link xxx -local :8888 -clientkey kkkkk
然后你就可以使用外网 IP 的 8888 端口访问论坛了(消耗你的校园认证流量)。
二、Ngrok
编译:
sudo apt-get install build-essential golang mercurial git
获取源代码:
git clone https://github.com/inconshreveable/ngrok.git ngrok
cd ngrok
生成并替换源码里默认的证书,注意域名修改为你自己的。之后编译出来的服务端客户端会基于这个证书来加密通讯,保证了安全性。
$ NGROK_DOMAIN="bgm.news"
$ openssl genrsa -out base.key 2048
$ openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
$ cp base.pem assets/client/tls/ngrokroot.crt
开始编译:
sudo make release-server release-client
如果一切正常,ngrok/bin 目录下应该有 ngrok、ngrokd 两个可执行文件。
服务端
sudo ./bin/ngrokd \
-tlsKey=server.key \
-tlsCrt=server.crt \
-domain="bgm.news" \
-httpAddr=":8081" \
-httpsAddr=":8082" \
-tunnelAddr=":4443"
客户端
写一个简单的配置文件,随意命名如 ngrok.cfg:
server_addr: bgm.news:4443
trust_host_root_certs: false
指定子域、要转发的协议和端口,以及配置文件,运行客户端:
./bin/ngrok -subdomain bbs -proto=http -config=ngrok.cfg 80
现在再访问http://bbs.bgm.news ,访问到的已经是我本机 80 端口上的服务了。
要访问其他机器的服务,只需要修改为:
./bin/ngrok -subdomain bbs -proto=http -config=ngrok.cfg 172.16.168.200:80
如何避免消耗自己的认证网络流量?才不告诉你呢~