Что такое nat loopback в роутере
Перейти к содержимому

Что такое nat loopback в роутере

  • автор:

INTRODUCTION

What is NAT Loopback and why is it needed to host a public Opensimulator Region?

Currently (as at August 2010), a hosted region on a home connection with a broadband router needs, what is known as NAT Loopback functionality.

Many DSL routers/modems prevent loopback connections as a security feature. This means that a machine on your local network (e.g. behind your DSL router/modem) cannot connect to a forward facing IP address (such as 199.149.252.44) of a machine that it also on your local network. Connecting to the local IP address (such as 192.168.2.40) of that same machine works fine.

This is an issue since each region has to specify an IP address for the client to connect. This is the ExternalHostName parameter in a regions config file (e.g. bin/Regions/Regions.ini). In the absence of NAT loopback, if a forward facing IP address is specified (such as 199.149.252.44) then external clients will be able to connect to the region but clients on your local network will not. If the internal address were put in ExternalHostName instead (e.g. 192.168.2.40) then viewers on the local network will be able to connect but viewers from an external network would not.

This page shows a list of routers supporting NAT Loopback. Please add both known working and non-working routers to the list.

If solving the problem by configuring your router turns out not to be possible, you can work around it by setting up some IPTable rules on the computer you’re using to browse the web (assuming it’s a GNU/Linux OS). For details see the NAT Loopback Iptables-script.

Router/Modem Table

Router / Modem Table

(this information gathered from the OpenSimulator WIKI and OSGrid forums information collectively and assembled into this sortable formatted table for ease of use and quick access. Links provided are either to the Manufactures pages or Pages which can further assist in configuration and troubleshooting.)

[98] Google for more info

Notes on Some Routers

D-Link

D-Link DGL-4500 series of routers have the largest available nat table of any router on the market. These routers range from 70$-180$ USD depending on where you live and purchase from.

When considering a purchase, consider performance against cost. Upper end ADSL 2+ routers can add several Mbs to your modems sync speed.

Wireless Routers — Access Point Only

These routers are Access Point devices, and contain no ADSL modem and hence need a separate adsl modem operating in Bridge mode.

  • D-Link DGL-4500
  • D-Link DIR-655
  • D-Link DIR-635
  • D-Link DIR-601
  • D-Link DIR-600
  • D-Link DI-524

Routers With ADSL modem No items to list currently

Note: The DGL-4100 & DGL-4300 have been discontinued, and the replacement model is the DIL-825 and DIL-855 — Loopback status unknown on these later models. The DGL-4300 may be available second hand.

