LINUX.ORG.RU
ФорумAdmin

Настройка pat,dnat,snat

 


0

1

Что-то я запутался.

На cisco nat настраивается через pat. Что бы из вне можно было попасть в сеть используется snat.

ip nat inside source list FOR-NAT interface FastEthernet0/0 overload
ip nat inside source static tcp 192.168.4.2 80 242.211.15.6 80

Тут я решил попробовать сделать подобное на iptables.

Как я понимаю pat в iptables называется masquerade.

Читаю инструкции по пробросу портов.

iptables -t nat -A PREROUTING -p tcp -d 80.81.82.83 -j DNAT --to-destination 10.0.7.2
iptables -t nat -A POSTROUTING -p tcp --dst 10.0.7.2 -j SNAT --to-source 80.81.82.83

И не пойму 2 вещи. Почему в cisco проброс портов делается через snat?

ip nat inside source static tcp 192.168.4.2 80 242.211.15.6 80
А в iptables он предлагает это делать через dnat.
iptables -t nat -A PREROUTING -p tcp -d 80.81.82.83 -j DNAT --to-destination 10.0.7.2
И почему он предлагается использовать dnat и snat, почему нельзя как на cisco masquerade(pat) + snat


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

Anoxemian ★★★★★ ()

Как я понимаю pat в iptables называется masquerade.

Не совсем. SNAT, если нужно, поменяет и порт. По поведению MASQUERADE — это SNAT с одним адресов в ″--to-source″.

А на всякие «Почему?» один ответ — Линукс не Cisco.

mky ★★★★★ ()
Ответ на: комментарий от Anoxemian

Я читаю но не понимаю, везде по разному написано

Вот к примеру

Попробую рассказать о схеме работы статического NAT.

Например, провайдер выдал вам четыре IP адреса 87.123.41.11, 87.123.41.12, 87.123.41.13, 87.123.41.14, а у вас есть три сервера и роутер. Вы назначаете роутеру, например, первый адрес из этого диапазона (87.123.41.11), а остальные делите между серверами (сервер 1 - .12, сервер 2 - .13, сервер 3 - .14).

Чтобы пользователи из интернета могли подключаться на эти серверы, им достаточно будет ввести внешние IP адреса серверов. Например, когда пользователь подключается на адрес 87.123.41.12, то роутер перенаправляет его на сервер 1 


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

Правила DNAT настраиваются в цепочке PREROUTING, в таблице NAT. Эта операция изменяет адрес назначения пакета чтобы он достиг нужной нам цели, когда проходит между сетями. Клиенты будут отправлять пакеты нашему маршрутизатору, и им не нужно знать топологию внутренней сети. Пакет автоматически будет приходить нашему веб-серверу (192.168.1.2).

С помощью этого правила мы перенаправляем все пакеты, пришедшие на порт 80, к 192.168.1.2 опять же на порт 80:

 sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2

В 1 статье он говорит чтобы попасть на наши сервера «используй snat» , через dnat не попасть, так как они не видны из интернета.

В 2 статье говориться что через dnat пакет будет приходить на наш сервер. Но из интернета нельзя попасть на наши сервера, так как это написано в предыдущей статье. И так везде где dnat, где snat для подключения из вне, ничего не понимаю

gedat ()

Достаточно понять, что:

snat - это source nat, и меняется адрес источника. Маскарадинг и pat - частные случаи snat. Пример - на выходе из локалки мы меняем на роутере серые адреса внутренней сети на публичный адрес роутера. В итоге У девайсов внутри локальной сети с серыми адресами есть доступ в Интернет.

Dnat - destination nat, меняется адрес назначения. Пример - на роутере входящий трафик на 80 порт мы транслируем адрес назначения с внешнего адреса роутера на серый адрес веб-сервера внутри локалки. В итоге сервер внутри локальной сети с серым адресом доступен из интернета.

skyman ★★ ()
Последнее исправление: skyman (всего исправлений: 1)

SNAT нельзя использовать для доступа к внутренним хостам, так-как внешний клиент не сможет адресовать внутренний хост. Надо использовать DNAT.

Oleg_Iu ()
Ответ на: комментарий от skyman

Я так изначально и думал как ты описал)) Но я не понимаю вот этого. Есть схема. https://i.ibb.co/hLvfhwd/image.png Что бы попасть из белой сети в серую, ведущий на роутере настроил snat и всё заработало. Но почему snat? Ведь тут нужен dnat, как ты и написал ранее «Пример - на роутере входящий трафик на 80 порт мы транслируем адрес назначения с внешнего адреса роутера на серый адрес веб-сервера внутри локалки. В итоге сервер внутри локальной сети с серым адресом доступен из интернета.»

ip nat inside source static tcp 192.168.3.2 80 213.234.10.2 80

gedat ()
Последнее исправление: gedat (всего исправлений: 1)
Ответ на: комментарий от Oleg_Iu

SNAT нельзя использовать для доступа к внутренним хостам, так-как внешний клиент не сможет адресовать внутренний хост. Надо использовать DNAT.

Я опять полез в интернет и читаю.

[code]Статический NAT — это преобразование «один в один». Статический NAT особенно полезен, когда устройство должно быть доступно извне сети.[code]

Почему тут говорят что можно? Ты выше сказали что нельзя)). Я вот этого не пойму. В разных статьях то можно, то нельзя

gedat ()
Последнее исправление: gedat (всего исправлений: 4)
Ответ на: комментарий от gedat

Я так изначально и думал как ты описал)) Но я не понимаю вот этого. Есть схема. https://i.ibb.co/hLvfhwd/image.png Что бы попасть из белой сети в серую, ведущий на роутере настроил snat и всё заработало. Но почему snat? Ведь тут нужен dnat, как ты и написал ранее «Пример - на роутере входящий трафик на 80 порт мы транслируем адрес назначения с внешнего адреса роутера на серый адрес веб-сервера внутри локалки. В итоге сервер внутри локальной сети с серым адресом доступен из интернета.»

Это так и есть как я описал, тут же в названиях вся суть отображается. Просто надо понять и запомнить особенности вендоров и ОС. И это dnat, не знаю что там ведущий сказал.

ip nat inside source static tcp 192.168.3.2 80 213.234.10.2 80

Это и есть dnat. Он будет транслировать адрес назначения с 213.234.10.2 80 на 192.168.3.2 80. Остаётся только определить внешний и внутренний интерфейсы:

# ip nat inside source static tcp 192.168.3.2 80 213.234.10.2 80
# interface lan 
#(config-if)#ip nat inside
#(config-if)#exit
#(config)# interface wan
#(config-if)#ip nat outside

skyman ★★ ()
Ответ на: комментарий от gedat

SNAT нельзя использовать для доступа к внутренним хостам, так-как внешний клиент не сможет адресовать внутренний хост. Надо использовать DNAT.

Я опять полез в интернет и читаю.

[code]Статический NAT — это преобразование «один в один». Статический NAT особенно полезен, когда устройство должно быть доступно извне сети.[code]

Почему тут говорят что можно? Ты выше сказали что нельзя)). Я вот этого не пойму. В разных статьях то можно, то нельзя

Потому что вы путаете терминологию.

static nat vs dynamic nat (преобразование заранее определенных адресов vs динамических)

И

Source nat vs destination nat (преобразование адресов отправителей vs получателей)

skyman ★★ ()
Ответ на: комментарий от skyman

Хочешь сказать. Что snat это source nat?

А dnat это destination nat.

А static nat и dynamic это другая вещь которая ниже?

Статический NAT — отображение незарегистрированного IP-адреса на зарегистрированный IP-адрес на основании один к одному. Особенно полезно, когда устройство должно быть доступным снаружи сети.

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

gedat ()
Ответ на: комментарий от Pinkbyte

Как работает masquarade я немного понял. Там к адресам добавляются порты. Snat работает по такому же принципу? Так как допустим

iptables -A POSTROUTING -s 192.168.N.0/24 -o eth1 -j SNAT --to-source 10.N.0.1
вся подсетка захочет выйти в интернет. Так же добавляются порты?

И так как если будет меняться 10.N.0.1, то лучше перейти на masquarade?

gedat ()
Последнее исправление: gedat (всего исправлений: 1)
Ответ на: комментарий от anc

Прочитал. Но всё равно не пойму. В статическом нате сказано что он 1к1

1 серый адрес - 1 белый

Но я настроил iptables так что подсеть 192.168.2.0/24 выходит через 1 адрес.

Получается что адреса из 24 подсети выходят через 1 адрес. Но это же уже masquarad должен быть

A POSTROUTING -s 192.168.2.0/24 -o enp0s3 -j SNAT –to-source 192.168.3.28

Есть подозрение что я не понимаю этого из за своего домашнего роутера.

gedat ()
Последнее исправление: gedat (всего исправлений: 4)
Ответ на: комментарий от gedat

В статическом нате сказано что он 1к1

Как уже сказали: SNAT это НЕ статический NAT.

Почитай уже теорию вдумчиво и конкретно по линуксовому NAT-у без привлечения статей, рассказывающих о NAT-ах на железяках типа Cisco и Juniper.

Если грубо - для SNAT conntrack(что это такое - гугл в помощь) хранит соответствие сопоставляет парам «адрес источника-порт-источника <-> адрес назначения порт назначения» отдельную комбинацию «транслированный адрес источника-транслированный порт источника».

Соответственно ответный трафик от адреса назначения с порта назначения, попадаемый на «транслированный адрес источника-порт источника» попадают на «адрес источника-порт источника».

В такой схеме важно уяснить одну вещь: нет глобального ограничения на ~20000 NAT-трансляций, как в давние времена, когда трансляции были port based и не учитывали адрес назначения и порт(точный лимит - это «dynamic port range», гугл в помощь).

Сейчас же, ничего не мешает использовать пару «транслированный адрес источника-транслированный порт источника» для РАЗНЫХ пар «адрес назначения-порт назначения». То есть сейчас мы упираемся в ~20000 трансляций на одну комбинацию IP-порт назначения. Это ограничение обходится в общем случае ТОЛЬКО увеличением пула транслируемых адресов, можно еще конечно расширирить диапазон портов для трансляции, но один хрен это всё - экстенсивный путь.

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Ответ на: комментарий от gedat

Получается что адреса из 24 подсети выходят через 1 адрес. Но это же уже masquarad должен быть

-j MAQUERADE - это тупо SNAT в условиях когда транслируемый адрес на WAN-интерфейсе тебе НЕИЗВЕСТЕН на момент написания правил файрвола или МОЖЕТ МЕНЯТЬСЯ(например адрес приходит на WAN-интерфейс по DHCP).

Pinkbyte ★★★★★ ()
Ответ на: комментарий от gedat

Для iptables:

SNAT и DNAT - это оба статические НАТ, только направленные в разные стороны;

MASQ - это динамический НАТ;

NETMAP - это НАТ сеть-в-сеть, классический НАТ

anonymous ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.