Разрешить только компьютеры в одной сети, используя Express-IP-фильтр

1

Поэтому я использую 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'))
Теги:
express
ip
localtunnel

1 ответ

0

Из моего ограниченного понимания localtunnel кажется, что пользователи прокси запрашивают у вас через программное обеспечение localtunnel, которое заставляет всех пользователей иметь один и тот же IP-адрес. В условиях мирской жизни:

  1. Пользователь подключается к вашему сайту через localtunnel
  2. localtunnel копирует запрос пользователя и отправляет его на ваш компьютер.
  3. Ваше приложение получает запрос, но похоже, что весь трафик поступает из localtunnel потому что невероятно сложно, если не невозможно, для localtunnel подражать другому IP- 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, однако это программное обеспечение freemium, и его свободный план довольно ограничен.

  • 0
    Да, кроме того, это также не бесплатно использовать большинство функций: P

Ещё вопросы

Сообщество Overcoder
Наверх
Меню