Разница между SNAT и маскарадом

39

Я в замешательстве, какова реальная разница между SNAT и Masquerade?

Если я хочу поделиться своим интернет-соединением в локальной сети, то должен ли я выбрать SNAT или Masquerade?

Чанки патхак
источник

Ответы:

41

SNATЦель требует от вас , чтобы дать ему IP - адрес , чтобы применить ко всем исходящим пакетам. MASQUERADEЦель позволяет придать ему интерфейс, и все , что адрес на этом интерфейсе адрес , который применяется ко всем исходящим пакетам. Кроме того, с SNATпомощью отслеживания соединений ядра отслеживаются все соединения, когда интерфейс отключается и возвращается обратно; то же самое не верно для MASQUERADEцели.

Хорошие документы включают HOWTO на сайте Netfilter и iptablesсправочную страницу .

Шон Дж. Гофф
источник
2
У меня проблемы с пониманием преимуществ SNAT. Почему имеет значение, отслеживает ли ядро ​​соединения или нет, когда интерфейс выходит из строя? Что касается MASQUERADE, то в документах netfilter говорится: «Но что более важно, если связь обрывается, соединения (которые теперь все равно теряются) забываются, что означает меньшее количество сбоев при восстановлении соединения с новым IP-адресом». Звучит разумно (хотя какие глюки?) Теперь, глядя на SNAT, каково преимущество отслеживания потерянных соединений? Почему бы не использовать MASQUERADE каждый раз?
Карл Дж
1
@CarlG, я полагаю, что глюки будут происходить с постоянно отслеживаемым -j SNAT(в отличие от отслеживания повторного использования -j MASQUERADE), когда новое исходящее соединение с узла локальной сети использует тот же номер порта источника, что и разорванное исходящее соединение с того же узла локальной сети. В этом случае я могу представить, что входящие пакеты из старого исходящего соединения отправляются на узел, что приводит к путанице в его стеке TCP. Что касается преимущества -j SNAT, что если поле NAT сконфигурировано с тем же внешним IP-адресом, а ядро ​​продолжает пересылку пакетов со старых соединений, а не отвечает RST?
угорь ghEEz
SNAT полезен, если, например, у вас есть несколько IP-адресов, назначенных исходящему интерфейсу, и вы хотите, чтобы источником NAT был конкретный из них.
pgoetz
20

В основном, SNATи MASQUERADEделайте ту же самую исходную вещь NAT в таблице nat в цепочке POSTROUTING.

Различия

  • MASQUERADEне требует, --to-sourceкак это было сделано для работы с динамически назначенными IP-адресами

  • SNAT работает только со статическими IP-адресами, поэтому имеет --to-source

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

ПРИМЕЧАНИЕ . Типичный вариант использования для MASQUERADE: экземпляра AWS EC2 в VPC, он имеет частный IP-адрес в CIDR VPC (например, 10.10.1.0/24) - например, 10.10.1.100, он также имеет публичный IP-адрес для связи с Интернет (предположим, что он находится в общедоступной подсети), через который осуществляется приватный IP 1: 1 NAT. Публичный IP-адрес может измениться после перезагрузки экземпляра (если это НЕ EIP), MASQUERADEэто лучший вариант в этом случае использования.

Важно: все еще возможно использовать MASQUERADEцель со статическим IP, просто учтите дополнительные издержки.

Ссылки

Терри Ван
источник