Netgear

  • NETGEAR WNR834M : ftp://downloads.netgear.com/files/wnr834m_ref_manual.pdf
  • Netgear DG834G v3 with latest firmware & v4 upto firmware version v5.01.09 (according to this link, a later firmware update of v4 removed NAT loopback) NAT Loopback returned as menu option with latest v5.01.16 firmware for the v4 model. The latest model versions, marked v5 on the unit’s label, has significantly different internals and is not currently Loopback capable(the v5 has the wireless aerial on the right, not the left, as looking from the front. The DG834G v1, v2, v3 & v4 are end of line in most markets. The v3 & v4 are proven good performers.
  • Netgear DGN1000 worked out of the box. Note this working item reports its firmware version as V2.1.00.19_VG which seems much newer than the version offered for download on netgear.com.
  • NETGEAR FVS338 : loopback issue with firmware v3.0.3-17 (2008). LAN address is incorrectly presented to simulator instead of WAN address. Fixed in latest update v3.0.6-25 (2010).

Other routers & Hardware

  • BT home hub V2
  • If you are using a ZyXEL DSL router/modem from Embarq, please read this configuration guide. This will show you how to reconfigure your DSL router/modem to fix this problem.

KNOWN non-functional for OpenSim:

  • Netgear Pro Safe VPN FVS318 : http://www.netgear.com/Products/VPNandSSL/WiredVPNFirewallRouters/FVS318.aspx
  • NetGear WGR614 does not work with ISP required gateway modems
  • Belkin F5D7230-4 (the router might work if 3rd party firmware is used, such as DD-WRT : http://www.dd-wrt.com/ )

REFERENCE LINKS:

More Information Related to Routers and Solutions @: osgrid.org/forums/viewtopic.php

Linux specific solutions

SETTING UP A LINUX COMPUTER TO ACT AS A ROUTER

For Linux based Netfilter (iptables) routers, you want to set up the NAT table with some extra entries The following script is something to get you started, you’ll need to fix up the variables at the top to match your system and network.

#!/bin/bash # # vvvvv - Fix these! - vvvvv IPTABLES=/usr/sbin/iptables LAN_NETWORK=192.168.0.0/24 SERVER_IP=192.168.0.2 INTERNET_IP=100.100.100.100 REMOTING_PORT=8895 REGION_PORT=9000 # ^^^^^ - Fix these! - ^^^^^ # First, the Destination NAT, anything going to the external address on our ports, we redirect to the server # Note, if you have a double NAT running and this router doesn't actually have the internet IP address, you'll # need another set of PREROUTING-DNAT lines with the --destination (-d) set to the internet facing private address $IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p tcp --dport $REMOTING_PORT --jump DNAT --to-destination $SERVER_IP $IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p udp --dport $REGION_PORT --jump DNAT --to-destination $SERVER_IP $IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p tcp --dport $REGION_PORT --jump DNAT --to-destination $SERVER_IP # Second, the Source NAT, we need this so that returning packets to our LAN clients go back through the router first, # otherwise, the server will try to talk directly to the client and the client will reject them $IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p tcp --dport $REMOTING_PORT --jump SNAT --to-source $INTERNET_IP $IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p udp --dport $REGION_PORT --jump SNAT --to-source $INTERNET_IP $IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p tcp --dport $REGION_PORT --jump SNAT --to-source $INTERNET_IP

DNS solution

It’s possible to host your own DNS-server, so you can prevent some of the dns-naming problems mentioned before. If http://example.org resolves to the external ip, and that loopback connection is prevented by your router, you could point your resolv.conf to a local nameserver like:

nameserver 192.168.2.2

Now you need bind/named installed in order to handle the dns-requests. You can find a bind example configfile here.

openWRT Routers:

If you use openWRT firmware on your router, check here: OpenWRT NATLoopback

Table of openWRT supported Hardware, check here: openWRT

This may work for older WRT routers:

insmod ipt_mark insmod xt_mark iptables -t mangle -A PREROUTING -i ! `get_wanface` -d `nvram get wan_ipaddr` -j MARK --set-mark 0xd001 iptables -t mangle -A PREROUTING -j CONNMARK --save-mark iptables -t nat -A POSTROUTING -m mark --mark 0xd001 -j MASQUERADE

Windows XP, Windows 7, 8, 8.1, 10 Loopback Adapter Install:

  • Windows XP NAT Loopback
  • 7 NAT Loopback
  • 8, 8.1, 10 NAT Loopback

NAT loopback

NAT loopback, also known as hairpin NAT, is the feature where a router can route a network request from a device back within the same network rather than directing it to the internet. This capability becomes indispensable when a device on the network endeavors to connect with another device on the same network via the external (public) IP address or a domain name associated with that IP address.

NAT loopback examples

  • Home security: If a home security system is configured to be accessible over the internet and an individual within the same home network tries to access it using the external IP address, NAT loopback allows this to happen smoothly.
  • Remote desktop: Users trying to connect to their desktop machine from a laptop within the same network via the external IP address or domain name would need NAT loopback for a successful connection.

Advantages and disadvantages of NAT loopback

  • Convenience: Enables devices in the same local network to communicate using their public IP addresses or domain names, which can simplify network management and use.
  • Consistency: NAT loopback allows the same URL or IP address to be used for a service, whether accessing it from the local network or the internet.
  • Security concerns: If not configured correctly, NAT loopback may open up more of the network to potential intrusion.
  • Router support: Not all routers support NAT loopback.

Using NAT loopback

  • Ensure the router supports NAT loopback, or consider a router upgrade if this feature is essential for network activities.
  • Exercise due caution and apply necessary security measures when enabling NAT loopback.

Как включить Nat Loopback для обращения к локальному ресурсу по глобальному домену?

Новичок

Есть роутер Keenetic Speedster (KN-3010). В него входят два WAN — WAN1 от Билайн (витая пара) и WAN2 от Ростелеком (витая пара от РТ’шного роутера, в него, в свою очередь, входит оптика). У РТ есть белый статический IP, допустим 11.22.33.44 и на него повешен мой домен my-site.com. В локальной сети Keenetic (192.168.1.0/24) подключены NAS (сетевой накопитель) Synology и мой стационарный компьютер. См скриншот 1.

Задача: получить возможность заходить через интернет на NAS Synology по домену my-site.com

Она реализована путём проброса портов 5050 (http), 5051 (https) с РТшного роутера на Кинетик, а с Кинетика этих же портов — на Synology.

Итого через интернет всё работает. Я захожу https://my-site.com:5051 — попадаю в админку Кинетика. Но это не работает с моего компьютера. Результат — на втором скрине.

Гуглинг показывает, что нужно включить технологию NAT Loopback (она же Hairpin NAT). Но как это сделать? Всю админку Кинетика облазил — не нашёл. Говорят она включена по умолчанию, в документации (3 скриншот) сказано

By default, the setting is enabled for the Home segment interfaces (private and protected security levels).

Но попадает ли моя схема под это определение — непонятно.

Пробовал зайти через консоль (4 скриншот) — но эту функцию можно включить лишь для определённого интерфейса, а для какого — непонятно, у меня их почему-то выводится огромное количество. Наугад пробовал для интерфейсов «1» и «GigabitEthernet0/1» — т.к. роутер РТ подключён во второй порт Кинетика — не даёт, пишет это неверные названия интерфейсов. Я в тупике. Подскажите, как заставить работать заход на Synolgy по докумену из локальной сети.

Правильный NAT Loopback/HairPin NAT в MikroTik

Смысл технологии NAT loopback (NAT hairpinning) в том, что когда из внутренней сети приходит запрос на внешний IP-адрес маршрутизатора, он считается пришедшим извне — а значит, работают правила брандмауэра, относящиеся ко внешним соединениям. Таким образом, правила проброса портов извне также будут активны и корректно обрабатываться на запросах, пришедших из локальной сети. В этой статье разберем различные методы реализации этой схемы.

Немного теории

NAT

Технология NAT — Network Address Translation (а точнее один из его подвидов PAT — Port Address Translation) позволяет использовать один внешний адрес для создания подключений несколькими устройствами в локальной сети. Разберем как это работает.

Возьмем стандартную сеть и маршрутизатор MikroTik:

Когда компьютер в локальной сети хочет получить доступ до ресурса и посылает запрос в интернет, маршрутизатор создает новую запись в таблице трансляции адресов (NAT connections table), присваивает метку new на этапе connection tracking. Далее следует этап routing decision, где маршрутизатор присваивает пакету выходной интерфейс (как правило WAN — ether1), после прохода цепочки forward, в post routing происходит замена адреса источника на адрес выходного интерфейса динамически (action: masquerade) либо на заранее заданный статически (action: src-nat — to-address). Таким образом пакет уходит в интернет с внешним IP адресом маршрутизатора с исходным адресом назначения.

В виде правил MikroTik механизм выглядит примерно так:

/ip firewall nat add action=masquerade chain=srcnat out-interface-list=ether1

Для того, чтобы идентифицировать данное соединение в таблице трансляции адресов создается запись, где содержатся параметры соединения: адрес источника (в локальной сети), адрес назначения, порт назначения, порт источника. В MikroTik эту таблицу можно посмотреть в IP — Firewall — Connections. Данные записи содержат дополнительные поля, такие как: наличие fasttrack, есть ли ответные пакеты, активность правил цепочек src-nat и dst-nat и другие. Если NAT в MikroTik не включен (отсутствуют работающие правила таблицы NAT), то connection tracking автоматически отключается за ненадобностью.

Таким образом, когда приходит ответ от сервера, маршрутизатор смотрит таблицу трансляции адресов и если находит там подходящую запись, то на этапе connection tracking заменяет адрес назначения с внешнего IP маршрутизатора на локальный адрес устройства, на сохраненный ранее в таблице трансляции. С помощью этого механизма, устройство в локальной сети получает доступ в интернет.

Проброс портов

Ключевой особенностью является то, что новые запросы могут создавать только в одну сторону: из локальной сети в интернет, но не наоборот. «NAT не является firewall», однако в стандартной конфигурации из-за специфики работы он запрещает все новые соединения с внешнего интерфейса в локальную сеть. При отсутствии подходящего правила для обратной трансляции пакет переходит в цепочку input — то есть пакетов, которые адресованы самому маршрутизатору. Если не найдена подходящая служба на маршрутизаторе, прослушивающая соединения на порту, пакет отбрасывается.

Иногда возникает потребность принимать новые соединения из интернета, на компьютере в локальной сети за NAT. Для этого потребуется правило «обратного NAT», которое сработает в цепочке prerouting и заменит адрес назначения на требуемый.

/ip firewall nat add chain=dstnat dst-port=80,443 protocol=tcp action=dst-nat to-addresses=192.168.88.5

Как видно из правила, оно сработает на все пакеты, проходящие через роутер, у которых порт назначения 80 или 443 и перепишет их адрес на 192.168.88.5. Но так как работа этого правила распространяется и на пакеты, идущие из локальной сети, то устройства в локальной сети больше не смогут получать доступ к web ресурсам интернета потому что маршрутизатор начнет заменять адрес назначения на 192.168.88.5 на всех пакетах, соответствующих условию. Чтобы такого не произошло, необходимо добавить условия адреса назначения или интерфейса назначения.

/ip firewall nat add chain=dstnat in-interface=ether1 dst-port=80,443 protocol=tcp action=dst-nat to-addresses=192.168.88.5

Данное правило будет полноценно работать и перенаправлять новые соединения из интернета на устройство в локальной сети.

NAT Loopback / Hairpin NAT

Проблема

С новыми соединениями из интернета разобрались, но что будет, если устройство попытается обратиться на внешний адрес маршрутизатора из локальной сети? В зависимости от условия возможны следующие варианты:

  • Если в условии использовался внешний интерфейс, то правило не сработает и пакет будет отброшен маршрутизатором — соединение не состоится.
  • Если в условии использовался внешний адрес маршрутизатора, то правило сработает, но соединение не установится. Рассмотрим этот сценарий подробнее.

Запрос успешно дойдет до устройства назначения, однако ответ должен будет вернуться напрямую на устройство, без маршрутизатора. В результате при проверках на устройстве-инициаторе соединения пакет будет отброшен, так как от этого адреса источника он не ждет ответов. Соединение не установится.

Варианты решения

Подмена на уровне DNS

Если приложение использует DNS для определения IP адреса сервиса назначения (например, сайт), то самым правильным способом будет использование в локальной сети DNS-сервера, который будет отдавать внутренний IP адрес для домена. В случае использовании MikroTik DNS-сервера, правило будет выглядеть примерно так:

/ip dns static add address=192.168.88.5 name=example.com

Таким образом настройка NAT Loopback не потребуется в принципе. Клиент будет напрямую обращаться на сервер назначения по локальной сети без использования маршрутизатора, а сервер назначения, в свою очередь, увидит настоящий адрес источника в локальной сети

Данное решение не будет работать в случае использования DNS-over-HTTPS или аналогов на конечных устройствах или в случае, если приложение не использует доменные имена.

Официальный

Многие ресурсы, включая wiki.mikrotik.com, предлагают примерно одни и те же варианты решения:

/ip firewall nat add chain=srcnat src-address=192.168.88.0/24 \ dst-address=192.168.88.5 protocol=tcp dst-port=80,443 \ out-interface=LAN action=masquerade

Этим правилом задаем, что: всем пакетам, которые идут из локальной сети, на адрес 192.168.88.5, на порты 80 и 443 и выходят с интерфейса LAN мы меняем адрес источника на адрес маршрутизатора в локальной сети.

Таким образом, соединение успешно устанавливается, однако есть несколько ограничений:

  • На каждое правило проброса порта потребуется еще одно правило для поддержки NAT Loopback
  • Можно легко попасться на граблю, не указав фильтр источника пакетов (src-address=192.168.88.0/24). Все запросы (включая те, что идут из интернета) на сервер назначения будут идти от адреса маршрутизатора, что в итоге может сломать фильтрацию на базе адресов источника на сервере назначения.
  • Серверу назначения, которому в итоге придет запрос не будет видно IP адрес источника, так как им будет являться маршрутизатор
Дополненный официальный способ

Официальный способ мне не понравился в первую очередь тем, что потребуется создавать несколько правил для одного проброса портов. Об этом легко забыть или ошибиться в составлении второго правила.

Суть моего решения заключается в том, чтобы на входе в маршрутизатор маркировать пакеты, пришедшие на внешний адрес из локальной сети, а после прохождения процедуры маршрутизации подставлять IP адрес маршрутизатора отдельными правилами, отличными от правил проброса портов.

Первым этапом нужно промаркировать (new-packet-mark=nat-loopback) те пакеты, которые пришли на внешний адрес маршрутизатора (dst-address=203.0.113.5) из локальной сети (in-interface=LAN) и являются новыми соединениями (connection-state=new).

/ip firewall mangle add chain=prerouting comment="NAT Loopback detect" dst-address=203.0.113.5 in-interface=LAN connection-state=new action=mark-packet new-packet-mark=nat-loopback passthrough=yes 

Теперь нужно написать обработчик пакета, который сработает после того как пакет пройдет маршрутизацию и будет на выходе в локальную сеть, в таблице mangle необходимо заменить адрес источника на адрес маршрутизатора.

/ip firewall nat add chain=srcnat packet-mark=nat-loopback action=masquerade comment="NAT Loopback replace address" 

Далее можно писать правила проброса в классическом виде. Этой схемой мы избавились от двух из трех недостатков предыдущего способа.

Таким образом, появляется возможность писать правила проброса портов в обычном виде по одному на порт или несколько портов. Они будут работать как и в классическом сценарии (при поступлении извне), так и в случае поступления запросов из локальной сети.

/ip firewall nat add chain=dstnat dst-address=203.0.113.5 protocol=tcp dst-port=80,443 action=dst-nat to-addresses=192.168.88.5 add chain=dstnat dst-address=203.0.113.5 protocol=tcp dst-port=8080 action=dst-nat to-addresses=192.168.88.20 add chain=dstnat dst-address=203.0.113.5 protocol=tcp dst-port=25,143 action=dst-nat to-addresses=192.168.88.100

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *