3

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

express-ip-filter用来过滤掉不同网络上的任何东西。我尝试了一些事情:首先我尝试使用192.168.1.0/24作为唯一可以访问该网站的 ip,但这不起作用,因为它没有让任何东西进入。然后我尝试使用从 WhatsMyIp 获得的 ip,但这不会不要让任何设备进入。然后我发现它会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'))
4

1 回答 1

0

根据我对它的有限理解,localtunnel它似乎通过 localtunnel 软件代理用户请求,这会导致所有用户拥有相同的 IP。通俗地说:

  1. 用户通过以下方式连接到您的网站localtunnel
  2. localtunnel复制用户请求并将其发送到您的计算机
  3. 您的应用程序收到了请求,但看起来所有流量都来自,localtunnel因为localtunnel模仿别人的 IP 即使不是不可能,也是非常困难的。

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

如果您确实需要隧道连接,那么有一个解决方案,而不是使用 localtunnel(据我所知,它不使用转发标头,尽管如果有人知道他们是否会改变我的答案)但使用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
    }));
    

    与 localtunnel 相比,ngrok 复杂得多,并且具有更多功能,但是,它是免费增值软件,其免费计划非常有限。

于 2017-10-28T10:16:28.647 回答