所以我使用localtunnel
在互联网上公开我的端口,但我只想让与服务器位于同一网络上的设备访问服务器。
我正在使用express-ip-filter
来过滤掉不同网络上的任何内容。我尝试了几件事:首先,我尝试使用192.168.1.0/24
作为唯一可以访问该网站的ip,但这不起作用,因为它不允许任何东西进入。然后我尝试使用我从WhatsMyIp获得的ip,但是它不会允许任何设备进入。然后,我发现express-ip-filter
吐出一条消息,说某个ip是不允许的,并且在每个设备上,都独立于它所连接的网络,地址是CCD_ 5。我试着只允许127.0.0.1
进行确认,然后每个设备都可以访问服务器。为什么ip过滤器只得到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'))
根据我对localtunnel
的有限理解,它似乎通过localtunnel软件代理用户向您发出的请求,从而使所有用户都拥有相同的IP。用外行的话说:
- 用户通过
localtunnel
连接到您的网站 localtunnel
复制用户请求并将其发送到您的计算机- 您的应用程序收到请求,但看起来所有流量都来自
localtunnel
,因为localtunnel
模仿他人的IP非常困难,甚至不可能
如果只想连接同一网络上的设备,为什么要使用localtunnel
?如果只想访问同一本地网络上的另一台机器,则不需要进行任何端口转发或DNS设置。
如果你真的需要隧道连接,那么有一个解决方案,不是使用localtunnel(据我所知,它不用于涉水头,尽管如果有人知道他们是否会改变我的答案),而是使用https://ngrok.com相反,它做完全相同的事情,但也在每个请求中发送一点额外的数据,告诉应用程序客户端的实际IP是什么
- 安装ngrok
- 运行
ngrok http -subdomain=(the subdomain you want) 80
-
编辑您的应用程序代码以找到真正的客户端IP
var findProxyIP = function(req) { var realIP = req.header('x-forwarded-for'); return realIP; } app.use(ipfilter(ips, { mode: "allow", detectIP: findProxyIP }));
ngrok要复杂得多,与localtunnel相比有更多的功能,然而,它是免费的增值软件,其免费计划非常有限。