2017-10-28 122 views
0

在同一網絡上的計算機因此,我使用localtunnel通過Internet公開我的端口,但我只想讓與服務器在同一網絡上的設備訪問服務器。只允許使用Express-ip-filter

我使用express-ip-filter來過濾掉其他網絡上的任何內容。我嘗試了幾件事:首先,我嘗試使用192.168.1.0/24作爲唯一可以訪問網站的ips,但是這並不起作用,因爲它沒有讓任何東西進入。然後我嘗試使用從WhatsMyIp獲得的IP,但是我不知道express-ip-filter吐出了一條消息,說某個ip不允許,並且在每臺設備上,它獨立地連接到它所連接的網絡上,地址是127.0.0.1。我試圖通過只允許127.0.0.1進行確認,然後每臺設備都可以訪問服務器。爲什麼ip-filter只能得到ip 127.0.0.1?這裏是我的代碼作爲參考:

// Init dependencies 
var express = require('express'), 
    ipfilter = require('express-ipfilter').IpFilter 

app = express() 

// Blacklist the following IPs 
var ips = ['192.168.1.0/24'] 

// Create the server 
app.use(ipfilter(ips, { mode: "allow" })) 
app.get('/', function (req, res) { 
    res.send('Hi') 
}) 

app.listen(8080,() => console.log('Up')) 

回答

0

從我有限的瞭解localtunnel看起來它通過代理這將導致所有用戶都具有相同IP的localtunnel軟件的用戶請求你。在深入淺出方面:

  1. 用戶通過localtunnel
  2. localtunnel副本的用戶請求連接到您的網站,並將其發送到您的計算機
  3. 您的應用程序接收到請求,但它看起來像所有的流量都來自localtunnel來,因爲即使不是不可能,也很難仿效其他人的知識產權。

如果你只是想在同一網絡上的設備進行連接爲什麼使用localtunnel可言,你不需要做任何端口轉發或DNS設置,如果你只是想訪問另一臺機器在同一本地網絡上。

如果你真的需要隧道連接,那麼有一個解決方案,而不是與localtunnel(即使我可以告訴不使用forwading標題,但如果有人知道他們是否會改變我的答案),但使用https://ngrok.com而是完全相同的事情,但也會在每個請求中發送一點點額外的數據,以告知應用程序客戶端實際IP是什麼。

  1. 安裝ngrok
  2. 運行ngrok http -subdomain=(the subdomain you want) 80
  3. 編輯應用程序代碼中找到真正的客戶端IP

    var findProxyIP = function(req) { 
        var realIP = req.header('x-forwarded-for'); 
        return realIP; 
    } 
    app.use(ipfilter(ips, { 
        mode: "allow", 
        detectIP: findProxyIP 
    })); 
    

    ngrok要複雜得多,並且與localtunnel有很多更多的功能然而, ,它是免費的軟件,其免費計劃相當有限。

+0

是的,除了它也不是免費使用大部分功能:P – Corrado