1. 程式人生 > 實用技巧 >實現內網穿透

實現內網穿透

實現內網穿透

由於 ipv4 地址的數量不足,大部分中國地區的家庭 ip 地址均是由 ISP 轉發,無法實現搭建個人伺服器的目標。而如果採用 ddns 服務商如花生殼等,在價格昂貴的同時配置極為複雜且不穩定。為解決這樣的問題,localtunnel 出現了。
localtunnel 是一個基於 nodejs 的內網穿透工具。通過簡單的安裝可以實現將內網裡的裝置的某個埠暴露在公網中以提供服務

npm install -g localtunnel 


lt --port PORT_OF_YOUR_SERVICE // 建立一個請求到 localtunnel.me 來獲取一個 URL 指向你的服務
// 輸出:your url is: https://RANDOM.localtunnel.me

// Advanced
// 使用 subdomain 引數和 local-host 引數
lt --port PORT_OF_YOUR_SERVICE --subdomain test --local-host HOSTNAME
// 請求將 HOSTNAME:PORT_OF_YOUR_SERVICE 暴露在 test.localtunnel.me 上

localtunnel.me 只適用於開發測試之類的活動,不適合搭載生產環境 (使用自己搭建的localltunnel-server服務端來負載生產環境)
localtunnel.me 伺服器在國外,可能造成訪問緩慢(使用自己搭建的localltunnel-server服務端來避免)。

localtunnel-server
負責 localtunnel 請求並建立連結

預先要求
一臺具有公網 ip 的伺服器
伺服器需要開放 1000-65535 的 tcp 埠
一個頂級域名 (localtunnel-server master branch 不支援子域名)
將域名 example.com 和 *.example.com 解析到你的伺服器上


安裝與執行
# pick a place where the files will live
git clone git://github.com/defunctzombie/localtunnel-server.git
cd localtunnel-server
npm install

# server set to run on port 1234
bin/server --port 1234
bin/server --port 80
lt --host http://116.62.78.172:80 --port 8080

npm config set registry http://registry.npm.taobao.org

docker安裝

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast
yum -y install docker-ce
service docker start
docker version

docker加速

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://19b12x6i.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

docker安裝localtunne

docker run -d \
--restart always \
--name localtunnel \
--net host \
defunctzombie/localtunnel-server:latest --port 80

docker pull defunctzombie/localtunnel-server:latest
docker login --username=15088694571 registry.cn-hangzhou.aliyuncs.com
docker tag defunctzombie/localtunnel-server registry.cn-hangzhou.aliyuncs.com/lzj123/docker:localtunnel-server

docker push registry.cn-hangzhou.aliyuncs.com/lzj123/docker:localtunnel-server


C:\Users\l>lt --port 8080
your url is: https://empty-emu-72.loca.lt

https://empty-emu-72.loca.lt/blog/

C:\Users\l>lt --help
Usage: lt --port [num] <options>

Options:
-p, --port Internal HTTP server port [required]
-h, --host Upstream server providing forwarding
[default: "https://localtunnel.me"]
-s, --subdomain Request this subdomain
-l, --local-host Tunnel traffic to this host instead of localhost,
override Host header to this host
--local-https Tunnel traffic to a local HTTPS server [boolean]
--local-cert Path to certificate PEM file for local HTTPS server
--local-key Path to certificate key file for local HTTPS server
--local-ca Path to certificate authority file for self-signed
certificates
--allow-invalid-cert Disable certificate checks for your local HTTPS server
(ignore cert/key/ca options) [boolean]
-o, --open Opens the tunnel URL in your browser
--print-requests Print basic request info [boolean]
--help Show this help and exit [boolean]
--version Show version number [boolean]

由於我的伺服器沒有域名繫結,不知道該怎麼將本地對映到我的伺服器

lt --port 8080
猜測:應該走的是https://localtunnel.me
而不是我的http:116.62.78.172

Upstream server providing forwarding
提供轉發的上游伺服器
[default: "https://localtunnel.me"]