Поэтому я использую 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-фильтр получает только 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
. Зачем использовать localtunnel
вообще, если вы хотите, чтобы устройства в одной сети могли подключаться, вам не нужно выполнять какую-либо переадресацию портов или настройку DNS, если вы просто хотите получить доступ к другому компьютеру в той же локальной сети.
Если вам действительно нужны туннельные соединения, то есть решение, а не с localtunnel (что, насколько я могу судить, не использует forwading заголовки, хотя, если кто-то знает, если они плохо меняют мой ответ), но используя https://ngrok.com вместо этого делает точно то же самое, но также отправляет немного дополнительного бита данных в каждом запросе, который сообщает приложению, что такое фактический IP-адрес клиента.
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, однако это программное обеспечение freemium, и его свободный план довольно ограничен.