仅允许使用Express-ip-filter在同一网络上的计算机

时间:2017-10-28 09:19:28

标签: javascript node.js express ip localtunnel

所以我使用localtunnel通过互联网公开我的端口,但我只想让与服务器在同一网络上的设备访问服务器。

我正在使用express-ip-filter来过滤掉不同网络上的任何内容。我尝试了一些事情:首先我尝试使用192.168.1.0/24作为唯一可以访问该网站的ips,但这不起作用,因为它没有让任何东西进入。我接着尝试使用我得到的ip WhatsMyIp,但不会让任何设备进入。然后我发现express-ip-filter会发出一条消息,说某个ip不被允许,并且在每台设备上,独立于它所连接的网络上,地址是127.0.0.1。我尝试通过仅允许127.0.0.1来确认,然后每个设备都可以访问服务器。为什么ip-filter只能获得127.0.0.1作为ip?这是我的代码作为参考:

// 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'))

1 个答案:

答案 0 :(得分:0)

根据我对localtunnel的有限理解,似乎代理用户通过localtunnel软件向您发出的请求,这会导致所有用户拥有相同的IP。在外行人看来:

  1. 用户通过localtunnel
  2. 连接到您的网站
  3. localtunnel复制用户请求并将其发送到您的计算机
  4. 您的应用程序收到了请求,但似乎所有流量都来自localtunnel,因为如果localtunnel模仿其他人的IP,那就非常困难。< / LI>

    如果您只希望同一网络上的设备进行连接,为什么要使用localtunnel,如果您只想访问另一台机器,则不需要进行任何端口转发或DNS设置本地网络。

    如果你真的需要隧道连接那么有一个解决方案,而不是localtunnel(据我所知,不使用转发头,虽然如果有人知道他们是否做错了改变我的答案)但使用{{ 3}}而不是完全相同的东西,但也在每个请求中发送一点额外的数据,告诉应用程序客户端的实际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
      }));
      
      与localtunnel相比,ngrok更复杂,功能更多,但它是免费增值软件,其免费计划非常有限。